吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3935|回复: 8
收起左侧

[CrackMe] 吾爱破解2012CM大赛破文-zhi5231

[复制链接]
sdzzb 发表于 2012-5-1 00:33
CM是什么?Crackme是什么?这是什么东西?楼主发的什么?
他们都是一些公开给别人尝试破解的小程序,制作 Crackme 的人可能是程序员,想测试一下自己的软件保护技术,也可能是一位 Cracker,想挑战一下其它 Cracker 的破解实力,也可能是一些正在学习破解的人,自己编一些小程序给自己破解,KeyGenMe是要求别人做出它的 keygen (序号产生器), ReverseMe 要求别人把它的算法做出逆向分析, UnpackMe 是要求别人把它成功脱壳,本版块禁止回复非技术无关水贴。

【文章标题】: 吾爱破解2012CM大赛破文-zhi5231
【文章作者】: DZ
【软件名称】: zhi5231.exe
【难      度】: 中
【下载地址】: http://down.52pojie.cn/2012CM/%E4%B8%AD/zhi5231/
【作者声明】: 一个一个来,慢慢分析,直到最难 ^^
--------------------------------------------------------------------------------
【详细过程】
  此CM为易语言编写,所以OD加载运行后下易语言万能断点,然后随便输入假码,点击“按钮”,
  你会发现,按钮点击了没反应,但是你看下任务栏就明白了,这个CM启动时创建了2个完全一样的窗体,
  2个窗体重叠在一起,真正有作用的是被遮盖的那个窗体,好了,我们把看到的窗体拖动一下,就看到
  下面那个窗口了,在下面窗口输入假码点击按钮,就断下来了
  0041A78D   |> \FF55 FC         call    [local.1]                                 ;  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:[4C6050],2
  00401097   |.  0F85 05000000   jnz     zhi5231.004010A2
  0040109D   |.  E9 0A000000     jmp     zhi5231.004010AC
  004010A2   |>  C705 50604C00 8>mov     dword ptr ds:[4C6050],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     [local.1],eax
call内容就很简单了,跟踪一下就发现关键点是2个大跳转和一个小跳转,代码基本相同,如下:
  00401178   |.  E8 8E070000     call    zhi5231.0040190B
  0040117D   |.  83C4 10         add     esp,10
  00401180   |.  8945 F8         mov     [local.2],eax
  00401183   |.  837D F8 00      cmp     [local.2],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     [local.2],eax
  0040128A   |.  837D F8 00      cmp     [local.2],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     [local.2],eax
  00401375   |.  837D F8 00      cmp     [local.2],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:[esp+8]
  0041A6A4    .  83EC 0C         sub     esp,0C
  0041A6A7    .  52              push    edx
  0041A6A8    .  FF7424 14       push    dword ptr ss:[esp+14]
  0041A6AC    .  C74424 08 00000>mov     dword ptr ss:[esp+8],0
  0041A6B4    .  C74424 0C 00000>mov     dword ptr ss:[esp+C],0
  0041A6BC    .  C74424 10 00000>mov     dword ptr ss:[esp+10],0
  0041A6C4    .  8D5424 08       lea     edx,dword ptr ss:[esp+8]
  0041A6C8    .  52              push    edx
  0041A6C9    .  FFD3            call    ebx
  0041A6CB    .  8B4424 0C       mov     eax,dword ptr ss:[esp+C]                                                   //对eax赋值了
  0041A6CF    .  8B5424 10       mov     edx,dword ptr ss:[esp+10]
  0041A6D3    .  8B4C24 14       mov     ecx,dword ptr ss:[esp+14]
  0041A6D7    .  83C4 18         add     esp,18
  0041A6DA    .  C3              retn
我们注意到在 0041A6CB 处,对eax进行赋值[esp+0xC],我们先走一遍,记住[esp+0xC]的地址,然后重来,这次进到上面那个 call ebx 去寻找对[esp+0xC]的赋值,此call代码如下:
  00449330    .  8B4424 0C       mov     eax,dword ptr ss:[esp+C]
  00449334    .  56              push    esi
  00449335    .  8B7424 08       mov     esi,dword ptr ss:[esp+8]
  00449339    .  C706 01000000   mov     dword ptr ds:[esi],1
  0044933F    .  8B08            mov     ecx,dword ptr ds:[eax]
  00449341    .  8B01            mov     eax,dword ptr ds:[ecx]
  00449343    .  85C0            test    eax,eax
  00449345    .  74 30           je      short zhi5231.00449377
  00449347    .  8B50 04         mov     edx,dword ptr ds:[eax+4]
  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:[esi],ecx                    ;   [esi]  就是上层的[esp+0xC]
  00449357    .  5E              pop     esi
  00449358    .  C3              retn
  00449359    >  8B48 08         mov     ecx,dword ptr ds:[eax+8]
  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:[esi],ecx                    ;   [esi]  就是上层的[esp+0xC]
  00449377    >  5E              pop     esi
  00449378    .  C3              retn
进来发现后面[esi]其实就是上层里的[esp+0xC],也就是ecx把值传给了[esp+0xC],  而调试发现经过 sete cl 这句后,cl=1 ,所以我们把
  00449352    .  0F94C1          sete    cl  这句改成相反的操作
  00449352       0F95C1          setne   cl  //改成这样,之后cl=0
再之后运行看看,两个窗口点击测试,都提示破解成功!  大功告成^^





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册[Register]

x

点评

哇靠,太厉害了。  发表于 2012-5-1 00:55

免费评分

参与人数 2热心值 +2 收起 理由
zone0826 + 1 无语,不加对不起自己了。
Rookietp + 1 欢迎分析讨论交流,[吾爱破解论坛]有你更精.

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

fubidong 发表于 2012-5-1 01:06
楼主 膜拜中……
791003846 发表于 2012-5-1 01:09
浪子老柒 发表于 2012-5-1 01:19
向上 发表于 2012-5-1 01:25
楼主不错。向你学习
OiO 发表于 2012-5-1 02:33
厉害噢  支持一下
头像被屏蔽
zhi5231 发表于 2012-5-1 09:22
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| sdzzb 发表于 2012-5-1 12:04
本帖最后由 sdzzb 于 2012-5-1 12:48 编辑
zhi5231 发表于 2012-5-1 09:22
唔!怎么总觉得一个简单的东西搞得好像很复杂的样子!

描述的复杂了,其实两句话就OK了。。只是为了把我的思路给大家,而不只是结果

点评

你果然承认了!!2句话的东西被你搞到复杂了- -!  发表于 2012-5-1 12:13
sunflover 发表于 2012-5-19 00:08
我这两天在破解CM 遇见这个卡壳了  楼主分析的跟我这个咋不一样呢?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 01:36

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表