中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 看雪学院专区 > CrackMe
终于找到一个最适合新手的Crackme(算法分析+注册机)
作者:佚名 时间:2006-12-15 10:45 出处:pediy.com 责编:月夜寒箫
              摘要:终于找到一个最适合新手的Crackme(算法分析+注册机)
【文章标题】: 终于找到一个最适合新手的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
所上传文件
ad_cm#2.rar (上传时间2006-07-15,00:06,1.5 KB,286 次点击)
关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有