下载文件判断是apk文件,运行看看:
看来输入的字符很有可能就是flag,用android killer打开分析一下,搜索关键词“please try again”,定位关键代码:
看一下java代码:
加密算法大概的意思是:首先对输入的字符串进行逆序,然后进行encode()处理,再进行getbase64处理,最后判断是否等于“NzU2ZDJmYzg0ZDA3YTM1NmM4ZjY4ZjcxZmU3NmUxODk=”
所以首先base64解码:
再进行md5破解
最后进行逆序,获得flag
题目要破解注册码,用peid看一下:
是个C#写的程序,因此用ILSpy分析一下,搜索关键词“注册失败”
要返回成功,需要a==b,所以flag即为“UENURntFYTV5X0RvX05ldF9DcjRjazNyfQ==”的base64解码:
文件下载下来发现时pyc文件,在线反编译:https://tool.lu/pyc/,得到关键源代码:
算法大概的意思是,flag的长度为17,然后对flag逆序,每一位ord(flag[i]) + pwda[i] & 255 == lookup[i + pwdb[i]]
知道了算法的意思,就可以直接尝试爆破:
下载下来是个smali文件,利用smali2java工具反编译,得到java代码:
大概的意思是:首先定义了两个base64为编码字符串,解码后传入decrypt()中处理,两个base64字符串解码后分别为:
[0xb1,0x23,0x67,0xc7,0x55,0x0a,0x6d,0x8a,0xc0,0xd7,0xe3,0x0e,0xad,0xdb,0x43,0x4c]和”phrack ctf 2016”
在decrypt()中,对[0xb1,0x23,0x67,0xc7,0x55,0x0a,0x6d,0x8a,0xc0,0xd7,0xe3,0x0e,0xad,0xdb,0x43,0x4c]进行AEC加密,密钥为”phrack ctf 2016”,模式为"AES/ECB/NoPadding"
编写python脚本:
首先用PEID看一下,发现NSPack的壳
用工具脱壳:
运行一下:
需要猜解flag,拖入IDA
关键代码:
其实flag就是byte_402130[v4%16]^dword_402150[v4]
看一下这两个数据:
编写脚本:
s1="this_is_not_flag"
s2=[0x12,4, 8, 0x14, 0x24, 0x5C, 0x4A, 0x3D, 0x56, 0x0A, 0x10, 0x67, 0,0x41, 0,1, 0x46, 0x5A, 0x44, 0x42, 0x6E, 0x0C, 0x44, 0x72, 0x0C, 0x0D,0x40, 0x3E, 0x4B, 0x5F, 2, 1, 0x4C, 0x5E, 0x5B, 0x17, 0x6E, 0x0C,0x16, 0x68, 0x5B, 0x12, 2]
print len(s2)
flag=''
for i in range(0,43):
flag+=chr(ord(s1[i%16])^s2[i])
print flag
附:下载地址
https://pan.baidu.com/s/1QlO8t_QOuWiOj3pde-nubA
j0pv