攻防世界-RE-crazy
作者:互联网
一、 判断是否文件类型、是否加壳等
扔进exeinfope里面查看一下即可,此处无壳
二、 静态分析
扔进IDA64中,分析代码
1. 查看所有字符串,寻找突破点
从上图中可以看到一些特殊字符串例如"flag{", "pass"等
2. 去看看引用了这个字符串的函数
在上图中,我们看到了main函数的处理流程,我们需要去判断这个输入被处理的过程。我们需要去关注上图红框里面的内容,至于func1
、func2
、func3
,仔细分析一下就会发现这三个函数对我们的结果并没有任何影响。
3. HighTemplar函数
- 首先将getSerial函数的首地址放于a的首部
- 接着令
*(a+3)=0
- 将input复制到
a+16
位置- 将input再复制到
a+48
位置- 将"327a6c4304ad5938eaf0efb6cc3e53dc"复制到
a+80
位置
4. calculate函数
5. getSerial函数
6. getFlag函数
可以看到 this + 48
处的字符串其实就是原输入串
三、解题
根据上述的逻辑判断,即,只要我们的输入串经过calculate转化后与给定串相同,则该输入串为我们的flag
由此可写出脚本
result_string = '327a6c4304ad5938eaf0efb6cc3e53dc'
print(len(result_string))
flag = list(result_string)
flag = [ord(c) for c in flag]
for i in range(0, len(result_string), 1):
flag[i] -= 11
flag[i] ^= 0x13
flag[i] -= 23
flag[i] ^= 0x50
print(''.join(chr(c) for c in flag))
标签:复制到,攻防,crazy,string,RE,flag,result,字符串,函数 来源: https://www.cnblogs.com/bunner/p/14417635.html