首页
社区
课程
招聘
[原创]菜鸟必看的破解文章(1)-爆破软件
发表于: 2005-1-18 16:21 10272

[原创]菜鸟必看的破解文章(1)-爆破软件

2005-1-18 16:21
10272

【破文作者】   小弟[爆破王]

【文章题目】   菜鸟必看的破解文章(1)-爆破软件

【软件名称】   crackme

【下载地址】   看下面

----------------------------------------------------------------------------------------------
【加密方式】   光盘加密

【破解工具】   OllyDbg v1.10b

【软件限制】   没有

【破解平台】   XP SP2

----------------------------------------------------------------------------------------------
【文章简介】

这篇文章是专门给菜鸟看的,高手莫笑,本人的能力也很有限,所以只能写出这样的文章,不要笑我.
有什么不明的可以下面帖出.

----------------------------------------------------------------------------------------------
【破解过程】

这帖子破解的是一个crackme.主要是真正的软件我破解不了^_^.
这里把暴力破解的原理讲解一下.

if qqq=1 then
注册正确
end if
这里用这个语句来说明一下,
如果QQ=1的话注册正确,但是我们可以使条件变成相反的变成
if not qqq=1 then
注册正确
end if

这样我们就可以使用不正确的注册码,而用正确的注册码凡尔不正确。因为我们的条件去反了。
这就是爆破的基本原理
这里给主一些经常见到的跳转
Jc   有进位则跳转                    jnc    无进位则跳转
Jz   为 0 跳转                      jnz    不为0跳转
Je   等于则跳转                     jne    不等于则跳转
Js   为负号则跳转                   jns    不为负号则跳转
Jo   有溢出则跳转                   jno    无溢出则跳转
Jp   奇偶位为偶                     jnp    奇偶位为奇

好了,现在开始我们的爆破旅程^_^

先用OllyDbg v1.10b载入unabexcm1.exe
然后看到一下代码
00401000 u>/$  6A 00              push 0                             ; /Style = MB_OK|MB_APPLMODAL
00401002   |.  68 00204000        push unabexcr.00402000             ; |Title = "abex' 3rd crackme"
00401007   |.  68 12204000        push unabexcr.00402012             ; |Text = "Click OK to check for the keyfile."
0040100C   |.  6A 00              push 0                             ; |hOwner = NULL
0040100E   |.  E8 8C000000        call <jmp.&USER32.MessageBoxA>     ; \MessageBoxA
00401013   |.  6A 00              push 0                             ; /hTemplateFile = NULL
00401015   |.  68 80000000        push 80                            ; |Attributes = NORMAL
0040101A   |.  6A 03              push 3                             ; |Mode = OPEN_EXISTING
0040101C   |.  6A 00              push 0                             ; |pSecurity = NULL
0040101E   |.  6A 00              push 0                             ; |ShareMode = 0
00401020   |.  68 00000080        push 80000000                      ; |Access = GENERIC_READ
00401025   |.  68 B9204000        push unabexcr.004020B9             ; |FileName = "abex.l2c"

