首页 > 学院 > 开发设计 > 正文

Crackme 23

2019-11-08 01:36:45
字体:
来源:转载
供稿:网友

这题很好,一环扣一环。 首先PEID查看 这里写图片描述 第一次见MASM32 汇编直接编写。前几道题有高级语言编写,有现成的反编译工具。但这道题没有,只能手工OD调试 用OD加载搜索字符串 这里写图片描述 发现破解成功的条件是ax == 0x10, 这里写图片描述 于是找给ax 赋值的代码,ax的值与[403166]有关 这里写图片描述 于是利用内存断点,找到所有写入[403166]有关的代码 这里写图片描述 设置内存断点,发现了猫腻 这里写图片描述 这里写图片描述 这里写图片描述 这里写图片描述 分析得[403188] + 0x9112478 必须为0 将内存断点设在[403188],找到了下面的算法

00401361 . 8D3D 8C314000 LEA EDI,DWord PTR DS:[40318C] ; name00401367 . 0FBE05 683140>MOVSX EAX,BYTE PTR DS:[403168] ; ax = i0040136E . 03F8 ADD EDI,EAX00401370 . FE05 68314000 INC BYTE PTR DS:[403168] ; i ++00401376 . A1 88314000 MOV EAX,DWORD PTR DS:[403188] ; 密码的16进制0040137B . 8B25 A0314000 MOV ESP,DWORD PTR DS:[4031A0]00401381 . 40 INC EAX ; 密码 ++00401382 . FF05 88314000 INC DWORD PTR DS:[403188]00401388 . 3307 XOR EAX,DWORD PTR DS:[EDI] ; 密码 ^ name[i] 这里有个坑4字节异或0040138A . A3 88314000 MOV DWORD PTR DS:[403188],EAX ; 密码 = 上式0040138F . 803D 68314000>CMP BYTE PTR DS:[403168],10 ; if i != 10 loop

算法有了注意这里有个坑,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
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表