两个文件
ubuntu运行
IDA打开
清晰的逻辑
很明显,我们要sub83a 返回ture
这里第一个知识点来了
你点开汇编会发现
这里一堆xor巨多
然后IDA初始化设置的函数,根本不能分析这么多
我们要去改IDA的设置
cfg 里面的
hexrays文件
在max_funsize这 修改为1024,默认是64
等待一会编译就可以看见代码了
主要逻辑
看见这首先肯定想到的就是设置断点,如果没有防动调的话,就可以直接拿到enc了
不出所望,断不下来
难道我们真的要那么多代码一个一个逆吗?
怎么可能,我觉得正常出题人都不可能这么干吧
跟着网上学了个脚本
[ACTF新生赛2020]SoulLike 题解-CSDN博客
尊重作者,我就直接拿他的代码了
from pwn import *
flag = "actf{"
k = 0
for n in range(12):
for i in range(33,127):
p = process('./111')
_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)
(我进程改了个名字叫111)
这里我解释下这段代码
from pwn import * #主要是pwntool
flag = "actf{"#已知的flag头
k = 0#K是当前的已经确认正确的字符(除却actf{)
for n in range(12):#12次循环
for i in range(33, 127):#遍历可视化字符
p = process('./111')#打开进程
_flag = flag + chr(i)#临时flag
print(_flag)#打印这个临时flag,因为后面不知道为什么会报错
p.sendline(_flag)#输入临时flag
s = p.recvline().decode()#将得到的一行回答解码
if "on #" in s:#IDA里面可以看见报错有wrong on #%d\n
r = int(s.split("on #")[1].split("\n")[0])#代码在#后面会输出i
if r == k + 1:
print(s)
flag += chr(i)
k += 1
p.close()
print(flag)