发表自话题:Soul正式递交招股书
查看无壳,用ida打开。
前面逻辑比较简单,在到了sub_83A函数的时候,会报错无法反编译。
解决办法是将ida /ctg目录下的hexrays.cfg文件中的MAX_FUNCSIZE=64 改为 MAX_FUNCSIZE=1024。
关键函数在这一部分,输入得flag经过多次的异或与v3函数进行比较,如果不匹配则输出wrong on 并输出错误的位置。
我一开始的思路是动态调试输入一样的几个数字,然后进行异或操作之后再与原输入进行异或,希望这样获得进行异或的数值,再与
v3进行异或来获得flag,但是失败了异或好像不能这样用,这样只能进行爆破了。
贴出脚本
from pwn import * import re flag = "actf{" # context.log_level="debug" k = 0 while True: for i in range(33,127): p = process('./SoulLike') _flag = flag + chr(i) print _flag p.sendline(_flag) s = p.recvline() r = re.findall("on #(.*?)\n", s)[0] r = int(r) if r == k: print 'no' print k elif r == k + 1: print s flag += chr(i) k += 1 p.close() p.close() if k > 11: break print (flag)获得flag后面加上一个}即可。
actf{b0Nf|Re_LiT!}
标签组:[异或]