好友
阅读权限10
听众
最后登录1970-1-1
|
Kris
发表于 2011-8-9 22:41
CM是什么?Crackme是什么?这是什么东西?楼主发的什么?
他们都是一些公开给别人尝试破解的小程序,制作 Crackme 的人可能是程序员,想测试一下自己的软件保护技术,也可能是一位 Cracker,想挑战一下其它 Cracker 的破解实力,也可能是一些正在学习破解的人,自己编一些小程序给自己破解,KeyGenMe是要求别人做出它的 keygen (序号产生器), ReverseMe 要求别人把它的算法做出逆向分析, UnpackMe 是要求别人把它成功脱壳,本版块禁止回复非技术无关水贴。
[ 破文标题 ] 爆破 之 003灰常新手的CrackMe
[ 破文作者 ] Kris
[ 作者邮箱 ] ZzhEMail@Foxmail.Com
[ 破解工具 ] OD,LordPE
[ 破解平台 ] Windows Xp
[ 软件名称 ] 灰常新手的CrackMe
[ 原版下载 ] http://www.52pojie.cn/thread-101335-1-1.html
[ 破解声明 ] 仅供交流学习技术,若教程中有不对之处,希望各位大大即使指正!
破解过程:
1.
把CM载入到OD中运行,点击按钮无任何反应
2.
OD中点“查看-窗口”可以发现有两个注册按钮,是不是我们看到的注册按钮是假的,而另一个注册按钮才是真的呢?
为了证实我们的想法,我们在文件中搜索易语言按钮事件特征:FF 55 FC 5F 5E 89 5D F4(该CM为易语言编写的)
找到了特征后,在CALL的地方下断
004202FD FF55 FC call [local.1]
然后点击按钮,发现并没有断住,那么我们的猜想便是正确的了,在界面上显示出来的按钮是没有按钮事件的,是假按钮,而真的有事件的按钮就应该是被假按钮覆盖住了
3.
如果真按钮确实被假按钮覆盖住了,那么应该怎么办呢?重新载入OD,bp ShowWindow,然后运行,
在断下几次后出现了第一个标题为注册的按钮
接着继续运行,几次过后出现了第二个标题为注册的按钮
不难发现两个按钮除了句柄不同,其它都是一样的,显示方式也都是SW_SHOWNA,
注意一下,第二个注册按钮出现在第一个注册按钮的后面,
也就是说第二个注册按钮如果与第一个注册按钮位置相同,并且第二个注册按钮在第一个注册按钮后才调用ShowWindow,
这样以来,第二个注册按钮就会把第一个注册按钮给覆盖住了!
也就是说第二个注册按钮是假注册按钮,它会把第一个注册按钮(真注册按钮)覆盖掉,
所以一定不能让第二个注册按钮显示,也就是说要把第二个注册按钮的显示属性设置为隐藏,这样真注册按钮就不会被覆盖了。
现在我们手动把第二个注册按钮(假注册按钮)的显示类型修改为SW_HIDE,十六进制为0
修改之后再接着运行并点击按钮,发现已经能点击真注册按钮了,弹出了错误信息框
很好,那么就已经很明确了:
只要第二个注册按钮(假注册按钮)的显示类型为SW_HIDE(隐藏类型),那么就可以正常点击到真注册按钮了
4.
在OD中借助OD强大的修改功能实现了,但是不借助OD怎么实现呢?现在就来打上补丁。
前面bp ShowWindow可以发现,该程序所有对ShowWindow这个API的调用都来自46426F,
那么我们就来HOOK ShowWindow函数吧,
至于Patch代码就在46426F处开始吧
(1)找到一片可以利用的0区域,在CPU窗口中拖到最后就能看到一大片0区域了,我找的0区域的内存地址为0046E59F
(2)把46426F的指令记录一下,"call dword ptr ds:[0x46F4C0]"
(3)把46426F的指令改为"jmp 0046E59F"
(4)0046E59F处添加如下的patch代码
0046E59F 60 pushad ; 保护现场
0046E5A0 9C pushfd ; 保护现场
0046E5A1 FE05 C5E54600 inc byte ptr ds:[0x46E5C5] ; [46E5C5]为0,每调用一次ShowWindow都增加1,作为计数器
0046E5A7 803D C5E54600 cmp byte ptr ds:[0x46E5C5],0x8
; 判断[46E5C5]为8,因为跟踪可以发现,在第8次调用ShowWindow的时候,是要显示假注册按钮
0046E5AE 75 08 jnz 0046E5B8 ; 如果是要显示假注册按钮跳转就不实现,否则跳转实现继续执行原指令
0046E5B0 C74424 28 000 mov dword ptr ss:[esp+0x28],0x0 ; 把显示属性修改为SW_HIDE
0046E5B8 9D popfd ; 还原现场
0046E5B9 61 popad ; 还原现场
0046E5BA FF15 C0F44600 call dword ptr ds:[0x46F4C0] ; 执行原指令
0046E5C0 ^ E9 AF5CFFFF jmp 00464274 ; 跳转回原来的地方继续执行
(5)在OD中复制所有修改保存
(6)LordPE设置".text"区段属性可写,否则在inc计数的时候将会因为非法写入导致程序崩溃
在完成以上操作之后,就实现了真注册按钮的显示了,当然不一定要去HOOK ShowWindow,直接修改窗体属性也可以实现相同效果,至于怎么实现大家自己去摸索啦.
5.破解
OD查找字符串调用,发现如下信息
超级字串参考
地址 反汇编 文本字串
004011B2 push 00470D69 注册失败!
004011E8 push 00470D69 注册失败!
0040121E push 00470D69 注册失败!
00401254 push 00470D69 注册失败!
0040128A push 00470D69 注册失败!
004012C0 push 00470D69 注册失败!
004012F6 push 00470D69 注册失败!
0040132C push 00470D69 注册失败!
00401362 push 00470D69 注册失败!
00401398 push 00470D69 注册失败!
004013CE push 00470D69 注册失败!
00401404 push 00470D69 注册失败!
0040143A push 00470D69 注册失败!
00401470 push 00470D69 注册失败!
004014A6 push 00470D69 注册失败!
004014DC push 00470D69 注册失败!
00401512 push 00470D69 注册失败!
00401548 push 00470D69 注册失败!
0040157E push 00470D69 注册失败!
004015B4 push 00470D69 注册失败!
004015EA push 00470D69 注册失败!
00401620 push 00470D69 注册失败!
00401656 push 00470D69 注册失败!
0040168C push 00470D69 注册失败!
004016C2 push 00470D69 注册失败!
004016F8 push 00470D69 注册失败!
0040172E push 00470D69 注册失败!
00401764 push 00470D69 注册失败!
0040179A push 00470D69 注册失败!
004017D0 push 00470D69 注册失败!
00401806 push 00470D69 注册失败!
0040183C push 00470D69 注册失败!
00401872 push 00470D69 注册失败!
004018A8 push 00470D69 注册失败!
004018DE push 00470D69 注册失败!
00401914 push 00470D69 注册失败!
0040194A push 00470D69 注册失败!
00401980 push 00470D69 注册失败!
004019B6 push 00470D69 注册失败!
004019EC push 00470D69 注册失败!
00401A22 push 00470D69 注册失败!
00401A58 push 00470D69 注册失败!
00401A8E push 00470D69 注册失败!
00401AC4 push 00470D69 注册失败!
00401AFA push 00470D69 注册失败!
00401B30 push 00470D69 注册失败!
00401B66 push 00470D69 注册失败!
00401B9C push 00470D69 注册失败!
00401BD2 push 00470D69 注册失败!
00401C08 push 00470D69 注册失败!
00401C3E push 00470D69 注册失败!
00401C74 push 00470D69 注册失败!
00401CAA push 00470D69 注册失败!
00401CE0 push 00470D69 注册失败!
00401D16 push 00470D69 注册失败!
00401D4C push 00470D69 注册失败!
00401D82 push 00470D69 注册失败!
00401DB8 push 00470D69 注册失败!
00401DEE push 00470D69 注册失败!
00401E24 push 00470D69 注册失败!
00401E5A push 00470D69 注册失败!
00401E90 push 00470D69 注册失败!
00401EC6 push 00470D69 注册失败!
00401EFC push 00470D69 注册失败!
00401F32 push 00470D69 注册失败!
00401F68 push 00470D69 注册失败!
00401F9E push 00470D69 注册失败!
00401FD4 push 00470D69 注册失败!
0040200A push 00470D69 注册失败!
00402040 push 00470D69 注册失败!
00402076 push 00470D69 注册失败!
004020AC push 00470D69 注册失败!
004020E2 push 00470D69 注册失败!
00402118 push 00470D69 注册失败!
0040214E push 00470D69 注册失败!
00402184 push 00470D69 注册失败!
004021BA push 00470D69 注册失败!
004021F0 push 00470D69 注册失败!
00402226 push 00470D69 注册失败!
0040225C push 00470D69 注册失败!
00402292 push 00470D69 注册失败!
004022C8 push 00470D69 注册失败!
004022FE push 00470D69 注册失败!
00402334 push 00470D69 注册失败!
0040236A push 00470D69 注册失败!
004023A0 push 00470D69 注册失败!
004023D6 push 00470D69 注册失败!
0040240C push 00470D69 注册失败!
00402442 push 00470D69 注册失败!
00402478 push 00470D69 注册失败!
004024AE push 00470D69 注册失败!
004024E4 push 00470D69 注册失败!
0040251A push 00470D69 注册失败!
00402550 push 00470D69 注册失败!
00402586 push 00470D69 注册失败!
004025BC push 00470D69 注册失败!
004025F2 push 00470D69 注册失败!
00402628 push 00470D69 注册失败!
0040265E push 00470D69 注册失败!
00402694 push 00470D69 注册失败!
004026CA push 00470D69 注册失败!
00402700 push 00470D69 注册失败!
00402736 push 00470D69 注册失败!
0040276C push 00470D69 注册失败!
004027A2 push 00470D69 注册失败!
004027D8 push 00470D69 注册失败!
0040280E push 00470D69 注册失败!
00402844 push 00470D69 注册失败!
0040287A push 00470D69 注册失败!
004028B0 push 00470D69 注册失败!
004028E6 push 00470D69 注册失败!
0040291C push 00470D69 注册失败!
00402952 push 00470D69 注册失败!
00402988 push 00470D69 注册失败!
004029BE push 00470D69 注册失败!
004029F4 push 00470D69 注册失败!
00402A2A push 00470D69 注册失败!
00402A60 push 00470D69 注册失败!
00402A96 push 00470D69 注册失败!
00402ACC push 00470D69 注册失败!
00402B02 push 00470D69 注册失败!
00402B38 push 00470D69 注册失败!
00402B6E push 00470D69 注册失败!
00402BA4 push 00470D69 注册失败!
00402BDA push 00470D69 注册失败!
00402C10 push 00470D69 注册失败!
00402C46 push 00470D69 注册失败!
00402C7C push 00470D69 注册失败!
00402CB2 push 00470D69 注册失败!
00402CE8 push 00470D69 注册失败!
00402D1E push 00470D69 注册失败!
00402D54 push 00470D69 注册失败!
00402D8A push 00470D69 注册失败!
00402DC0 push 00470D69 注册失败!
00402DF6 push 00470D69 注册失败!
00402E2C push 00470D69 注册失败!
00402E62 push 00470D69 注册失败!
00402E98 push 00470D69 注册失败!
00402ECE push 00470D69 注册失败!
00402F04 push 00470D69 注册失败!
00402F3A push 00470D69 注册失败!
00402F70 push 00470D69 注册失败!
00402FA6 push 00470D69 注册失败!
00402FDC push 00470D69 注册失败!
00403012 push 00470D69 注册失败!
00403048 push 00470D69 注册失败!
0040307E push 00470D69 注册失败!
004030B4 push 00470D69 注册失败!
004030EA push 00470D69 注册失败!
00403120 push 00470D69 注册失败!
00403156 push 00470D69 注册失败!
0040318C push 00470D69 注册失败!
004031C2 push 00470D69 注册失败!
004031F8 push 00470D69 注册失败!
0040322E push 00470D69 注册失败!
00403264 push 00470D69 注册失败!
0040329A push 00470D69 注册失败!
004032D0 push 00470D69 注册失败!
00403306 push 00470D69 注册失败!
0040333C push 00470D69 注册失败!
00403372 push 00470D69 注册失败!
004033A8 push 00470D69 注册失败!
004033DE push 00470D69 注册失败!
00403414 push 00470D69 注册失败!
0040344A push 00470D69 注册失败!
00403480 push 00470D69 注册失败!
004034B6 push 00470D69 注册失败!
004034EC push 00470D69 注册失败!
00403522 push 00470D69 注册失败!
00403558 push 00470D69 注册失败!
0040358E push 00470D69 注册失败!
004035C4 push 00470D69 注册失败!
004035FA push 00470D69 注册失败!
00403630 push 00470D69 注册失败!
00403666 push 00470D69 注册失败!
0040369C push 00470D69 注册失败!
004036D2 push 00470D69 注册失败!
00403708 push 00470D69 注册失败!
0040373E push 00470D69 注册失败!
00403774 push 00470D69 注册失败!
004037AA push 00470D69 注册失败!
004037E0 push 00470D69 注册失败!
00403816 push 00470D69 注册失败!
0040384C push 00470D69 注册失败!
00403882 push 00470D69 注册失败!
004038B8 push 00470D69 注册失败!
004038EE push 00470D69 注册失败!
00403924 push 00470D69 注册失败!
0040395A push 00470D69 注册失败!
00403990 push 00470D69 注册失败!
004039C6 push 00470D69 注册失败!
004039FC push 00470D69 注册失败!
00403A32 push 00470D69 注册失败!
00403A68 push 00470D69 注册失败!
00403A9E push 00470D69 注册失败!
00403AD4 push 00470D69 注册失败!
00403B0A push 00470D69 注册失败!
00403B40 push 00470D69 注册失败!
00403B76 push 00470D69 注册失败!
00403BAC push 00470D69 注册失败!
00403BE2 push 00470D69 注册失败!
00403C18 push 00470D69 注册失败!
00403C4E push 00470D69 注册失败!
00403C84 push 00470D69 注册失败!
00403CBA push 00470D69 注册失败!
00403CF0 push 00470D69 注册失败!
00403D26 push 00470D69 注册失败!
00403D5C push 00470D69 注册失败!
00403D92 push 00470D69 注册失败!
00403DC8 push 00470D69 注册失败!
00403DFE push 00470D69 注册失败!
00403E34 push 00470D69 注册失败!
00403E6A push 00470D69 注册失败!
00403EA0 push 00470D69 注册失败!
00403ED6 push 00470D69 注册失败!
00403F0C push 00470D69 注册失败!
00403F42 push 00470D69 注册失败!
00403F78 push 00470D69 注册失败!
00403FAE push 00470D69 注册失败!
00403FE4 push 00470D69 注册失败!
0040401A push 00470D69 注册失败!
00404050 push 00470D69 注册失败!
004040A9 push 00470D74 注册成功!
00404102 push 00470D74 注册成功!
0040415B push 00470D74 注册成功!
004041B4 push 00470D74 注册成功!
0040420D push 00470D74 注册成功!
00404266 push 00470D74 注册成功!
004042BF push 00470D74 注册成功!
00404318 push 00470D74 注册成功!
00404371 push 00470D74 注册成功!
004043CA push 00470D74 注册成功!
00404423 push 00470D74 注册成功!
0040447C push 00470D74 注册成功!
004044D5 push 00470D74 注册成功!
0040452E push 00470D74 注册成功!
00404587 push 00470D74 注册成功!
004045E0 push 00470D74 注册成功!
00404639 push 00470D74 注册成功!
00404692 push 00470D74 注册成功!
004046EB push 00470D74 注册成功!
00404744 push 00470D74 注册成功!
0040479D push 00470D74 注册成功!
004047D3 push 00470D74 注册成功!
0040482C push 00470D74 注册成功!
00404885 push 00470D74 注册成功!
004048DE push 00470D74 注册成功!
00404937 push 00470D74 注册成功!
00404990 push 00470D74 注册成功!
004049E9 push 00470D74 注册成功!
00404A42 push 00470D74 注册成功!
00404A9B push 00470D74 注册成功!
00404AF4 push 00470D74 注册成功!
00404B4D push 00470D74 注册成功!
00404BA6 push 00470D74 注册成功!
00404BFF push 00470D74 注册成功!
00404C58 push 00470D74 注册成功!
00404CB1 push 00470D74 注册成功!
00404D0A push 00470D74 注册成功!
00404D63 push 00470D74 注册成功!
00404DBC push 00470D74 注册成功!
00404E15 push 00470D74 注册成功!
00404E6E push 00470D74 注册成功!
00404EC7 push 00470D74 注册成功!
00404EFD push 00470D74 注册成功!
00404F56 push 00470D74 注册成功!
00404FAF push 00470D74 注册成功!
00405008 push 00470D74 注册成功!
00405061 push 00470D74 注册成功!
004050BA push 00470D74 注册成功!
00405113 push 00470D74 注册成功!
0040516C push 00470D74 注册成功!
004051C5 push 00470D74 注册成功!
0040521E push 00470D74 注册成功!
00405277 push 00470D74 注册成功!
004052D0 push 00470D74 注册成功!
00405329 push 00470D74 注册成功!
00405382 push 00470D74 注册成功!
004053DB push 00470D74 注册成功!
00405434 push 00470D74 注册成功!
0040548D push 00470D74 注册成功!
004054E6 push 00470D74 注册成功!
0040553F push 00470D74 注册成功!
00405598 push 00470D74 注册成功!
004055F1 push 00470D74 注册成功!
00405682 push 00470D69 注册失败!
004056B8 push 00470D69 注册失败!
004056EE push 00470D69 注册失败!
00405724 push 00470D69 注册失败!
0040575A push 00470D69 注册失败!
00405790 push 00470D69 注册失败!
004057C6 push 00470D69 注册失败!
004057FC push 00470D69 注册失败!
00405832 push 00470D69 注册失败!
00405868 push 00470D69 注册失败!
0040589E push 00470D69 注册失败!
004058D4 push 00470D69 注册失败!
0040590A push 00470D69 注册失败!
00405940 push 00470D69 注册失败!
00405976 push 00470D69 注册失败!
004059AC push 00470D69 注册失败!
004059E2 push 00470D69 注册失败!
00405A18 push 00470D69 注册失败!
00405A4E push 00470D69 注册失败!
00405A84 push 00470D69 注册失败!
00405ABA push 00470D69 注册失败!
00405AF0 push 00470D69 注册失败!
00405B26 push 00470D69 注册失败!
00405B5C push 00470D69 注册失败!
00405B92 push 00470D69 注册失败!
00405BC8 push 00470D69 注册失败!
00405BFE push 00470D69 注册失败!
00405C34 push 00470D69 注册失败!
00405C6A push 00470D69 注册失败!
00405CA0 push 00470D69 注册失败!
00405CD6 push 00470D69 注册失败!
00405D0C push 00470D69 注册失败!
00405D42 push 00470D69 注册失败!
00405D78 push 00470D69 注册失败!
00405DAE push 00470D69 注册失败!
00405DE4 push 00470D69 注册失败!
00405E1A push 00470D69 注册失败!
00405E50 push 00470D69 注册失败!
00405E86 push 00470D69 注册失败!
00405EBC push 00470D69 注册失败!
00405EF2 push 00470D69 注册失败!
00405F28 push 00470D69 注册失败!
00405F5E push 00470D69 注册失败!
00405F94 push 00470D69 注册失败!
00405FCA push 00470D69 注册失败!
00406000 push 00470D69 注册失败!
00406036 push 00470D69 注册失败!
0040606C push 00470D69 注册失败!
004060A2 push 00470D69 注册失败!
004060D8 push 00470D69 注册失败!
0040610E push 00470D69 注册失败!
00406144 push 00470D69 注册失败!
0040617A push 00470D69 注册失败!
004061B0 push 00470D69 注册失败!
004061E6 push 00470D69 注册失败!
0040621C push 00470D69 注册失败!
00406252 push 00470D69 注册失败!
00406288 push 00470D69 注册失败!
004062BE push 00470D69 注册失败!
004062F4 push 00470D69 注册失败!
0040632A push 00470D69 注册失败!
00406360 push 00470D69 注册失败!
00406396 push 00470D69 注册失败!
004063CC push 00470D69 注册失败!
00406402 push 00470D69 注册失败!
00406438 push 00470D69 注册失败!
0040646E push 00470D69 注册失败!
004064A4 push 00470D69 注册失败!
004064DA push 00470D69 注册失败!
00406510 push 00470D69 注册失败!
00406546 push 00470D69 注册失败!
0040657C push 00470D69 注册失败!
004065B2 push 00470D69 注册失败!
004065E8 push 00470D69 注册失败!
0040661E push 00470D69 注册失败!
00406654 push 00470D69 注册失败!
0040668A push 00470D69 注册失败!
004066C0 push 00470D69 注册失败!
004066F6 push 00470D69 注册失败!
0040672C push 00470D69 注册失败!
00406762 push 00470D69 注册失败!
00406798 push 00470D69 注册失败!
004067CE push 00470D69 注册失败!
00406804 push 00470D69 注册失败!
0040683A push 00470D69 注册失败!
00406870 push 00470D69 注册失败!
004068A6 push 00470D69 注册失败!
004068DC push 00470D69 注册失败!
00406912 push 00470D69 注册失败!
00406948 push 00470D69 注册失败!
0040697E push 00470D69 注册失败!
004069B4 push 00470D69 注册失败!
004069EA push 00470D69 注册失败!
仔细观察,前后都为注册失败,但是中间有一大段注册成功的字符串!记住这个信息,它很重要
双击"004011B2 push 00470D69 注册失败!"
将会来到"004011B2 68 690D4700 push 00470D69 ; 注册失败!"这句汇编代码
我们向上找到该代码的首段:004010C8 55 push ebp
对这句代码下断点,接着运行程序并点击按钮,就会中断在此处,然后慢慢F8单步跟踪分析代码,分析结果如下
004010C8 /. 55 push ebp
004010C9 |. 8BEC mov ebp,esp
004010CB |. 81EC 1C000000 sub esp,0x1C
004010D1 |. 68 00000000 push 0x0
004010D6 |. BB 70704000 mov ebx,test.00407070 ; j
004010DB |. E8 FC590000 call test.00406ADC
004010E0 |. 83C4 04 add esp,0x4
004010E3 |. 8945 F4 mov [local.3],eax
004010E6 |. DB45 F4 fild [local.3]
004010E9 |. DD5D F4 fstp qword ptr ss:[ebp-0xC]
004010EC |. DD45 F4 fld qword ptr ss:[ebp-0xC]
004010EF |. DC05 580D4700 fadd qword ptr ds:[0x470D58]
004010F5 |. DD5D EC fstp qword ptr ss:[ebp-0x14]
004010F8 |. DD45 EC fld qword ptr ss:[ebp-0x14]
004010FB |. DC25 600D4700 fsub qword ptr ds:[0x470D60]
00401101 |. DD5D E4 fstp qword ptr ss:[ebp-0x1C]
00401104 |. DD45 E4 fld qword ptr ss:[ebp-0x1C]
00401107 |. E8 F8FEFFFF call test.00401004 ; 计算出浮点型的注册码
0040110C |. A3 F0714900 mov dword ptr ds:[0x4971F0],eax
00401111 |. 68 01030080 push 0x80000301
00401116 |. 6A 00 push 0x0
00401118 |. FF35 F0714900 push dword ptr ds:[0x4971F0]
0040111E |. 68 01000000 push 0x1
00401123 |. BB C06C4000 mov ebx,test.00406CC0
00401128 |. E8 AF590000 call test.00406ADC ; 将浮点型注册码转换为字符串,并保存在EAX中
0040112D |. 83C4 10 add esp,0x10
00401130 |. 8945 FC mov [local.1],eax
00401133 |. 6A FF push -0x1
00401135 |. 6A 08 push 0x8
00401137 |. 68 14000116 push 0x16010014
0040113C |. 68 01000152 push 0x52010001
00401141 |. E8 A2590000 call test.00406AE8 ;
获取编辑框内容
我很气愤,这个CM就不追码了
因为这个编辑框的内容和前面的事件按钮类似
作者把真正的填写密码的编辑框隐藏了,我们看到的编辑框是假的,
虽然也可以追码,但是刚才patch按钮就让我们累得够呛,所以果断无视,直接爆破吧
00401146 |. 83C4 10 add esp,0x10
00401149 |. 8945 F8 mov [local.2],eax
0040114C |. 8B45 FC mov eax,[local.1]
0040114F |. 50 push eax
00401150 |. FF75 F8 push [local.2]
00401153 |. E8 D3FEFFFF call test.0040102B ; 获取到的内容和正确注册码做比较
00401158 |. 83C4 08 add esp,0x8 ; 相同返回0,不同返回-1
0040115B |. 83F8 00 cmp eax,0x0
0040115E |. B8 00000000 mov eax,0x0
00401163 |. 0F94C0 sete al
00401166 |. 8945 F4 mov [local.3],eax
00401169 |. 8B5D F8 mov ebx,[local.2]
0040116C |. 85DB test ebx,ebx
0040116E |. 74 09 je Xtest.00401179
00401170 |. 53 push ebx
00401171 |. E8 5A590000 call test.00406AD0
00401176 |. 83C4 04 add esp,0x4
00401179 |> 8B5D FC mov ebx,[local.1]
0040117C |. 85DB test ebx,ebx
0040117E |. 74 09 je Xtest.00401189
00401180 |. 53 push ebx
00401181 |. E8 4A590000 call test.00406AD0
00401186 |. 83C4 04 add esp,0x4
00401189 |> 837D F4 00 cmp [local.3],0x0
0040118D 0F84 D0440000 je test.00405663 ; 如果刚才返回-1,即输入的和正确的不同就跳,明显这个不能跳,要NOP掉
00401193 |. 68 04000080 push 0x80000004 ; 可以发现就算NOP掉下面一样会弹出注册失败的对话框
00401198 |. 6A 00 push 0x0 ; 不要以为自己错了,接着往下看代码
0040119A |. 68 680D4700 push test.00470D68
0040119F |. 68 01030080 push 0x80000301
004011A4 |. 6A 00 push 0x0
004011A6 |. 68 00000000 push 0x0
004011AB |. 68 04000080 push 0x80000004
004011B0 |. 6A 00 push 0x0
004011B2 |. 68 690D4700 push test.00470D69 ; 注册失败!
004011B7 |. 68 03000000 push 0x3
004011BC |. BB F06D4000 mov ebx,test.00406DF0
004011C1 |. E8 16590000 call test.00406ADC
004011C6 |. 83C4 28 add esp,0x28
----------------------------------------这里省略N多相同的弹出注册失败的代码-----------------------------------
00404067 |. 68 01030080 push 0x80000301 ; 这里之后不再是和刚才相同的代码注意!
0040406C |. 6A 00 push 0x0
0040406E |. 68 60DE0200 push 0x2DE60
00404073 |. 68 01000000 push 0x1
00404078 |. B8 01000000 mov eax,0x1
0040407D |. BB D0ED4400 mov ebx,test.0044EDD0
00404082 |. E8 5B2A0000 call test.00406AE2 ; 实际上这里是Sleep延迟
00404087 |. 83C4 10 add esp,0x10
0040408A |. 68 04000080 push 0x80000004 ; 延迟之后弹出成功对话框
0040408F |. 6A 00 push 0x0
00404091 |. 68 680D4700 push test.00470D68
00404096 |. 68 01030080 push 0x80000301
0040409B |. 6A 00 push 0x0
0040409D |. 68 00000000 push 0x0
004040A2 |. 68 04000080 push 0x80000004
004040A7 |. 6A 00 push 0x0
004040A9 |. 68 740D4700 push test.00470D74 ; 注册成功!
004040AE |. 68 03000000 push 0x3
004040B3 |. BB F06D4000 mov ebx,test.00406DF0
004040B8 |. E8 1F2A0000 call test.00406ADC
004040BD |. 83C4 28 add esp,0x28
004040C0 |. 68 01030080 push 0x80000301
004040C5 |. 6A 00 push 0x0
004040C7 |. 68 D0070000 push 0x7D0
004040CC |. 68 01000000 push 0x1
004040D1 |. B8 01000000 mov eax,0x1
004040D6 |. BB D0ED4400 mov ebx,test.0044EDD0
004040DB |. E8 022A0000 call test.00406AE2
004040E0 |. 83C4 10 add esp,0x10
----------------------------------------这里省略N多相同的弹出注册成功的代码-----------------------------------
00405608 |. 68 01030080 push 0x80000301 ; 这里继续调用延迟
0040560D |. 6A 00 push 0x0
0040560F |. 68 50C30000 push 0xC350
00405614 |. 68 01000000 push 0x1
00405619 |. B8 01000000 mov eax,0x1
0040561E |. BB D0ED4400 mov ebx,test.0044EDD0
00405623 |. E8 BA140000 call test.00406AE2
00405628 |. 83C4 10 add esp,0x10
0040562B |. 68 02000080 push 0x80000002 ; 这里就开始载入吾爱破解的Logo了!
00405630 |. 6A 00 push 0x0
00405632 |. 68 01000000 push 0x1
00405637 |. 6A 00 push 0x0
00405639 |. 6A 00 push 0x0
0040563B |. 6A 00 push 0x0
0040563D |. 68 01000100 push 0x10001
00405642 |. 68 0A000106 push 0x601000A
00405647 |. 68 0B000152 push 0x5201000B
0040564C |. 68 03000000 push 0x3
00405651 |. BB 406B4000 mov ebx,test.00406B40
00405656 |. E8 81140000 call test.00406ADC
0040565B |. 83C4 28 add esp,0x28
0040565E |. E9 9E130000 jmp test.00406A01
00405663 |> 68 04000080 push 0x80000004
00405668 |. 6A 00 push 0x0
0040566A |. 68 680D4700 push test.00470D68
0040566F |. 68 01030080 push 0x80000301
00405674 |. 6A 00 push 0x0
00405676 |. 68 00000000 push 0x0
0040567B |. 68 04000080 push 0x80000004
00405680 |. 6A 00 push 0x0
00405682 |. 68 690D4700 push test.00470D69 ; 注册失败!
00405687 |. 68 03000000 push 0x3
0040568C |. BB F06D4000 mov ebx,test.00406DF0
00405691 |. E8 46140000 call test.00406ADC
00405696 |. 83C4 28 add esp,0x28
----------------------------------------这里省略N多相同的弹出注册失败的代码-----------------------------------
00406A01 |> 8BE5 mov esp,ebp
00406A03 |. 5D pop ebp
00406A04 \. C3 retn
通过观察不难发现,该CM实属恶劣.
按钮弄个假的也就算了
连密码编辑框也作假的.....
而且不管注册码是否正确,都将会弹出N个"注册失败"对话框
如果输入的注册码是正确的,
将会在弹出N个"注册失败"框并且延迟很久之后再弹出N个"注册成功"对话框,接着继续延迟很久,才会载入吾爱破解的图片
可见这个CM有多猥琐.
那么我们就不要光去破解了,给这个CM来个优化吧
我们的任务是:
(1)爆破
(2)不弹出任何"注册失败"对话框
(3)去除Sleep
(4)只弹出一个"注册成功"对话框,并且点确定后马上载入吾爱破解Logo
步骤:
1.0040118D处改原指令为jmp 0040408A
2.004040C0处改原指令为jmp 0040562B
这样修改后就能跳过注册失败对话框和延迟了,也实现了上述所有效果
破解总结:
1.把假按钮Kill掉,让真按钮显示在界面上
2.通过查找字符串找到关键代码,即上面的那些代码,那些代码也就是真注册按钮的按钮事件的代码了
3.分析代码破解并优化
图片什么的具体的操作全部保存在文件中,就不上传图片了,太多了
直接上传完毕咯~~
|
免费评分
-
查看全部评分
|