首页
论坛
课程
招聘
[分享]闲聊新兵入门Crack
2008-1-12 18:47 58247

[分享]闲聊新兵入门Crack

petnt 活跃值
12
2008-1-12 18:47
58247
【文章标题】: 闲聊新兵入门Crack
【文章作者】: petnt
【作者邮箱】: petnt@sohu.com
【作者声明】: 我也是个新兵,我没有能力指导任何人入门。下面仅是个人学习体会,如果你能从中收获点什么,那是我的荣幸。
--------------------------------------------------------------------------------
  你是不是想学破解却又不知从何下手呢?如果你真的是对这些问题感到疑惑的新兵,继续往下看看吧。但如果你是属于下列两种情况,则请三思而行。

  1.你完全不懂破解,但却想通过在论坛上观望10分钟就能破掉某软件的。
  2.你懂一点点破解,想在短时间内破掉某知名软件的。
  
  如果你是想在论坛获取知识却不知道从哪里起步的新兵,请继续跟我走。

  做好任何事情,兴趣是关键,Crack也不例外。如果你是刚刚涉足Crack,也肯定是带着浓厚的兴趣来到这里的。那么接下来的问题,就是如何保持住这种兴趣,一直到你成为一名真正的知识渊博的Cracker。

  要保持住兴趣,一定的激励又成了关键。假想你对某一种工作非常喜欢,但当你很长时间也看不到成果的时候,他在你心目中的位置也会慢慢淡化,这时候的成果就是一种激励。对Cracker的激励当然就是获取到知识的满足感与Crack成功之后的成就感。

  新兵的成就可能对大侠们来说根本就是不屑一提的东西,但对我们新兵来说这却非常重要。好了,我们现在从零开始,去发现对我们来说非常非常重要的1。
  
  在Crack之前,我们最好准备一些东西:基础的汇编知识和调试工具。

  1.基础的汇编知识
  当然,在这里我不是要准备讲解复杂的汇编基础知识,目前来说我没有这个能力:)。如果你学过汇编,那很好,这将是对你来说非常有用的东西,如果你没学过,那也没关系,只要你接触过编程,接触过语言,看懂一个简单汇编程序也根本就不是什么难题(注意简单二字)。什么,你根本就不懂什么是语言?也没关系,Mov\ JMP\Cmp\Je这些命令我们从字面也能了解一个大概。更何况网上有大量的教程存在,你现查现学也能来得及。如果你真的对我所说一个字也听不懂,但又恰好看到了这里,也没关系,你赶紧关了电脑去买彩票吧。或者你跟帖说明,看到后我就会去买彩票。
  
  2.调试工具
  这里推荐最常用的OllyDbg(简称OD),本论坛就有下载。不会用也没关系,因为天生下来就会用的人并不多:),而且论坛里有教程,现学现用慢慢的就熟练了。 

  其实,下面我们不得不面对另一个非常重要的问题:如何选择好我们的对手。有些时候的失败,不是因为我们无能,是对手太强大了。:)
  
  好了,现在假设我们对汇编和调试一窍不通,我们来找个对手。(见附件)
  
  找到“试着爆破我”,先运行看看。打开OD,载入。

00401000 >/$  33C0          xor     eax, eax
00401002  |.  0BC0          or      eax, eax
00401004  |.  74 15         je      short 0040101B
00401006  |.  6A 40         push    40                               ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
00401008  |.  68 00304000   push    00403000                         ; |Title = "提示"
0040100D  |.  68 2E304000   push    0040302E                         ; |Text = ""
00401012  |.  6A 00         push    0                                ; |hOwner = NULL
00401014  |.  E8 1D000000   call    <jmp.&user32.MessageBoxA>        ; \MessageBoxA
00401019  |.  EB 13         jmp     short 0040102E
0040101B  |>  6A 10         push    10                               ; /Style = MB_OK|MB_ICONHAND|MB_APPLMODAL
0040101D  |.  68 00304000   push    00403000                         ; |Title = "提示"
00401022  |.  68 05304000   push    00403005                         ; |Text = ""
00401027  |.  6A 00         push    0                                ; |hOwner = NULL
00401029  |.  E8 08000000   call    <jmp.&user32.MessageBoxA>        ; \MessageBoxA
0040102E  |>  6A 00         push    0                                ; /ExitCode = 0
00401030  \.  E8 07000000   call    <jmp.&kernel32.ExitProcess>      ; \ExitProcess

  你可以查一查前3行指令是什么意思,不管你懂不懂,下面跟着我做。双击je short 0040101B 将je 改成jnz,汇编。右键->复制到可执行文件->所有修改->全部复制。右键->保存文件,另外一个文件名保存。关掉OD,运行我们保存的文件,看到变化了吗?

  这就是传说中的“爆破”,呵呵。或许你说这来的太简单了,可爆破的原理就是这样,找到关键的比较跳转,然后改掉它。是不是理解呢?其实其他软件也是如此,只不过我们并不能很容易就发现他的关键跳转。

  现在假设你已经理解了我上面所说的,下面请出一个稍微复杂的对手:-) 。(见附件)。
  
  找到CrackMe,先运行看看。打开OD,载入。
  
  Command栏中输入 bpx MessageBoxA (注意大小写),F9运行,随便输入用户名,注册码,点击注册。程序被断了下来,上下翻翻程序,找到爆破点对你来说还难吗?

