好友
阅读权限30
听众
最后登录1970-1-1
|
本帖最后由 L4Nce 于 2014-11-1 15:03 编辑
简单分析了一下,有两处内存数据,如下:
内存数据1:
00453D24 DWORD dword_453D24[20]
初始数据值如下:
00453D24 0 9 9 1
00453D34 2 9 9 3
00453D44 4 8 8 5
00453D54 4 6 7 5
00453D64 10 6 7 10
内存数据2:
00453D74 dword_453D74 dd 0
00453D74 0
注册成功的条件是:
1. dword_453D24[13], dword_453D24[14], dword_453D24[17], dword_453D24[18]的数值必须是9,见上面红色位置.
2. dword_453D74的数据必须为0,这里是设置了除数为0的异常处理,只有dword_453D74值为0才能触发异常处理到注册成功的位置.
0045206C . F73D 743D4500 idiv dword ptr ds:[0x453D74]
基于上面的分析,只需要在判定结束之后改写以上5个位置内存数据即可爆破成功。
Patch位置1:
0045203F .^\75 BF jnz XCrackMe.00452000
00452041 8B47 38 mov eax,dword ptr ds:[edi+0x38]
00452044 8B57 34 mov edx,dword ptr ds:[edi+0x34]
改为
00452041 /E9 26030000 jmp CrackMe.0045236C
00452046 |90 nop
JMP到的目标地址0045236C 是代码段的填充区域,所以可以用作Patch位置
Patch位置2:
00452369 . 8D40 00 lea eax,dword ptr ds:[eax]
0045236C 0000 add byte ptr ds:[eax],al
0045236E 0000 add byte ptr ds:[eax],al
00452370 0000 add byte ptr ds:[eax],al
00452372 0000 add byte ptr ds:[eax],al
00452374 0000 add byte ptr ds:[eax],al
00452376 0000 add byte ptr ds:[eax],al
00452378 0000 add byte ptr ds:[eax],al
0045237A 0000 add byte ptr ds:[eax],al
0045237C 0000 add byte ptr ds:[eax],al
0045237E 0000 add byte ptr ds:[eax],al
改为:
0045236C C705 583D4500>mov dword ptr ds:[0x453D58],0x9 ; dword_453D24[13]
00452376 C705 5C3D4500>mov dword ptr ds:[0x453D5C],0x9 ; dword_453D24[14]
00452380 C705 683D4500>mov dword ptr ds:[0x453D68],0x9 ; dword_453D24[17]
0045238A C705 6C3D4500>mov dword ptr ds:[0x453D6C],0x9 ; dword_453D24[18]
00452394 C705 743D4500>mov dword ptr ds:[0x453D74],0x0
0045239E 8B47 38 mov eax,dword ptr ds:[edi+0x38]
004523A1 8B57 34 mov edx,dword ptr ds:[edi+0x34]
004523A4 ^ E9 9EFCFFFF jmp CrackMe.00452047
用户名随便输入,注册码部分输入数字即可(不要输入字母,这是原程序的判断,爆破也不应该处理这部分):
将爆破进行到底吧。
|
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|