re | [BJDCTF 2nd]diff2

这是一个远程逆向,dump下来一个叫diff的elfx86文件。

IDA打开,作用是对比两个文件的差别:

关键点在于compare函数,跟进去。

关键点在于此处的字符相加超过0xFF变成0x100的时候就溢出为0x00退出循环,因此利用的思路为找到0x100-buf的数,然后反推,一位一位的爆破就好了,切到/tmp写个python脚本,直接丢脚本:

 1 import subprocess
 2 import os
 3 flag = ''
 4 while True:
 5     for i in range(0x1,0x100):
 6         payload = flag+chr(i)
 7         os.system("echo "+payload+">mz1")
 8         p = subprocess.Popen(['/home/ctf/diff','/tmp/mz1','/home/ctf/flag'],stdout=subprocess.PIPE)
 9         res = p.stdout.read()
10         if res != '1':
11             flag += chr(0x100-i)
12             print(flag)
13             break

写文件那个地方偷了个懒用了echo,导致跑出来一堆废话,不过不影响。

原文地址:https://www.cnblogs.com/Mz1-rc/p/13866286.html