32位exe,无壳,主要考smc和堆栈
放入ida,最开始堆栈不平衡,ida不能很好的反汇编,先手动修改一下,然后有个假的flag
flag{fak3_alw35_sp_me!!}一看就是假的,但是知道了flag是24位的,接着往下走,encyrpt函数里是关键加密代码,有个smc,可以写脚本静态,我用的动调
动调出来就是简单的异或操作
encry=[14, 0, 0, 0, 13, 0, 0, 0, 9, 0,
0, 0, 6, 0, 0, 0, 19, 0, 0, 0,
5, 0, 0, 0, 88, 0, 0, 0, 86, 0,
0, 0, 62, 0, 0, 0, 6, 0, 0, 0,
12, 0, 0, 0, 60, 0, 0, 0, 31, 0,
0, 0, 87, 0, 0, 0, 20, 0, 0, 0,
107, 0, 0, 0, 87, 0, 0, 0, 89, 0,
0, 0, 13, 0, 0, 0]
e1=[]
for i in encry:
if i!=0:
e1.append(i)
real_key='hahahaha_do_you_find_me?'
for i in range(len(key)):
print(chr(ord(real_key[i])^e1[i]),end='')
但是到这里只能看到flag的前19位 :flag{d07abccf8a410c
本来想直接用subprocess爆破出来的,反正只有4位未知了,最后是},但是第一次用,没想到给我报了60多个flag,都是错的,而且到最后我把正确的flag带进去也没有什么独特的回显,只能继续往下做了,接下来是fanally函数
strrr='%tp&:'
for i in range(5):
print(chr(ord(strrr[i])^71),end='')
这就是最后5位了
flag{d07abccf8a410cb37a}