首页
社区
课程
招聘
菜鸟玩破解~高手就不要来笑话偶了[原创]
发表于: 2006-8-15 18:43 5336

菜鸟玩破解~高手就不要来笑话偶了[原创]

2006-8-15 18:43
5336

我是一只小小小菜鸟,这是我第一次找出了算法,写出了注册机(虽然算法很简单,但是好有成就感啊,呵呵),各位见笑了

【软件名称】 AD_CM#2.exe
【下载地址】 新手博物馆(好象是)
【保护方式】 注册码
【调试环境】 OllyICE v1.10 修改版,PEiD、Visual Basic 6.0
【破解日期】 2006-08-15  
【破解目的】 研究算法分析
【破文作者】 zhangyonf
【作者声明】 初学Crack,只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
【破解内容】
          用PEID查没有加壳,MASM32 / TASM32编写
          首先载入然后运行程序,弹出主窗体,然后查找-》当前模块中的名称用GetDlgItemTextA下断(不知道为什么用字符串参考总是找不出该有的注册码,不是乱码就是什么也没有,我自己用vb写了一个简单的载入依然如此,望高手指导),输入name:zhangzi;serial:123456来到这里:
0040110E  |.  E8 77000000   call    <jmp.&USER32.GetDlgItemTextA>    ; \GetDlgItemTextA这里应该是取name的值
00401113  |.  8BF0          mov     esi, eax                         ;  
00401115  |.  8D01          lea     eax, [ecx]
00401117  |.  83FE 05       cmp     esi, 5
0040111A  |.  7D 18         jge     short 00401134
0040111C  |.  6A 40         push    40                               ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
0040111E  |.  68 12304000   push    00403012                         ; |Title = "ArturDents CrackMe#2"
00401123  |.  68 44304000   push    00403044                         ; |Text = "Your name must be at least five characters long!"
00401128  |.  FF75 08       push    dword ptr [ebp+8]                ; |hOwner
0040112B  |.  E8 60000000   call    <jmp.&USER32.MessageBoxA>        ; \MessageBoxA
00401130  |.  33C0          xor     eax, eax
00401132  |.  EB 40         jmp     short 00401174
00401134  |>  6A 14         push    14                               ; /Count = 14 (20.)
00401136  |.  68 80324000   push    00403280                         ; |Buffer = AD_CM#2.00403280
0040113B  |.  68 B90B0000   push    0BB9                             ; |ControlID = BB9 (3001.)
00401140  |.  FF75 08       push    dword ptr [ebp+8]                ; |hWnd
00401143  |.  E8 42000000   call    <jmp.&USER32.GetDlgItemTextA>    ; \GetDlgItemTextA
                                                                     ;从这里开始才是真正有用的地方
00401148  |.  B8 80304000   mov     eax, 00403080                    ;  ASCII "zhangzi"
0040114D  |.  BB 80324000   mov     ebx, 00403280                     ;  ASCII "123456"
00401152  |.  8BCE          mov     ecx, esi                         ;  用户名的长度
00401154  |>  8A10          /mov     dl, [eax]                       ;  用户名的第一个字符放入dl
00401156  |.  2AD1          |sub     dl, cl                          ;  第一个字符减去用户名的长度
00401158  |.  3813          |cmp     [ebx], dl                       ;  serial 的第一位与减后的值比较
0040115A      75 18         jnz     short 00401174                   ;  不等就over,注册失败
0040115C  |.  40            |inc     eax                             ;  取下一个字符
0040115D  |.  43            |inc     ebx                             ;  取serial的下一位
0040115E  |.^ E2 F4         \loopd   short 00401154                     ;  循环
00401160  |.  6A 40         push    40                               ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
00401162  |.  68 12304000   push    00403012                         ; |Title = "ArturDents CrackMe#2"
00401167  |.  68 27304000   push    00403027                         ; |Text = "Yeah, you did it!"
0040116C  |.  FF75 08       push    dword ptr [ebp+8]                ; |hOwner
0040116F  |.  E8 1C000000   call    <jmp.&USER32.MessageBoxA>        ; \MessageBoxA
00401174  |>  C9            leave
00401175  \.  C2 0400       retn    4
我们不能看出这个crackme的算法就在00401154  处的循环,起算法是分别将name和serial放入eax,ebx,将name的长度放入ecx,然后取出name放入dl,用dl减去ecx的值与serial中的第一个字符比较,不等就跳走,否则继续循环(不要忘记ecx是循环计数器哦),从算法我们可以分析出我们输入的serial只要前n位是正确的serial后面在多数几个字符也无所谓,不知道注册码是不是都这样。应该不是吧。
vb注册机如下:
Private Sub Command1_Click()
Dim length As Integer
Dim serial As String
Dim name As String
Dim i As Integer
i = 1
name = Text1.Text
length = Len(name)
Do While length > 0
    serial = serial & Chr(Asc(Mid(name, i, i)) - length)
    i = i + 1
    length = length - 1
Loop
Text2.Text = serial
End Sub
破解完成,非常简单的算法,高手见笑了,希望能让象我这样的菜鸟入个门,有失误的地方请高手指正。。
感谢看雪提供了这么好的一个平台,让我有机会在这里学习,谢谢!


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 7
支持
分享
最新回复 (4)
雪    币: 443
活跃值: (200)
能力值: ( LV9,RANK:1140 )
在线值:
发帖
回帖
粉丝
2
我们不能看出这个crackme的算法就在00401154  处的循环

----》不能看出又是如何知道的呢?

2006-8-15 20:18
0
雪    币: 214
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
3
见笑了,笔误,是不难看出
2006-8-16 00:36
0
雪    币: 370
活跃值: (78)
能力值: ( LV9,RANK:970 )
在线值:
发帖
回帖
粉丝
4
新人,鼓励一下。第一次就写出注册机,不错。
2006-8-16 08:50
0
雪    币: 263
活跃值: (10)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
5
希望强人越来越多,要鼓励的
2006-8-16 17:34
0
游客
登录 | 注册 方可回帖
返回
//