是不是看不懂?不用管他,按F9继续执行点击确定之后提示Hmmmmm,I can't find the file!记下来后面有用
然后在汇编代码上右击选择搜索->字符参考.
过一会看到一堆字符,找到Hmmmmm,I can't find the file!双击
来到这里
00401034   |.  83F8 FF            cmp eax,-1                      -----------------------
00401037   |.  74 3C              je short unabexcr.00401075<-----|---看到这个跳转了么? |
00401039   |.  6A 00              push 0                          |   他会先检查是否    |
0040103B   |.  FF35 CA204000      push dword ptr ds:[4020CA]      |   有光盘,如果没有就跳转到错误提示
00401041   |.  E8 4D000000        call <jmp.&KERNEL32.GetFileSize>|   那里(1)改过之后就不会跳转而出现
00401046   |.  83F8 12            cmp eax,12                      |   文件错误的提示使因为
00401049   |.  75 15              jnz short unabexcr.00401060     |<--这个跳转的原因,他会比较文件是否
0040104B   |.  6A 00              push 0                          |   正确,如果不正确就会跳转到文件错
0040104D   |.  68 35204000        push unabexcr.00402035          |   误的提示-------------------------
00401052   |.  68 40204000        push unabexcr.00402040          |   我们把他改为jz就可以完美爆破    |
00401057   |.  6A 00              push 0                          |   ; |hOwner = NULL                |
00401059   |.  E8 41000000        call <jmp.&USER32.MessageBoxA>  |   ; \MessageBoxA                  |
0040105E   |.  EB 28              jmp short unabexcr.00401088     |                                   |
00401060   |>  6A 00              push 0                          |   ; /Style = MB_OK|MB_APPLMODAL<-(2)
00401062   |.  68 79204000        push unabexcr.00402079          |   ; |Title = "Error"
00401067   |.  68 7F204000        push unabexcr.0040207F          |   ; |Text = "The found file is not a valid keyfile!"
0040106C   |.  6A 00              push 0                          |   ; |hOwner = NULL
0040106E   |.  E8 2C000000        call <jmp.&USER32.MessageBoxA>  |   ; \MessageBoxA
00401073   |.  EB 13              jmp short unabexcr.00401088     |
00401075   |>  6A 00              push 0                         (1)->; |/Style = MB_OK|MB_APPLMODAL
00401077   |.  68 54204000        push unabexcr.00402054              ; ||Title = "Error"
0040107C   |.  68 5A204000        push unabexcr.0040205A              ; ||Text = "Hmmmmm, I can't find the file!"
00401081   |.  6A 00              push 0                              ; ||hOwner = NULL
00401083   |.  E8 17000000        call <jmp.&USER32.MessageBoxA>      ; |\MessageBoxA
00401088   \>  E8 0C000000        call <jmp.&KERNEL32.ExitProcess>    ; \ExitProcess

----------------------------------------------------------------------------------------------
【破解心得】

把整个思路概括一下.
软件先检查光驱是否有光盘,如果没有提示没有光盘,改跳转使之去反,提示文件错误,改跳转使之去反,爆破成功^_^
写成程序的格式

if 光驱有光盘 then
if 光盘上的文件正确 then
成功执行
else
提示文件错误
end if
else
提示没有放入光盘
end if

改变后

if 光驱没有光盘 then
if 光盘上的文件不正确 then
成功执行
else
提示文件错误
end if
else
提示没有放入光盘
end if

写的有些简单,但是一些基本的东西还是出来了,希望大家可以看明白,后面还有一个crackme,希望你可以自己暴破.
切记不要就此不前,只会爆破,下片帖子我会贴出怎么追出注册码.

----------------------------------------------------------------------------------------------
【破解声明】   我是一只小菜鸟,偶得一点心得,愿与大家分享:)

【版权声明】   本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!
----------------------------------------------------------------------------------------------
                                                                                 文章写于2005-1-18 15:10:17
附件:unabexcrackme3.rar