00401000  /$  55            push    ebp
00401001  |.  8BEC          mov     ebp, esp
00401003  |.  83C4 D8       add     esp, -28
00401006  |.  57            push    edi
00401007  |.  837D 0C 01    cmp     dword ptr [ebp+C], 1
0040100B  |.  73 18         jnb     short 00401025
0040100D  |.  6A 00         push    0                                ; /Style = MB_OK|MB_APPLMODAL
0040100F  |.  68 30304000   push    00403030                         ; |提示
00401014  |.  68 35304000   push    00403035                         ; |用户名不能为空!
00401019  |.  6A 00         push    0                                ; |hOwner = NULL
0040101B  |.  E8 36030000   call    <jmp.&user32.MessageBoxA>        ; \MessageBoxA
00401020  |.  5F            pop     edi
00401021  |.  C9            leave
00401022  |.  C2 1400       retn    14
00401025  |>  8B75 08       mov     esi, dword ptr [ebp+8]
00401028  |.  8D7D D8       lea     edi, dword ptr [ebp-28]
0040102B  |.  33C9          xor     ecx, ecx
0040102D  |.  8B45 0C       mov     eax, dword ptr [ebp+C]
00401030  |.  C60438 00     mov     byte ptr [eax+edi], 0
00401034  |.  EB 0A         jmp     short 00401040
00401036  |>  0FB60431      /movzx   eax, byte ptr [ecx+esi]
0040103A  |.  04 01         |add     al, 1
0040103C  |.  880439        |mov     byte ptr [ecx+edi], al
0040103F  |.  41            |inc     ecx
00401040  |>  3B4D 0C        cmp     ecx, dword ptr [ebp+C]
00401043  |.^ 72 F1         \jb      short 00401036
00401045  |.  FF75 10       push    dword ptr [ebp+10]               ; /String2
00401048  |.  8D45 D8       lea     eax, dword ptr [ebp-28]          ; |
0040104B  |.  50            push    eax                              ; |String1      *
0040104C  |.  E8 47030000   call    <jmp.&kernel32.lstrcmpA>         ; \lstrcmpA
00401051  |.  0BC0          or      eax, eax
00401053  |.  75 15         jnz     short 0040106A                   ;  *
00401055  |.  6A 00         push    0                                ; /Style = MB_OK|MB_APPLMODAL
00401057  |.  68 30304000   push    00403030                         ; |提示
0040105C  |.  68 46304000   push    00403046                         ; |恭喜你,注册成功!
00401061  |.  6A 00         push    0                                ; |hOwner = NULL
00401063  |.  E8 EE020000   call    <jmp.&user32.MessageBoxA>        ; \MessageBoxA
00401068  |.  EB 13         jmp     short 0040107D
0040106A  |>  6A 00         push    0                                ; /Style = MB_OK|MB_APPLMODAL
0040106C  |.  68 30304000   push    00403030                         ; |提示
00401071  |.  68 59304000   push    00403059                         ; |注册失败,请继续努力!
00401076  |.  6A 00         push    0                                ; |hOwner = NULL
00401078  |.  E8 D9020000   call    <jmp.&user32.MessageBoxA>        ; \MessageBoxA
0040107D  |>  33C0          xor     eax, eax
0040107F  |.  5F            pop     edi
00401080  |.  C9            leave
00401081  \.  C2 1400       retn    14

  
  在其他地方下断试试,F8单步跟踪试试,能发现正确的注册码吗?

  是的,对付这个CrackMe对你来说就是这样的易如反掌。慢慢去明白原理,慢慢的增加难度,展现在你面前的就是一个精彩的世界。

【后    记】: 

  其实如何让我们这样的新兵产生兴趣并尽快入门,不但是我等新兵的个人进步问题,更是事关论坛长远发展的重要问题。初练CrackMe,就是对着破文练,有时候也不得要领,又经常看到新兵看似束手无策的发问,故写了两个简单的程序和此文。如果此文能恰巧留住一个新兵的脚步,也算是为我忠爱的论坛作了一点点的贡献。

