大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全家桶1年46,售后保障稳定
这题很好,一环扣一环。
首先PEID查看
第一次见MASM32 汇编直接编写。前几道题有高级语言编写,有现成的反编译工具。但这道题没有,只能手工OD调试
用OD加载搜索字符串
发现激活成功教程成功的条件是ax == 0x10,
于是找给ax 赋值的代码,ax的值与[403166]有关
于是利用内存断点,找到所有写入[403166]有关的代码
设置内存断点,发现了猫腻
分析得[403188] + 0x9112478 必须为0
将内存断点设在[403188],找到了下面的算法
00401361 . 8D3D 8C314000 LEA EDI,DWORD PTR DS:[40318C] ; name
00401367 . 0FBE05 683140>MOVSX EAX,BYTE PTR DS:[403168] ; ax = i
0040136E . 03F8 ADD EDI,EAX
00401370 . 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 s
sub = 0xffffffff - 0x9112478 + 1
for 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 -= 1
print sub
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/215454.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...