0x00 已知条件
给了一个CTF_100_1.exe。
0x01 思考过程
-
随便给一个输入,发现一个像是加密的函数,改名成check_input。
- 发现里面做的事是把当前路径和所给的输入字符串连接起来,然后开了子线程。
- 如果调试的话,看不到子线程里面的过程,且check_input最后会返回result = -1
- 而且最后还把Buffer跟这一堆进行比较,不通过则check_input最后也返回result = -1,看着像最终的目标串
- 主函数(还没法反汇编)得到-1后会exit
-
注意到上述过程中有这个部分:
调试时先跳到114行,再跳上去做了4个赋值操作。
- 调试,发现写入函数的参数是一个.text地址,那里下面一点还有不可解释的数据。
于是patch过去,再看情况调调函数结尾位置,main和这部分就都能反汇编了。
- 调试,发现写入函数的参数是一个.text地址,那里下面一点还有不可解释的数据。
- 看看main和这个函数就很清楚了,目标串多半就是前面提到的那个。把这个加密过程反着写个脚本,求出flag。
[Python]
target = '\x25\x5c\x5c\x2b\x2f\x5d\x19\x36\x2c\x64\x72\x76\x80\x66\x4e\x52'
xor = 'elcome to CFF te'
len = len(xor)
flag = ''
for i in range(len):
flag += chr(ord(xor[i]) ^ (ord(target[i])-1))
print flag
0x02 细节
- 记得小端序