攻防世界-RE-crazy

一、 判断是否文件类型、是否加壳等

扔进exeinfope里面查看一下即可,此处无壳

二、 静态分析

扔进IDA64中,分析代码

1. 查看所有字符串,寻找突破点


从上图中可以看到一些特殊字符串例如"flag{", "pass"等

2. 去看看引用了这个字符串的函数


在上图中,我们看到了main函数的处理流程,我们需要去判断这个输入被处理的过程。我们需要去关注上图红框里面的内容,至于func1func2func3,仔细分析一下就会发现这三个函数对我们的结果并没有任何影响。

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))
posted @ 2021-02-19 18:51  bunner  阅读(54)  评论(0编辑  收藏  举报