吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4765|回复: 11
收起左侧

[CrackMe] 【暑假活动后续】追码+爆破 之"002 一个简单的CM"

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

本帖最后由 Kris 于 2011-8-9 14:20 编辑

[ 破文标题 ] 追码+爆破 之 一个简单的CM!本地验证!菜鸟找回信心
[ 破文作者 ] Kris
[ 作者邮箱 ] ZzhEMail@Foxmail.Com
[ 破解工具 ] OD
[ 破解平台 ] Windows Xp
[ 软件名称 ] 一个简单的CM!本地验证!菜鸟找回信心
[ 软件大小 ] 568KB
[ 原版下载 ] http://www.52pojie.cnthread-101329-1-1.html
[ 保护方式 ] 固定密码
[ 软件简介 ] 超级简单的CM
[ 破解声明 ] 仅供交流学习技术,若教程中有不对之处,希望各位大大即使指正!
破解过程:
1.
打开CM,密码框留空,直接点按钮,弹出了错误框
2.
载入OD,运行后重复刚才的步骤,弹出错误框后不要马上去点击确定。
首先点暂停,然后点调试-执行到用户代码
并点击错误框的“确定”按钮,点下后OD暂停在如下位置
接着F8单步步过,两个ret后来到关键代码,这个所谓的关键代码就是按钮事件代码了:
004010A1  /.  55              push ebp                                 ;  F2,在此处(段首)下INT3断点,运行后点击按钮将会断下
004010A2  |.  8BEC            mov ebp,esp
004010A4  |.  81EC 08000000   sub esp,0x8
004010AA  |.  6A FF           push -0x1
004010AC  |.  6A 08           push 0x8
004010AE  |.  68 02000116     push 0x16010002
004010B3  |.  68 01000152     push 0x52010001
004010B8  |.  E8 00010000     call CM.004011BD                         ;  获取编辑框中输入的密码内容
004010BD  |.  83C4 10         add esp,0x10
004010C0  |.  8945 FC         mov [local.1],eax                        ;  [local.1]中保存编辑框中输入的密码
004010C3  |.  68 4C9B4600     push CM.00469B4C                         ;  正确的密码
004010C8  |.  FF75 FC         push [local.1]                           ;  编辑框中输入的密码
004010CB  |.  E8 34FFFFFF     call CM.00401004                         ;  比较正确密码和编辑框中输入的密码的函数,F7跟进去
---------------------------------------------------------------Code of 401004 Begin------------------------------------------------------------------------------------------------------
00401004  /$  8B5424 04       mov edx,dword ptr ss:[esp+0x4]
00401008  |.  8B4C24 08       mov ecx,dword ptr ss:[esp+0x8]
0040100C  |.  85D2            test edx,edx
0040100E  |.  75 0D           jnz XCM.0040101D
00401010  |.  33C0            xor eax,eax
00401012  |.  85C9            test ecx,ecx
00401014  |.  74 06           je XCM.0040101C
00401016  |.  8039 00         cmp byte ptr ds:[ecx],0x0
00401019  |.  74 01           je XCM.0040101C
0040101B  |.  48              dec eax
0040101C  |>  C3              retn
0040101D  |>  85C9            test ecx,ecx
0040101F  |.  75 09           jnz XCM.0040102A
00401021  |.  33C0            xor eax,eax
00401023  |.  803A 00         cmp byte ptr ds:[edx],0x0
00401026  |.  74 01           je XCM.00401029
00401028  |.  40              inc eax
00401029  |>  C3              retn
0040102A  |>  F7C2 03000000   test edx,0x3
00401030  |.  75 37           jnz XCM.00401069
00401032  |>  8B02            /mov eax,dword ptr ds:[edx]
00401034  |.  3A01            |cmp al,byte ptr ds:[ecx]                ;  al为编辑框中输入的密码,[ecx]为正确的密码
00401036  |.  75 2B           |jnz XCM.00401063                        ;  如果不一样就跳出比较函数
00401038  |.  0AC0            |or al,al
0040103A  |.  74 24           |je XCM.00401060
0040103C  |.  3A61 01         |cmp ah,byte ptr ds:[ecx+0x1]            ;  ah为编辑框中输入的密码,[ecx+0x1]为正确的密码
0040103F  |.  75 22           |jnz XCM.00401063                        ;  如果不一样就跳出比较函数
00401041  |.  0AE4            |or ah,ah
00401043  |.  74 1B           |je XCM.00401060
00401045  |.  C1E8 10         |shr eax,0x10
00401048  |.  3A41 02         |cmp al,byte ptr ds:[ecx+0x2]            ;  al为编辑框中输入的密码,[ecx+0x2]为正确的密码
0040104B  |.  75 16           |jnz XCM.00401063                        ;  如果不一样就跳出比较函数
0040104D  |.  0AC0            |or al,al
0040104F  |.  74 0F           |je XCM.00401060
00401051  |.  3A61 03         |cmp ah,byte ptr ds:[ecx+0x3]            ;  ah为编辑框中输入的密码,[ecx+0x3]为正确的密码
00401054  |.  75 0D           |jnz XCM.00401063                        ;  如果不一样就跳出比较函数
00401056  |.  83C1 04         |add ecx,0x4                             ;  ecx为真确密码,edx为编辑框中输入的密码
00401059  |.  83C2 04         |add edx,0x4                             ;  因为每次比较四个byte,所以每次比较过后+4
0040105C  |.  0AE4            |or ah,ah
0040105E  |.^ 75 D2           \jnz XCM.00401032                        ;  继续比较,直到全部比较完
00401060  |>  33C0            xor eax,eax                              ;  如果一样,作为返回值的eax将会变为0
00401062  |.  C3              retn                                     ;  返回
00401063  |>  1BC0            sbb eax,eax                              ;  如果输入的密码与正确的密码相比较
00401065  |.  D1E0            shl eax,1                                ;  并不一样
00401067  |.  40              inc eax                                  ;  那么作为返回值的eax将会变为-1(FFFFFFFF)
00401068  |.  C3              retn                                     ;  返回
00401069  |>  F7C2 01000000   test edx,0x1
0040106F  |.  74 14           je XCM.00401085
00401071  |.  8A02            mov al,byte ptr ds:[edx]
00401073  |.  42              inc edx
00401074  |.  3A01            cmp al,byte ptr ds:[ecx]
00401076  |.^ 75 EB           jnz XCM.00401063
00401078  |.  41              inc ecx
00401079  |.  0AC0            or al,al
0040107B  |.^ 74 E3           je XCM.00401060
0040107D  |.  F7C2 02000000   test edx,0x2
00401083  |.^ 74 AD           je XCM.00401032
00401085  |>  66:8B02         mov ax,word ptr ds:[edx]
00401088  |.  83C2 02         add edx,0x2
0040108B  |.  3A01            cmp al,byte ptr ds:[ecx]
0040108D  |.^ 75 D4           jnz XCM.00401063
0040108F  |.  0AC0            or al,al
00401091  |.^ 74 CD           je XCM.00401060
00401093  |.  3A61 01         cmp ah,byte ptr ds:[ecx+0x1]
00401096  |.^ 75 CB           jnz XCM.00401063
00401098  |.  0AE4            or ah,ah
0040109A  |.^ 74 C4           je XCM.00401060
0040109C  |.  83C1 02         add ecx,0x2
0040109F  \.^ EB 91           jmp XCM.00401032
---------------------------------------------------------------Code of 401004 End------------------------------------------------------------------------------------------------------
004010D0  |.  83C4 08         add esp,0x8                              ;  eax=0输入的密码与正确密码吻合,eax为-1(FFFFFFFF)则不吻合
004010D3  |.  83F8 00         cmp eax,0x0                              ;  eax与0比较,如果一样,标志寄存器Z=1,否则Z=0
004010D6  |.  B8 00000000     mov eax,0x0
004010DB  |.  0F94C0          sete al                                  ;  如果Z=1,那么EAX将为1,如果Z=0,那么EAX将为0
004010DE  |.  8945 F8         mov [local.2],eax                        ;  [local.2]保存eax的值
004010E1  |.  8B5D FC         mov ebx,[local.1]
004010E4  |.  85DB            test ebx,ebx
004010E6  |.  74 09           je XCM.004010F1
004010E8  |.  53              push ebx
004010E9  |.  E8 C9000000     call CM.004011B7
004010EE  |.  83C4 04         add esp,0x4
004010F1  |>  837D F8 00      cmp [local.2],0x0                        ;  [local.2]与0比较
004010F5  |.  0F84 35000000   je CM.00401130                           ;  如果[local.2]为0,那么跳转实现,就会跳出失败
004010FB  |.  6A 00           push 0x0                                 ;  到这里就可以跳出成功
004010FD  |.  6A 00           push 0x0
004010FF  |.  6A 00           push 0x0
00401101  |.  68 01030080     push 0x80000301
00401106  |.  6A 00           push 0x0
00401108  |.  68 00000000     push 0x0
0040110D  |.  68 04000080     push 0x80000004
00401112  |.  6A 00           push 0x0
00401114  |.  68 569B4600     push CM.00469B56
00401119  |.  68 03000000     push 0x3
0040111E  |.  BB 00134000     mov ebx,CM.00401300
00401123  |.  E8 89000000     call CM.004011B1
00401128  |.  83C4 28         add esp,0x28
0040112B  |.  E9 30000000     jmp CM.00401160
00401130  |>  6A 00           push 0x0                                 ;  到这理将会跳出失败
00401132  |.  6A 00           push 0x0
00401134  |.  6A 00           push 0x0
00401136  |.  68 01030080     push 0x80000301
0040113B  |.  6A 00           push 0x0
0040113D  |.  68 00000000     push 0x0
00401142  |.  68 04000080     push 0x80000004
00401147  |.  6A 00           push 0x0
00401149  |.  68 799B4600     push CM.00469B79
0040114E  |.  68 03000000     push 0x3
00401153  |.  BB 00134000     mov ebx,CM.00401300
00401158  |.  E8 54000000     call CM.004011B1
0040115D  |.  83C4 28         add esp,0x28
00401160  |>  8BE5            mov esp,ebp
00401162  |.  5D              pop ebp
00401163  \.  C3              retn


