首页
社区
课程
招聘
[原创]终于找到一个最适合新手的Crackme(算法分析+注册机)
发表于: 2006-7-15 00:06 15413

[原创]终于找到一个最适合新手的Crackme(算法分析+注册机)

2006-7-15 00:06
15413

【文章标题】: 终于找到一个最适合新手的Crackme(算法分析+注册机)
【文章作者】: qwgboy2000
【作者邮箱】: qwgboy2000@126.com
【作者主页】: http://mland.icpcn.com/
【作者QQ号】: 27141459
【软件名称】: AD_CM#2.exe
【软件大小】: 4K
【下载地址】: 自己搜索下载
【加壳方式】: 无
【保护方式】: name、Serial
【编写语言】: MASM32/TASM32
【使用工具】: PEiD、OD
【操作平台】: WINXP
【软件介绍】: 从www.crackme.de上找来的一个简单crackme
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  首先用PEiD查看无壳  ;)
  
  OD载入,熟悉大致流程以后,按下CTRL+N,出现以下部分:
  
  名称位于 AD_CM#2
  地址       区段       类型    (已知)       名称                                    注释
  00402020   .rdata     输入    (已知)           USER32.DialogBoxParamA
  00402018   .rdata     输入    (已知)           USER32.EndDialog
  00402004   .rdata     输入    (已知)           KERNEL32.ExitProcess
  00402010   .rdata     输入    (已知)           USER32.GetDlgItem
  0040200C   .rdata     输入    (已知)           USER32.GetDlgItemTextA         ;应该就是它了
  00402000   .rdata     输入    (已知)           KERNEL32.GetModuleHandleA
  0040201C   .rdata     输入    (已知)           USER32.MessageBoxA
  00402024   .rdata     输入    (已知)           USER32.SendMessageA
  00402014   .rdata     输入    (已知)           USER32.SetFocus
  00401000   .text      输出                   <模块入口点>
  
  看到以上的内容,不难知道下什么断点了
  Command: bpx getdlgitemtexta
  
  按下F9运行程序,输入name和Serial
  我name=qwgboy2000、Serial=7878781234确定以后
  
  中断到了以下关键部分
  
  004010FC  /$  55            push    ebp
  004010FD  |.  8BEC          mov     ebp, esp
  004010FF  |.  6A 14         push    14                             ; /Count = 14 (20.)
  00401101  |.  68 80304000   push    00403080                       ; |Buffer = AD_CM#2.00403080
  00401106  |.  68 B80B0000   push    0BB8                           ; |ControlID = BB8 (3000.)
  0040110B  |.  FF75 08       push    dword ptr [ebp+8]              ; |hWnd
  0040110E  |.  E8 77000000   call    <jmp.&USER32.GetDlgItemTextA>  ; \GetDlgItemTextA
  00401113  |.  8BF0          mov     esi, eax
  00401115  |.  8D01          lea     eax, [ecx]
  00401117  |.  83FE 05       cmp     esi, 5                         ;  比较name是否大于等于5个字符,小于则game over
  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 "qwgboy2000"
  0040114D  |.  BB 80324000   mov     ebx, 00403280                  ;  ASCII "7878781234"
  00401152  |.  8BCE          mov     ecx, esi                       ;  准备循环了,循环次数为name长度
  00401154  |>  8A10          /mov     dl, [eax]                     ;  依次开始从name的第一个字符取起
  00401156  |.  2AD1          |sub     dl, cl                        ;  新字符=原来字符-循环剩下的次数,第一次为name长度
  00401158  |.  3813          |cmp     [ebx], dl                     ;  新字符和Serial的对应字符进行比较
  0040115A  |.  75 18         |jnz     short 00401174                ;  如果不相同,则game over(从这里我们可以知道name和

Serial
  字符长度相同)
  0040115C  |.  40            |inc     eax                           ;  eax=eax+1,为取下一个字符进行下一次的循环运算做好准备
  0040115D  |.  43            |inc     ebx                           ;  ebx=ebx+1,为取下一个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绝对是新手拿来练习的好东东
  
  程序首先判断输入的name长度,只有大于等于5才可以
  且Serial长度和name长度是相等的
  算法很简单:Serial的每个字符=name对应的字符-对应长度
  本人name:qwgboy2000
  那么Serial依次应该为:q-10、w-9、g-8、b-7、o-6、y-5、2-4、0-3、0-2、0-1
  即Serial:gn_[it.-./

  注册机部分如下:
  #include"string.h"
  main()
  {
   char name[32];
   int i,j;
   printf("please input your name:");
   scanf("%s",name);
   i=strlen(name);
   if(i<5)
   {
    printf("Your name must be at least five characters\n");
    printf("please input your name again:");
    scanf("%s",name);
    i=strlen(name);
   }
   printf("your Serial is:");
   for(i;i>=1;i--)
   {
    j=strlen(name)-i;
    printf("%c",name[j]-i);
   }
  }
  以上程序TC2.0调试通过
  
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2006年07月14日 21:52:08


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

上传的附件:
收藏
免费 7
支持
分享
最新回复 (50)
雪    币: 461
活跃值: (93)
能力值: ( LV9,RANK:1170 )
在线值:
发帖
回帖
粉丝
2
很不错,适合新手学习.
2006-7-15 18:05
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
这个例子最适合新手了。

感谢楼主!

还能不能再找写这样难度的例子。
2006-7-15 21:25
0
雪    币: 230
活跃值: (11)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
4
谢谢支持
我会继续找一些适合的
找到就写一下
2006-7-15 21:28
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
适合新手学习,感谢楼主分享!
2006-7-17 09:30
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
顶!・谢谢!慢慢吸收中…………
2006-7-17 14:57
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
顶啊。对我们有用啊
2006-7-18 06:59
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
下来学习一下,感觉现在很难找到适合新手练的CRACKME。
2006-7-18 12:53
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
这个很适合初步学习算法,支持楼主!
2006-7-18 22:13
0
雪    币: 338
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
好的.学习一下!!
2006-7-21 12:36
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
我要下来看看
2006-7-22 18:33
0
雪    币: 212
活跃值: (126)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
果然是新手学习的极品,简单易懂啊!谢谢.
2006-7-22 20:19
0
雪    币: 309
活跃值: (15)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
13
楼主啊~~
这个是偶看你的第二篇拉~~
好严重的支持哦~~
2006-7-23 08:23
0
雪    币: 309
活跃值: (15)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
14
goqq2008
_hkl.-.7
2006-7-23 12:20
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
it realy easy to understand thx
2006-7-23 18:40
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
学习学习学习ing
2006-7-23 22:58
0
雪    币: 63
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
努力学习知识,好像自己的破解能力提高啊!
2006-7-25 16:27
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
谢谢。

这个看懂了。嘿嘿
2006-7-25 17:38
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
我是菜鸟 努力学习~~~~
这个先试试~
2006-7-25 19:53
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
看明白点了.俺也试试

kingmary
cbhbi^px
2006-7-26 06:31
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
新手学习,顶顶顶
2006-7-26 10:04
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
大家加油呀!!!
2006-7-26 23:26
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
新手学习。谢谢顶!
2006-7-26 23:34
0
雪    币: 256
活跃值: (10)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
24
对于菜鸟帮助很大的啊!!
入门难的啊
2006-7-27 07:39
0
雪    币: 333
活跃值: (11)
能力值: ( LV12,RANK:770 )
在线值:
发帖
回帖
粉丝
25
破掉了,谢谢LZ!
2006-8-5 18:35
0
游客
登录 | 注册 方可回帖
返回
//