【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2008年01月12日 14:39:23

[招生]科锐逆向工程师培训46期预科班将于 2023年02月09日 正式开班

上传的附件:
收藏
点赞0
打赏
分享
最新回复 (205)
雪    币: 202
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
隐逸者 活跃值 2008-1-12 19:31
2
0
对于任何一样东西都要认真才行
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
lunglungyu 活跃值 1 2008-1-12 19:40
3
0
弄出來了
lunglungyu
mvohmvohzv

00401001  |.  8BEC          mov     ebp, esp
00401003  |.  83C4 D8       add     esp, -28
00401006  |.  57            push    edi
00401007  |.  837D 0C 01    cmp     dword ptr [ebp+C], 1             ;  用戶名必須大於2
0040100B  |.  73 18         jnb     short 00401025                   ;  跳
0040100D  |.  6A 00         push    0                                ; /Style = MB_OK|MB_APPLMODAL
0040100F  |.  68 30304000   push    00403030                         ; |提示
00401014  |.  68 35304000   push    00403035                         ; |用户名不能为空!
00401019  |.  6A 00         push    0                                ; |hOwner = NULL
0040101B  |.  E8 36030000   call    <jmp.&user32.MessageBoxA>        ; \MessageBoxA
00401020  |.  5F            pop     edi
00401021  |.  C9            leave
00401022  |.  C2 1400       retn    14
00401025  |>  8B75 08       mov     esi, dword ptr [ebp+8]
00401028  |.  8D7D D8       lea     edi, dword ptr [ebp-28]          ;  用戶名到ESI
0040102B  |.  33C9          xor     ecx, ecx                         ;  清空ECX
0040102D  |.  8B45 0C       mov     eax, dword ptr [ebp+C]           ;  用戶名位数 入eax
00401030  |.  C60438 00     mov     byte ptr [eax+edi], 0
00401034  |.  EB 0A         jmp     short 00401040
00401036  |>  0FB60431      /movzx   eax, byte ptr [ecx+esi]         ;  ..开始计算
0040103A  |.  04 01         |add     al, 1
0040103C  |.  880439        |mov     byte ptr [ecx+edi], al
0040103F  |.  41            |inc     ecx
00401040  |>  3B4D 0C        cmp     ecx, dword ptr [ebp+C]          ;  數是否比用戶名短
00401043  |.^ 72 F1         \jb      short 00401036                  ;  继续。。   用USERNAME弄KEY的。。我的给弄成mvohmvohzv了
00401045  |.  FF75 10       push    dword ptr [ebp+10]               ; /弄pass了
00401048  |.  8D45 D8       lea     eax, dword ptr [ebp-28]          ; |
0040104B  |.  50            push    eax                              ; |String1
0040104C  |.  E8 47030000   call    <jmp.&kernel32.lstrcmpA>         ; \lstrcmpA
00401051  |.  0BC0          or      eax, eax
00401053  |.  75 15         jnz     short 0040106A
00401055  |.  6A 00         push    0                                ; /Style = MB_OK|MB_APPLMODAL
00401057  |.  68 30304000   push    00403030                         ; |提示
0040105C  |.  68 46304000   push    00403046                         ; |恭喜你,注册成功!
00401061  |.  6A 00         push    0                                ; |hOwner = NULL
00401063  |.  E8 EE020000   call    <jmp.&user32.MessageBoxA>        ; \MessageBoxA
00401068  |.  EB 13         jmp     short 0040107D
0040106A  |>  6A 00         push    0                                ; /Style = MB_OK|MB_APPLMODAL
0040106C  |.  68 30304000   push    00403030                         ; |提示
00401071  |.  68 59304000   push    00403059                         ; |注册失败,请继续努力!
00401076  |.  6A 00         push    0                                ; |hOwner = NULL
00401078  |.  E8 D9020000   call    <jmp.&user32.MessageBoxA>        ; \MessageBoxA
0040107D  |>  33C0          xor     eax, eax
雪    币: 367
活跃值: 活跃值 (12)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
petnt 活跃值 12 2008-1-12 19:49
4
0
呵呵,希望能给你们带来快乐
雪    币: 202
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
隐逸者 活跃值 2008-1-12 19:54
5
0
想要请教一下、。。假如想要分析病毒需要具备什么条件。。。虽然已经搜索过了。。。但是一般都很零散。。。
雪    币: 367
活跃值: 活跃值 (12)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
petnt 活跃值 12 2008-1-12 20:03
6
0
首先需要的应该是 虚拟机或影子系统吧 安全是最重要的
其他就没什么吧,和分析普通程序一样吧.不过病毒一般都有壳.
我虽然打包了几个病毒样本,可一直都没分析过
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
lunglungyu 活跃值 1 2008-1-12 20:03
7
0
懂病毒通常会调用的API。。。。函数
脱壳。。病毒会加 强壳 以防被ANTIVIRUS公司调试
调试器的运用要熟,巧
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
vipdiy 活跃值 2008-1-12 20:44
8
0
呵呵 第一次在论坛发言 一直断断续续的学习破解 唉 没时间啊 兴趣很浓啊 看了刚刚的那个TEST  算法是找到了 真的是激动啊  算法就是 :
00401036  |>  0FB60431      /movzx   eax, byte ptr [ecx+esi]         这里开始 取用户名第一位
0040103A  |.  04 01         |add     al, 1                             取出的用户名加1
0040103C  |.  880439        |mov     byte ptr [ecx+edi], al   把算出来的密码放了指定内存地址
0040103F  |.  41            |inc     ecx      取用户名下一个字符
00401040  |>  3B4D 0C        cmp     ecx, dword ptr [ebp+C]  累加器和输入用户名长度比较 这里实现循环结束         
00401043  |.^ 72 F1         \jb      short 00401036  返回取用户名处
第一次 写的不好的地方 请多多指教!(^_^)……
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wofeixiang 活跃值 2008-1-12 20:54
9
0
发奋从头开始!
先了解下汇编—〉工具使用—〉汇编—〉工具—〉再来敲敲门!
雪    币: 231
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
adxy 活跃值 2008-1-12 21:30
10
0
一直想学  但时间较少啊
雪    币: 536
活跃值: 活跃值 (10)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
蚊香 活跃值 3 2008-1-12 23:44
11
0
学习一下  慢慢看。。
雪    币: 367
活跃值: 活跃值 (12)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
petnt 活跃值 12 2008-1-14 08:27
12
0
[QUOTE=vipdiy;404474]呵呵 第一次在论坛发言 一直断断续续的学习破解 唉 没时间啊 兴趣很浓啊 看了刚刚的那个TEST  算法是找到了 真的是激动啊  算法就是 :
00401036  |>  0FB60431      /movzx   eax, byte ptr [ecx+esi]         这里开始 ...[/QUOTE]
你的收获就是我的荣幸
雪    币: 522
活跃值: 活跃值 (186)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
笨笨雄 活跃值 14 2008-1-14 09:07
13
0
难得的热心人啊
雪    币: 367
活跃值: 活跃值 (12)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
petnt 活跃值 12 2008-1-14 09:19
14
0
哈哈,得到斑竹关注了。。。。

