Kris 发表于 2011-8-9 22:41

【暑假活动后续】爆破 之 003灰常新手的CrackMe

[ 破文标题 ] 爆破 之 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的地方下断
004202FDFF55 FC       call
然后点击按钮,发现并没有断住,那么我们的猜想便是正确的了,在界面上显示出来的按钮是没有按钮事件的,是假按钮,而真的有事件的按钮就应该是被假按钮覆盖住了
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:"
(3)把46426F的指令改为"jmp 0046E59F"

(4)0046E59F处添加如下的patch代码
0046E59F      60            pushad                                 ;保护现场
0046E5A0      9C            pushfd                                 ;保护现场
0046E5A1      FE05 C5E54600 inc byte ptr ds:               ;为0,每调用一次ShowWindow都增加1,作为计数器
0046E5A7      803D C5E54600 cmp byte ptr ds:,0x8         
;判断为8,因为跟踪可以发现,在第8次调用ShowWindow的时候,是要显示假注册按钮
0046E5AE      75 08         jnz 0046E5B8                           ;如果是要显示假注册按钮跳转就不实现,否则跳转实现继续执行原指令
0046E5B0      C74424 28 000 mov dword ptr ss:,0x0          ;把显示属性修改为SW_HIDE
0046E5B8      9D            popfd                                    ;还原现场
0046E5B9      61            popad                                    ;还原现场
0046E5BA      FF15 C0F44600 call dword ptr ds:             ;执行原指令
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 ,eax
004010E6|.DB45 F4       fild
004010E9|.DD5D F4       fstp qword ptr ss:
004010EC|.DD45 F4       fld qword ptr ss:
004010EF|.DC05 580D4700 fadd qword ptr ds:
004010F5|.DD5D EC       fstp qword ptr ss:
004010F8|.DD45 EC       fld qword ptr ss:
004010FB|.DC25 600D4700 fsub qword ptr ds:
00401101|.DD5D E4       fstp qword ptr ss:
00401104|.DD45 E4       fld qword ptr ss:
00401107|.E8 F8FEFFFF   call test.00401004                     ;计算出浮点型的注册码
0040110C|.A3 F0714900   mov dword ptr ds:,eax
00401111|.68 01030080   push 0x80000301
00401116|.6A 00         push 0x0
00401118|.FF35 F0714900 push dword ptr ds:
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 ,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 ,eax
0040114C|.8B45 FC       mov eax,
0040114F|.50            push eax
00401150|.FF75 F8       push
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 ,eax
00401169|.8B5D F8       mov ebx,
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,
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 ,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.分析代码破解并优化


图片什么的具体的操作全部保存在文件中,就不上传图片了,太多了
直接上传完毕咯~~

Shiny 发表于 2011-8-9 22:44

qaz789a4 发表于 2011-8-9 23:21

膜拜Kris超级大神牛

zhi5231 发表于 2011-8-10 08:05

注册账户好难 发表于 2011-8-10 19:51

膜拜中.....
kris太给力了

Speeday 发表于 2013-3-11 16:17

感谢kris大牛的分析,这个CM太给力了。
页: [1]
查看完整版本: 【暑假活动后续】爆破 之 003灰常新手的CrackMe