这题很好,一环扣一环。 首先PEID查看 第一次见MASM32 汇编直接编写。前几道题有高级语言编写,有现成的反编译工具。但这道题没有,只能手工OD调试 用OD加载搜索字符串
发现破解成功的条件是ax == 0x10,
于是找给ax 赋值的代码,ax的值与[403166]有关
于是利用内存断点,找到所有写入[403166]有关的代码
设置内存断点,发现了猫腻
分析得[403188] + 0x9112478 必须为0 将内存断点设在[403188],找到了下面的算法
算法有了注意这里有个坑,00401388 . 3307 XOR EAX,DWORD PTR DS:[EDI]这里是与四字节异或,小端序要转成大端序 最后写出exploit
name = raw_input("name:")s = 'A'+name+'/x00'*(0x14-len(name)) #A 用来填充s = bytes(s).decode('ascii')PRint ssub = 0xffffffff - 0x9112478 + 1for i in range (0x10,0,-1): string = '0x'+'0'*(2-len(hex(ord(s[i+3]))[2:]))+hex(ord(s[i+3]))[2:]+ '0'*(2-len(hex(ord(s[i+2]))[2:]))+hex(ord(s[i+2]))[2:] + '0'*(2-len(hex(ord(s[i+1]))[2:]))+hex(ord(s[i+1]))[2:]+ '0'*(2-len(hex(ord(s[i]))[2:]))+hex(ord(s[i]))[2:] sub ^= int(string,16) sub -= 1print sub新闻热点
疑难解答