您的鼓励,就是我的动力,我学习,学习,再学习!!!!
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
taitai欧 活跃值 2008-1-14 09:25
15
0
非常棒的贴子,虽然本身对Crack这方面比较感兴趣,但限于底子问题一直停留在初学阶段,这样的贴子对刚入门的很多朋友都有较大的帮助.
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ford 活跃值 2008-1-14 09:48
16
0
谢谢LZ,正需要这样的文章!
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
pigstock 活跃值 2008-1-14 13:02
17
0
刚刚学习,十分感谢
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
tankbike 活跃值 2008-1-14 14:59
18
0
谢谢,学习了~~~~~
雪    币: 111
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
许晴 活跃值 2008-1-14 15:52
19
0
哇,辛苦了,还有教程呢,我买书了,在家慢慢研究。
雪    币: 200
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
JoinR 活跃值 2008-1-14 16:42
20
0
不知道当"人人会crack"的时代到来,会是个什么样子....
雪    币: 48866
活跃值: 活跃值 (171549)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
linhanshi 活跃值 2008-1-14 23:31
21
0
希望能持续下去.Thanks.
雪    币: 95
活跃值: 活跃值 (450)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
frozenrain 活跃值 2008-1-14 23:48
22
0
确实很简单 我也跟出来了呵呵
雪    币: 227
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
fatalerror 活跃值 2008-1-15 10:10
23
0
呵呵,提高新人兴趣和信心的好贴.谢谢lz.
算法那块前面已经贴出来了。lstrcmpA函数后的jnz是爆破点。在lstrcmpA函数中也明码比较了sn.
大家一起进步!~
雪    币: 134
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yuruozhou 活跃值 2008-1-15 10:26
24
0
噢噢噢,谢lz了,至少留住我了
要好好学习了,好歹先去了解下汇编...
雪    币: 157
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
河边渔者 活跃值 1 2008-1-15 11:48
25
0
增强信心了!谢谢楼主!
游客
登录 | 注册 方可回帖
返回