好友
阅读权限20
听众
最后登录1970-1-1
|
本帖最后由 L4Nce 于 2014-11-1 15:04 编辑
0.输入任意字符串,没有提示。
1.PE检测编写语言Borland Delphi 6.0,DEDE找按钮事件:
注意到这里有注册成功的提示。
[Asm] 纯文本查看 复制代码 ***** TRY
|
00452062 64FF30 push dword ptr fs:[eax]
00452065 648920 mov fs:[eax], esp
00452068 8B45E8 mov eax, [ebp-$18]
0045206B 99 cdq
0045206C F73D743D4500 idiv dword ptr [$00453D74]
00452072 8945E8 mov [ebp-$18], eax
00452075 33C0 xor eax, eax
00452077 5A pop edx
00452078 59 pop ecx
00452079 59 pop ecx
0045207A 648910 mov fs:[eax], edx
0045207D EB1D jmp 0045209C
* Reference to: System.@HandleAnyException;
|
0045207F E98418FBFF jmp 00403908
00452084 6A00 push $00
* Possible String Reference to: '提示'
|
00452086 6810214500 push $00452110
* Possible String Reference to: '注册成功!'
|
0045208B 6818214500 push $00452118
00452090 6A00 push $00
* Reference to: user32.MessageBoxA()
|
00452092 E8BD48FBFF call 00406954
* Reference to: System.@DoneExcept;
|
00452097 E8D41BFBFF call 00403C70
****** END
目测是检测异常,提示注册成功。
关键触发点:idiv dword ptr [00453D74]
除数需等于0
正常情况下图中几处跳转必须成立,方能接近触发点。
我们再次研究了比赛说明中的关于爆破的说明:
单纯的修改提示字符串为成功字符串不算有效爆破。
爆破成功时应和成功注册时效果相同。
测试时,输入任意或指定的姓名和序列号,出现成功提示,就算通过。
鉴于评分官对爆破方案审查甚严,下面给出几种爆破方案:
方案一:触发异常:
0045203F ^\75 BF JNZ SHORT CrackMe.00452000
00452041 8B47 38 MOV EAX, DWORD PTR DS:[EDI+0x38]
00452044 8B57 34 MOV EDX, DWORD PTR DS:[EDI+0x34] ; CrackMe.0044B9B1
00452047 3BC2 CMP EAX, EDX
修改:13字节
0045203F ^\75 BF JNZ SHORT CrackMe.00452000
00452041 C705 743D4500 00000000 MOV DWORD PTR DS:[0x453D74], 0x0
0045204B EB 0D JMP SHORT CrackMe.0045205A
0045204D 90 NOP
方案二:无视异常:
00452047 3BC2 CMP EAX, EDX
00452049 75 79 JNZ SHORT CrackMe.004520C4 ; 比较
0045204B 3B47 44 CMP EAX, DWORD PTR DS:[EDI+0x44]
修改2字节:
00452047 3BC2 CMP EAX, EDX
00452049 EB 39 JMP SHORT CrackMe.00452084 ; 比较
0045204B 3B47 44 CMP EAX, DWORD PTR DS:[EDI+0x44]
方案三:改变游戏规则:
[00453D74] 全局变量修改共有18处,我们把这个地址Patch掉
另外Patch掉这里的跳转,直接进入异常
补丁工具这样写
算法部分,大牛们分析吧,像个小游戏
最后附上三种爆破方案的附件:
CrackMe 3种爆破方案.rar
(479.55 KB, 下载次数: 10)
|
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|