【答案提交】【2014CrackMe大赛】【第八组】
本帖最后由 L4Nce 于 2014-11-1 15:04 编辑0.输入任意字符串,没有提示。
1.PE检测编写语言Borland Delphi 6.0,DEDE找按钮事件:
注意到这里有注册成功的提示。
***** TRY
|
00452062 64FF30 push dword ptr fs:
00452065 648920 mov fs:, esp
00452068 8B45E8 mov eax,
0045206B 99 cdq
0045206C F73D743D4500 idiv dword ptr [$00453D74]
00452072 8945E8 mov , eax
00452075 33C0 xor eax, eax
00452077 5A pop edx
00452078 59 pop ecx
00452079 59 pop ecx
0045207A 648910 mov fs:, 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
除数需等于0
正常情况下图中几处跳转必须成立,方能接近触发点。
我们再次研究了比赛说明中的关于爆破的说明:
单纯的修改提示字符串为成功字符串不算有效爆破。
爆破成功时应和成功注册时效果相同。
测试时,输入任意或指定的姓名和序列号,出现成功提示,就算通过。
鉴于评分官对爆破方案审查甚严,下面给出几种爆破方案:
方案一:触发异常:
0045203F ^\75 BF JNZ SHORT CrackMe.00452000
00452041 8B47 38 MOV EAX, DWORD PTR DS:
00452044 8B57 34 MOV EDX, DWORD PTR DS: ;CrackMe.0044B9B1
00452047 3BC2 CMP EAX, EDX
修改:13字节
0045203F ^\75 BF JNZ SHORT CrackMe.00452000
00452041 C705 743D4500 00000000 MOV DWORD PTR DS:, 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:
修改2字节:
00452047 3BC2 CMP EAX, EDX
00452049 EB 39 JMP SHORT CrackMe.00452084 ;比较
0045204B 3B47 44 CMP EAX, DWORD PTR DS:
方案三:改变游戏规则:
全局变量修改共有18处,我们把这个地址Patch掉
另外Patch掉这里的跳转,直接进入异常
补丁工具这样写
算法部分,大牛们分析吧,像个小游戏
最后附上三种爆破方案的附件:
请评分官忽略“我们”俩字,习惯了 爆破有效
得分:6
在后续题目中继续加油! 继续加油!继续加油!继续加油! 进来学习感谢分享~~~ 学习了,学点经验,刚入门
页:
[1]