[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 7
支持
分享
最新回复 (14)
雪    币: 4668
活跃值: (5323)
能力值: (RANK:215 )
在线值:
发帖
回帖
粉丝
2
跟上学习。
======================================================================
//******************** 程序入口 *******************
:00401000 6A00                    push 00000000
:00401002 6800204000              push 00402000

* Possible StringData Ref from Data Obj ->"Click OK to check for the keyfile."
                                  |
:00401007 6812204000              push 00402012
:0040100C 6A00                    push 00000000

* Reference To: USER32.MessageBoxA, Ord:0000h
                                  |
:0040100E E88C000000              Call 0040109F
:00401013 6A00                    push 00000000
:00401015 6880000000              push 00000080
:0040101A 6A03                    push 00000003
:0040101C 6A00                    push 00000000
:0040101E 6A00                    push 00000000
:00401020 6800000080              push 80000000

* Possible StringData Ref from Data Obj ->"abex.l2c"  //kyfile文件名为abex.l2c
                                  |
:00401025 68B9204000              push 004020B9

* Reference To: KERNEL32.CreateFileA, Ord:0000h
                                  |
:0040102A E85E000000              Call 0040108D
:0040102F A3CA204000              mov dword ptr [004020CA], eax
:00401034 83F8FF                  cmp eax, FFFFFFFF //如果没有abex.l2c这个名称的keyfile文件提示没找到keyfile。
:00401037 743C                    je 00401075
:00401039 6A00                    push 00000000
:0040103B FF35CA204000            push dword ptr [004020CA]

* Reference To: KERNEL32.GetFileSize, Ord:0000h
                                  |
:00401041 E84D000000              Call 00401093
:00401046 83F812                  cmp eax, 00000012 //获取keyfile文件大小
:00401049 7515                    jne 00401060 //如果是18个字节,则正确。
:0040104B 6A00                    push 00000000

* Possible StringData Ref from Data Obj ->"Well done!"
                                  |
:0040104D 6835204000              push 00402035

* Possible StringData Ref from Data Obj ->"Yep, keyfile found!"
                                  |
:00401052 6840204000              push 00402040
:00401057 6A00                    push 00000000

* Reference To: USER32.MessageBoxA, Ord:0000h
                                  |
:00401059 E841000000              Call 0040109F
:0040105E EB28                    jmp 00401088

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00401049(C)
|
:00401060 6A00                    push 00000000

* Possible StringData Ref from Data Obj ->"Error"
                                  |
:00401062 6879204000              push 00402079

* Possible StringData Ref from Data Obj ->"The found file is not a valid "
                                        ->"keyfile!"
                                  |
:00401067 687F204000              push 0040207F
:0040106C 6A00                    push 00000000

* Reference To: USER32.MessageBoxA, Ord:0000h
                                  |
:0040106E E82C000000              Call 0040109F
:00401073 EB13                    jmp 00401088

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00401037(C)
|
:00401075 6A00                    push 00000000

* Possible StringData Ref from Data Obj ->"Error"
                                  |
:00401077 6854204000              push 00402054

* Possible StringData Ref from Data Obj ->"Hmmmmm, I can't find the file!"
                                  |
:0040107C 685A204000              push 0040205A
:00401081 6A00                    push 00000000

* Reference To: USER32.MessageBoxA, Ord:0000h
                                  |
:00401083 E817000000              Call 0040109F

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0040105E(U), :00401073(U)
|

* Reference To: KERNEL32.ExitProcess, Ord:0000h
                                  |
:00401088 E80C000000              Call 00401099

* Referenced by a CALL at Address:
|:0040102A   
|

* Reference To: KERNEL32.CreateFileA, Ord:0000h
                                  |
:0040108D FF2554304000            Jmp dword ptr [00403054]

* Referenced by a CALL at Address:
|:00401041   
|

* Reference To: KERNEL32.GetFileSize, Ord:0000h
                                  |
:00401093 FF2558304000            Jmp dword ptr [00403058]

* Referenced by a CALL at Address:
|:00401088   
|

* Reference To: KERNEL32.ExitProcess, Ord:0000h
                                  |
:00401099 FF255C304000            Jmp dword ptr [0040305C]

* Reference To: USER32.MessageBoxA, Ord:0000h
                                  |
:0040109F FF2564304000            Jmp dword ptr [00403064]
:004010A5 00000000000000000000    BYTE 10 DUP(0)
:004010AF 00000000000000000000    BYTE 10 DUP(0)
:004010B9 00000000000000000000    BYTE 10 DUP(0)
:004010C3 00000000000000000000    BYTE 10 DUP(0)
:004010CD 00000000000000000000    BYTE 10 DUP(0)
:004010D7 00000000000000000000    BYTE 10 DUP(0)
:004010E1 00000000000000000000    BYTE 10 DUP(0)
:004010EB 00000000000000000000    BYTE 10 DUP(0)
:004010F5 00000000000000000000    BYTE 10 DUP(0)
:004010FF 00000000000000000000    BYTE 10 DUP(0)
:00401109 00000000000000000000    BYTE 10 DUP(0)
:00401113 00000000000000000000    BYTE 10 DUP(0)
:0040111D 00000000000000000000    BYTE 10 DUP(0)
:00401127 00000000000000000000    BYTE 10 DUP(0)
:00401131 00000000000000000000    BYTE 10 DUP(0)
:0040113B 00000000000000000000    BYTE 10 DUP(0)
:00401145 00000000000000000000    BYTE 10 DUP(0)
:0040114F 00000000000000000000    BYTE 10 DUP(0)
:00401159 00000000000000000000    BYTE 10 DUP(0)
:00401163 00000000000000000000    BYTE 10 DUP(0)
:0040116D 00000000000000000000    BYTE 10 DUP(0)
:00401177 00000000000000000000    BYTE 10 DUP(0)
:00401181 00000000000000000000    BYTE 10 DUP(0)
:0040118B 00000000000000000000    BYTE 10 DUP(0)
:00401195 00000000000000000000    BYTE 10 DUP(0)
:0040119F 00000000000000000000    BYTE 10 DUP(0)
:004011A9 00000000000000000000    BYTE 10 DUP(0)
:004011B3 00000000000000000000    BYTE 10 DUP(0)
:004011BD 00000000000000000000    BYTE 10 DUP(0)
:004011C7 00000000000000000000    BYTE 10 DUP(0)
:004011D1 00000000000000000000    BYTE 10 DUP(0)
:004011DB 00000000000000000000    BYTE 10 DUP(0)
:004011E5 00000000000000000000    BYTE 10 DUP(0)
:004011EF 00000000000000000000    BYTE 10 DUP(0)
:004011F9 00000000000000616265    BYTE 10 DUP(0)

构造一个abex.l2c文件,内容任意凑够18个字符完成。
2005-1-18 16:42
0
雪    币: 0
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
思路比较好,值得借鉴。
2005-1-18 16:43
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我想知道是从哪里看出来,要检测是否用光盘的??
我是菜鸟中的菜鸟
2005-1-18 23:32
0
雪    币: 62
活跃值: (41)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
小弟今天第一次学汇编
于是就照猫花虎的按你的程序走了一遍:) 不要见笑
00401049   |.  75 15              jnz short unabexcr.00401060  
我已经把此处的 JNZ 改为JE  用UE 找75 15字段 把75 换成74 然后保存 但是运行后还提示Hmmmmm,I can't find the file!
是什么原因 还是我的操作有错呢

