这是一个远程逆向,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,导致跑出来一堆废话,不过不影响。