【wonderzdh】-逆向学习笔记第三篇 - CM大赛作品 - BambooQJ
本帖最后由 wonderzdh 于 2013-7-16 10:34 编辑【文章标题】: CM大赛作品 - BambooQJ
【文章作者】: wonderzdh
【作者主页】: http://hi.baidu.com/chicken
【软件名称】: BambooQJ
【下载地址】: 见附件
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
本套教程至少得更新到10课,由于没有事先安排,内容可能会比较乱,但是每字每句都是心得。
为什么我要把这些心得发出来,而不自己藏着。因为我发的东西本身就是我对学习逆向的一个梳理和总结。
赠人玫瑰,手有余香。至于你们回不回复,评不评分,我一点所谓也没有。
后续课程不会继续在【逆缘论坛】首发,【吾爱破解】转帖的形式存在,而是两个站同时更新。
也希望我的帖子在吾爱不是归类转帖,而是属于原创,本人可是吾爱未来的“原创精英”+“论坛大牛”呀。{:301_972:}
如果想求破,可直接来逆缘免费求破,网址什么的就不发了,自己百度一下。
【详细过程】
首先查壳,无壳,C++或者易语言编写。
然后运行CM,点击注册,弹出错误提示。
此时用到我们的F12暂停法,具体操作是:当弹出错误提示的时候(消息框),程序代码是在系统领空循环,
等待用户点击确定按钮再返回到程序本身的领空。有编程经验的人都知道,你点信息框的确定后才执行信息框的下一行代码。
所以,当出现信息框的时候,我们就可以把整个程序暂停下来,可以按OD快捷键F12,故称F12暂停法。
此时EIP指向系统领空(EIP的值就是当前即将被执行的代码所在的地址),我们按下Alt+F9(运行到用户代码,也可以在内存中程序的代码段下断)。
然后点击信息框的确定按钮,此时OD就会断在程序领空,而上一行必定是调用系统信息框的代码。
01D212C0 FF15 A823D801 call dword ptr ds:[<&USER32.MessageBoxA>>; user32.MessageBoxA
01D212C6 5F pop edi ; (Initial CPU selection)
程序停在01D212C6,而上一行就是调用系统的信息框。
此时我们查看代码上下行没有发现跳过这个错误提示的地方,其实这里还是子程序中的子程序,也就是CALL中的CALL。
我们并没有走到关键的那层代码段,希望你们仔细琢磨,能懂这个意思。
熟悉易语言的都知道,走两个retn回到的地方就是关键的代码段。
01D21004 55 push ebp
01D21005 8BEC mov ebp,esp
01D21007 68 04000080 push 0x80000004
01D2100C 6A 00 push 0x0
01D2100E 68 E832D801 push call.01D832E8 ; 提示
01D21013 68 01030080 push 0x80000301
01D21018 6A 00 push 0x0
01D2101A 68 20000000 push 0x20
01D2101F 68 04000080 push 0x80000004
01D21024 6A 00 push 0x0
01D21026 68 ED32D801 push call.01D832ED ; 恭喜你失败~!努力吧~!
01D2102B 68 03000000 push 0x3
01D21030 BB 2012D201 mov ebx,call.01D21220
01D21035 E8 B0000000 call call.01D210EA
01D2103A 83C4 28 add esp,0x28
01D2103D 8BE5 mov esp,ebp
01D2103F 5D pop ebp ; 0012F118
01D21040 C3 retn
此时出现关键部分,这里就是正真调用错误提示的地方。一般情况下,这里都是有跳转可以跳过的,但是这里没有,而是一个很小的独立代码段。
我们上下行找一下,发现下边就是提示正确的地方
01D2105E 55 push ebp
01D2105F 8BEC mov ebp,esp
01D21061 68 04000080 push 0x80000004
01D21066 6A 00 push 0x0
01D21068 68 E832D801 push call.01D832E8 ; 提示
01D2106D 68 01030080 push 0x80000301
01D21072 6A 00 push 0x0
01D21074 68 40000000 push 0x40
01D21079 68 04000080 push 0x80000004
01D2107E 6A 00 push 0x0
01D21080 68 0433D801 push call.01D83304 ; 恭喜你成功~!
01D21085 68 03000000 push 0x3
01D2108A BB 2012D201 mov ebx,call.01D21220
01D2108F E8 56000000 call call.01D210EA
01D21094 83C4 28 add esp,0x28
01D21097 8BE5 mov esp,ebp
01D21099 5D pop ebp
01D2109A C3 retn
调用方法一模一样,那我们直接把提示错误的地方改成提示正确的地方吧。
01D21026 68 ED32D801 push call.01D832ED ; 恭喜你失败~!努力吧~!
01D21080 68 0433D801 push call.01D83304 ; 恭喜你成功~!
替换掉这两个地址的代码,即可成功爆破!
方法不止一种,第二种修改法:
我们F8继续走出这个CALL,来到此处:
01D210AA E8 55FFFFFF call call.01D21004
01D210AF 5B pop ebx ; 002C93A8
代码停在01D210AF,上一行就是调用错误提示的地方,我们直接把call 01D21004修改为call 01D2105E 就好了。
01D2105E这里是正确代码开始的地方(也就是提示正确的子程序的入口地址),他本来调用的01D21004这里的提示错误代码的地方,用正确的代码段替换掉错误的就好啦!
番外:
当我们继续走出这个CALL的时候出现如下代码:
004D20AD E8 A8020000 call CrackerM.004D235A
004D20B2 83C4 04 add esp,0x4
004D20B5 837D F8 00 cmp dword ptr ss:,0x0
004D20B9 0F84 24000000 je CrackerM.004D20E3
004D20BF 8965 FC mov dword ptr ss:,esp
004D20C2 B8 01000000 mov eax,0x1
004D20C7 E8 A0020000 call CrackerM.004D236C ; 调用失败
004D20CC 3965 FC cmp dword ptr ss:,esp
004D20CF 74 0D je short CrackerM.004D20DE
004D20D1 68 06000000 push 0x6
004D20D6 E8 8B020000 call CrackerM.004D2366
004D20DB 83C4 04 add esp,0x4
004D20DE E9 1F000000 jmp CrackerM.004D2102
004D20E3 8965 FC mov dword ptr ss:,esp
004D20E6 B8 02000000 mov eax,0x2
004D20EB E8 7C020000 call CrackerM.004D236C ; 调用失败
004D20F0 3965 FC cmp dword ptr ss:,esp
004D20F3 74 0D je short CrackerM.004D2102
004D20F5 68 06000000 push 0x6
004D20FA E8 67020000 call CrackerM.004D2366
大家可以在这层代码修改试试看,不管你会不会,反正我是不会。
--------------------------------------------------------------------------------
【经验总结】
破解手法:F12暂停法(切入点)、push法(修改功能)
破解经验:
错误信息和正确的信息往往很近!我们可以在错误信息的周围找到正确的信息。
第一篇地址:http://www.52pojie.cn/thread-199860-1-1.html
第二篇地址:http://www.52pojie.cn/thread-200080-1-5.html
--------------------------------------------------------------------------------
【版权声明】: 本文原创于【wonderzdh 】,转载请注明作者并保持文章的完整,谢谢!
2013年06月29日 17:51:06 Shark恒 发表于 2013-6-29 17:58 static/image/common/back.gif
由于本论坛不能留下QQ,所以我已经帮你删除了,希望以后看到你更多的作品!
多谢恒大提醒,也希望恒大的教程能正真带领我们走向大牛!
膜拜会破解的大牛,谢谢教程。{:1_931:} 偶表示看不懂{:301_1008:} jlyadan 发表于 2013-6-29 20:35 static/image/common/back.gif
偶表示看不懂
写成这样还看不懂,如果是真的,麻烦指出哪里不明白,必回复。
小雨细无声 发表于 2013-6-29 20:07 static/image/common/back.gif
膜拜会破解的大牛,谢谢教程。
菜鸟作品,小雨哥见笑了。{:1_932:}
- -!
带我超神! 我是冰冻的番茄 发表于 2013-6-29 23:11 static/image/common/back.gif
- -!
文不对题关小木屋三年!{:301_971:}
wonderzdh 发表于 2013-6-29 22:56 static/image/common/back.gif
写成这样还看不懂,如果是真的,麻烦指出哪里不明白,必回复。
不是说你写得不好,只能说偶很白很白白到透明{:301_1004:}