3.
代码分析完毕,下面开始进行破解
(1)
追码:
004010C3  |.  68 4C9B4600     push CM.00469B4C                         ;  正确的密码
通过这句代码就知道,00469B4C里面就存放着正确的密码,数据窗口-跟随-00469B4C,马上能找到正确的密码为:法克shiny
(2)
爆破:
004010F5  |.  0F84 35000000   je CM.00401130                           ;  如果[local.2]为0,那么跳转实现,就会跳出失败
很明显,这句代码跳转了的话必定会失败,那肯定用NOP啦,这样就可以完成爆破了




破解总结:
1.通过弹出错误框后,暂停-调试-执行到用户代码,找到按钮事件
2.分析关键代码
3.找到比较代码即可得到正确密码
4.找到关键跳转即可得到爆破点

http://u.115.com/file/clqpyqd6#
演示教程.rar

本帖子中包含更多资源

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

x

免费评分

参与人数 2热心值 +2 收起 理由
吾爱、硬币 + 1 给大大加分
Peace + 1 欢迎讨论交流,[吾爱破解]有你更精彩!

查看全部评分

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

头像被屏蔽
Shiny 发表于 2011-8-9 14:18
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| Kris 发表于 2011-8-9 14:20
阿杰 发表于 2011-8-9 14:20
头像被屏蔽
zhi5231 发表于 2011-8-9 14:20
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| Kris 发表于 2011-8-9 14:23
淡定。。。参赛的CM为了电子书的下册,全部要写破文
头像被屏蔽
浮华丶一场梦 发表于 2011-8-9 14:25
提示: 作者被禁止或删除 内容自动屏蔽
2356265 发表于 2011-8-9 14:35
什么东西啊?
注册账户好难 发表于 2011-8-9 14:38
呼呼
找回来信心!!!!!!!!!!!!
膜拜kris牛
吾爱、硬币 发表于 2011-8-9 14:42
大牛大牛大牛    膜拜
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

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

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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