[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:
好长,看到最后面:一大堆异或,最后再比较。
三、写脚本
#1.使用pwntools直接穷举:
from pwn import *
flag="actf{"
k=0
for 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+=1
p.close()
print(flag)
#2.使用angr
import angr
base_addr=0x400000
p=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!}