吾爱破解2012CM大赛破文-zhi5231
【文章标题】: 吾爱破解2012CM大赛破文-zhi5231【文章作者】: DZ
【软件名称】: zhi5231.exe
【难 度】: 中
【下载地址】: http://down.52pojie.cn/2012CM/%E4%B8%AD/zhi5231/
【作者声明】: 一个一个来,慢慢分析,直到最难 ^^
--------------------------------------------------------------------------------
【详细过程】
此CM为易语言编写,所以OD加载运行后下易语言万能断点,然后随便输入假码,点击“按钮”,
你会发现,按钮点击了没反应,但是你看下任务栏就明白了,这个CM启动时创建了2个完全一样的窗体,
2个窗体重叠在一起,真正有作用的是被遮盖的那个窗体,好了,我们把看到的窗体拖动一下,就看到
下面那个窗口了,在下面窗口输入假码点击按钮,就断下来了
0041A78D |> \FF55 FC call ;zhi5231.00401004 //断到此处
我们F7进入call,代码如下:
00401087 /.55 push ebp
00401088 |.8BEC mov ebp,esp
0040108A |.81EC 0C000000 sub esp,0C
00401090 |.833D 50604C00 0>cmp dword ptr ds:,2
00401097 |.0F85 05000000 jnz zhi5231.004010A2
0040109D |.E9 0A000000 jmp zhi5231.004010AC
004010A2 |>C705 50604C00 8>mov dword ptr ds:,1F2F0E8B
004010AC |>E8 E1020000 call zhi5231.00401392
004010B1 |.6A FF push -1
004010B3 |.6A 08 push 8
004010B5 |.68 09000116 push 16010009
004010BA |.68 01000152 push 52010001
004010BF |.E8 5F080000 call zhi5231.00401923 ;取密码
004010C4 |.83C4 10 add esp,10
004010C7 |.8945 FC mov ,eax
call内容就很简单了,跟踪一下就发现关键点是2个大跳转和一个小跳转,代码基本相同,如下:
00401178 |.E8 8E070000 call zhi5231.0040190B
0040117D |.83C4 10 add esp,10
00401180 |.8945 F8 mov ,eax
00401183 |.837D F8 00 cmp ,0
00401187 |.0F85 01020000 jnz zhi5231.0040138E ;// 大跳转1 ,爆破直接nop掉0040127F |.E8 87060000 call zhi5231.0040190B
00401284 |.83C4 10 add esp,10
00401287 |.8945 F8 mov ,eax
0040128A |.837D F8 00 cmp ,0
0040128E |.0F85 FA000000 jnz zhi5231.0040138E ;//大跳转2,爆破直接nop掉
0040136A |.E8 9C050000 call zhi5231.0040190B
0040136F |.83C4 10 add esp,10
00401372 |.8945 F8 mov ,eax
00401375 |.837D F8 00 cmp ,0
00401379 |.0F85 0F000000 jnz zhi5231.0040138E ;//小跳转,爆破直接nop掉
上面把三个jnz NOP掉是一种方法,还有一种方法是根据3个地方代码的相似性,它们都调用了call zhi5231.0040190B,然后根据eax的值进行判断,所以我们可以在这个call里面做文章,好的,我们进call看看,同时注意对eax的赋值语句,代码如下:0041A6A0 .8D5424 08 lea edx,dword ptr ss:
0041A6A4 .83EC 0C sub esp,0C
0041A6A7 .52 push edx
0041A6A8 .FF7424 14 push dword ptr ss:
0041A6AC .C74424 08 00000>mov dword ptr ss:,0
0041A6B4 .C74424 0C 00000>mov dword ptr ss:,0
0041A6BC .C74424 10 00000>mov dword ptr ss:,0
0041A6C4 .8D5424 08 lea edx,dword ptr ss:
0041A6C8 .52 push edx
0041A6C9 .FFD3 call ebx
0041A6CB .8B4424 0C mov eax,dword ptr ss: //对eax赋值了
0041A6CF .8B5424 10 mov edx,dword ptr ss:
0041A6D3 .8B4C24 14 mov ecx,dword ptr ss:
0041A6D7 .83C4 18 add esp,18
0041A6DA .C3 retn
我们注意到在 0041A6CB 处,对eax进行赋值,我们先走一遍,记住的地址,然后重来,这次进到上面那个 call ebx 去寻找对的赋值,此call代码如下:00449330 .8B4424 0C mov eax,dword ptr ss:
00449334 .56 push esi
00449335 .8B7424 08 mov esi,dword ptr ss:
00449339 .C706 01000000 mov dword ptr ds:,1
0044933F .8B08 mov ecx,dword ptr ds:
00449341 .8B01 mov eax,dword ptr ds:
00449343 .85C0 test eax,eax
00449345 .74 30 je short zhi5231.00449377
00449347 .8B50 04 mov edx,dword ptr ds:
0044934A .85D2 test edx,edx
0044934C .75 0B jnz short zhi5231.00449359
0044934E .33C9 xor ecx,ecx
00449350 .85D2 test edx,edx
00449352 .0F94C1 sete cl
00449355 .890E mov dword ptr ds:,ecx ; 就是上层的
00449357 .5E pop esi
00449358 .C3 retn
00449359 >8B48 08 mov ecx,dword ptr ds:
0044935C .B8 ABAAAA2A mov eax,2AAAAAAB
00449361 .2BCA sub ecx,edx
00449363 .F7E9 imul ecx
00449365 .D1FA sar edx,1
00449367 .8BC2 mov eax,edx
00449369 .33C9 xor ecx,ecx
0044936B .C1E8 1F shr eax,1F
0044936E .03D0 add edx,eax
00449370 .85D2 test edx,edx
00449372 .0F94C1 sete cl
00449375 .890E mov dword ptr ds:,ecx ; 就是上层的
00449377 >5E pop esi
00449378 .C3 retn
进来发现后面其实就是上层里的,也就是ecx把值传给了,而调试发现经过 sete cl 这句后,cl=1 ,所以我们把00449352 .0F94C1 sete cl这句改成相反的操作00449352 0F95C1 setne cl//改成这样,之后cl=0 再之后运行看看,两个窗口点击测试,都提示破解成功!大功告成^^
楼主 膜拜中…… 吾爱需要这样的人物啊...支持了 楼主很给力
还是技术重要啊
赞一个 楼主不错。向你学习 厉害噢支持一下 本帖最后由 sdzzb 于 2012-5-1 12:48 编辑
zhi5231 发表于 2012-5-1 09:22 static/image/common/back.gif
唔!怎么总觉得一个简单的东西搞得好像很复杂的样子!
描述的复杂了,其实两句话就OK了。。只是为了把我的思路给大家,而不只是结果
我这两天在破解CM 遇见这个卡壳了楼主分析的跟我这个咋不一样呢?
页:
[1]