希望大家对我问的问题 不要见笑
2005-1-19 04:54
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
那么你就干脆也把那个跳到找不到文件的跳转修改成nop就可以了
让它顺序执行下去
2005-1-19 09:57
0
雪    币: 169
活跃值: (245)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
7
好简单的一个程序呀!
2005-1-19 18:58
0
雪    币: 237
活跃值: (145)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
8
学习中,对菜鸟帮助还是很大的
2005-1-19 19:53
0
雪    币: 214
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
9
学习,中好教程
2005-1-19 21:56
0
雪    币: 2054
活跃值: (297)
能力值: ( LV9,RANK:220 )
在线值:
发帖
回帖
粉丝
10
呵呵,现在才有时间上网,发现这个帖子成了精华贴,呵呵,还真是有些不好意思.:D ,这几天就贴出第2篇帖子.
2005-1-22 23:53
0
雪    币: 2054
活跃值: (297)
能力值: ( LV9,RANK:220 )
在线值:
发帖
回帖
粉丝
11
回复fxbzn大哥,应该改成jz,不是je
2005-1-23 00:04
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
不错啊。
谢谢
2005-1-23 04:17
0
雪    币: 106728
活跃值: (202444)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
13
原创支持!!!
2005-1-23 12:08
0
雪    币: 162
活跃值: (63)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
14
:) :)
这个教程写的细致而且也不是很难,对于菜菜鸟来说太好了。将这句
00401037   |.  74 3C     je short unabexcr.00401075
改为EB 12 我试了一下好像可以!不知道算不算爆破成功?
2005-1-23 20:17
0
雪    币: 119
活跃值: (11)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
15
现在的软件如果改一个什么 jz jnz 就成.那估计也是什么垃圾了.
不要见怪,不过总认为这样的贴着有蒙的成分在里面.
2005-1-23 22:04
0
游客
登录 | 注册 方可回帖
返回