拿到文件拖入ida后
发现未被反编译,可能存在花指令
找到花指令后,nop掉下一行的重复指令
将其保存为可执行文件
保存后将修改好的程序拖入ida
文件已经被反编译成功
发现sub_401005的参数全部已知,跟进分析
a2通过指针赋值,该函数为Str字符串改值,也就是str与v12相互异或:
s = '0kk`d1a`55k222k2a776jbfgd`06cjjb'
b = ord('S')
for i in range(len(s)):
print(chr(ord(s[i])^b),end='')
得到字符串:c8837b23ff8aaa8a2dde915473ce0991
在if判断中将str与pbData比较,所以观察pbData数据
得知pbData长度<=6,跟进sub_40101E函数
CryptCreateHash(phProv, 0x8003u, 0, 0, &phHash)这句话等价于md5加密,在想到str也确实是32位小写,md5解密得到:123321
本以为flag得到了,答案错了。
再想到if中的语句,MessageBoxA是弹出对话框函数,if后v11也被弹出,而v11被sub_401005处理过,跟进
先将第一个参数的数据提出
0x57,0x5E,0x52,0x54,0x49,0x5F,0x01,0x6D,0x69,0x46,0x02,0x6E,0x5F,0x02,0x6C,0x575B,0x54,0x4C
也是一次异或操作:
a = [0x57,0x5E,0x52,0x54,0x49,0x5F,0x01,0x6D,0x69,0x46,0x02,0x6E,0x5F,0x02,0x6C,0x57,0x5B,0x54,0x4C]
b = '123321'
for i in range(len(a)):
print(chr(a[i]^ord(b[i%6])),end='')
得到flag