好友
阅读权限40
听众
最后登录1970-1-1
|
Emil
发表于 2014-10-22 18:35
本帖最后由 ximo 于 2014-10-23 20:49 编辑
【吾爱破解2014CrackMe大赛】【第一组】-- LCG.zip
1.
Name:www.52pojie.cn
Serial:1234567890
点击Register,弹出错误提示
2.
经过第1步分析,我想到用MessageBoxA api断点
Bp MessageBoxA
重复第1步,这个时候断下来了
0012EA3C 10001E2B /CALL to MessageBoxA from 10001E25
0012EA40 002006FC |hOwner = 002006FC ('吾爱破解2014CrackMe大赛',class='#32770')
0012EA44 10008860 |Text = "很抱歉,注册失败,继续加油吧!"
0012EA48 1000881C |Title = "吾爱破解2014CrackMe大赛"
0012EA4C 00000010 \Style = MB_OK|MB_ICONHAND|MB_APPLMODAL
0012EA50 00933528
0012EA54 10000000
0012EA58 00000005
0012EA5C 00000000
0012EA60 /0012EA70
0012EA64 |10001EA6 RETURN to 10001EA6 from 10001D40
0012EA68 |002006FC
0012EA6C |000090FC
0012EA70 ]0012FB30
0012EA74 |00402870 RETURN to CrackMe.00402870 //在这里Enter
0012EA78 |002006FC
0012EA7C |0012EABC ASCII "www.52pojie.cn"
0012EA80 |0012EAF0 ASCII "1234567890"
然后来到这里
00402870 |. 56 push esi ; /Arg2
00402871 |. 8D5424 20 lea edx,dword ptr ss:[esp+0x20] ; |
00402875 |. 52 push edx ; |Arg1
往上,找到段首,F2下断
00402690 |$ 55 push ebp ; 段首下断点
00402691 |. 8BEC mov ebp,esp
F9运行
3.
接下里,我们直接点注册,这个时候就会在段首00402690 断下
F8往下走
这里获取Name
00402704 |. FFD6 call esi ; \GetDlgItemTextA
00402706 |. 68 23100000 push 0x1023 ; 这里获取Name的值
这里获取Serial
0040272F |. FFD6 call esi ; user32.GetDlgItemTextA
00402731 |. 68 B0DB4000 push CrackMe.0040DBB0 ; 这里获取Serial
申请内存,返回内存地址
004027FC |. 53 push ebx ; /Arg2
004027FD |. 8D4C24 20 lea ecx,dword ptr ss:[esp+0x20] ; |
00402801 |. 51 push ecx ; |Arg1
00402802 |. 8BC7 mov eax,edi ; |
00402804 |. 89B424 B01000>mov dword ptr ss:[esp+0x10B0],esi ; |
0040280B |. E8 90E8FFFF call CrackMe.004010A0 ; \CrackMe.004010A0
大概意思是申请内存,然后写入代码(主要算法逻辑代码)到申请的内存,返回内存地址
00402842 |. 85C0 test eax,eax ; 此时eax的值,等下可以用得到eax=10001E40
00402844 |. 75 19 jnz short CrackMe.0040285F ;
这里开始步入正题
0040286C |. 52 push edx ; 这里push Serial
0040286D |. 51 push ecx ; push name
0040286E |. FFD0 call eax ; call申请的内存地址,进入这里面后,就是判断的关键地方了,F7进入
F7进入以后,各种字符串,暴露无遗
首先判断Name是否为空
10001E54 68 1C880010 push 0x1000881C ; ASCII "吾爱破解2014CrackMe大赛"
10001E59 68 80880010 push 0x10008880 ; ASCII "请输入用户名,再进行注册!"
在判断Serail是否为空
10001E87 68 1C880010 push 0x1000881C ; ASCII "吾爱破解2014CrackMe大赛"
10001E8C 68 9C880010 push 0x1000889C ; ASCII "请输入注册码,再进行注册!"
进入下一步判断
10001EA0 52 push edx
10001EA1 E8 9AFEFFFF call 10001D40 ; 如果Name和Serail都不是空,进入下一步判断,F7步入
爆破地方
10001DF3 837D FC 08 cmp dword ptr ss:[ebp-0x4],0x8
10001DF7 75 1C jnz short 10001E15 ; nop掉就就爆破了
总结:虽然爆破了,如果再次点击Register,还是会提示注册失败,这是因为,他会申请内存后,回重新给内存写代码,这个时候,就会把我们nop的地方给覆盖了
最后,带上一张图片
|
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|