[ACTF新生赛2020]SoulLike
一、查壳
无壳,64位
二、IDA分析
1.main
一眼看到关键函数sub_83A
2.sub_83A
显示不出来,搜了一下解决方法:
找到ida目录中的cfg的hexrays.cfg点击进去将MAX_FUNCSIZE 由64修改为1024,在打开ida点击sub_83A就可以了。
sub_83A:
好长,看到最后面:一大堆异或,最后再比较。
三、写脚本
python">#1.使用pwntools直接穷举:from pwn import *flag="actf{"k=0for n in range(12):for i in range(33,127):p=process("./SoulLike")_flag=flag+chr(i)print(_flag)p.sendline(_flag)s=p.recvline().decode()if "on #" in s:r=int(s.split("on #")[1].split("\n")[0])if r==k+1:print(s)flag+=chr(i)k+=1p.close()print(flag)
python"> #2.使用angrimport angrbase_addr=0x400000p=angr.Project("SoulLike",auto_load_libs=False,main_opts={"base_addr":base_addr})init_state=p.factory.entry_state()sm=p.factory.simgr(init_state)sm.explore(find=base_addr+0x1117d)if sm.found:found_state=sm.found[0]found_state.posix.dumps(0)print("success")else:raise Exception("no")
最后flag{b0Nf|Re_LiT!}