中国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
Duelist's Crackme #3的算法分析+注册机
作者:佚名 时间:2006-12-15 10:51 出处:pediy.com 责编:月夜寒箫
              摘要:Duelist's Crackme #3的算法分析+注册机
【文章标题】: Duelist's Crackme #3的算法分析+注册机
【文章作者】: bxm
【作者邮箱】: bxm78@163.com
【下载地址】: 自己搜索下载
【加壳方式】: 无
【保护方式】: 矩阵
【编写语言】: MASM32 / TASM32 [覆盖]
【使用工具】: od,peid,计算器
【操作平台】: winxp
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  检查,用出错提示your registration info is invalid... please support shareware authors by buying software!向上查找,下断在[00401117]:
  00401117   > /33F6          xor     esi, esi                       ;  清0
  00401119   . |33D2          xor     edx, edx
  0040111B   . |8935 5E214000 mov     [40215E], esi
  00401121   . |8935 62214000 mov     [402162], esi
  00401127   > |0FBE8E FE2040>movsx   ecx, byte ptr [esi+4020FE]     ;  [ESI+4020FE]的字符入ECX
  0040112E   . |83F9 4D       cmp     ecx, 4D                        ;  ECX=4D ?
  00401131   . |74 2F         je      short 00401162                 ;  相等,读取完毕,跳
  00401133   . |890D 5E214000 mov     [40215E], ecx                  ;  ECX存入[40215E]
  00401139   . |51            push    ecx                            ; /ButtonID
  0040113A   . |FF75 08       push    dword ptr [ebp+8]              ; |hWnd
  0040113D   . |E8 D0010000   call    <jmp.&USER32.IsDlgButtonChecke>; \IsDlgButtonChecked
  00401142   . |46            inc     esi                            ;  ESI+1
  00401143   . |83F8 00       cmp     eax, 0                         ;  EAX为按钮的返回值,选中返回1,否则返回0
  00401146   .^|74 DF         je      short 00401127
  00401148   . |A1 5E214000   mov     eax, [40215E]                  ;  [40215E]入EAX
  0040114D   . |0FBE8E FE2040>movsx   ecx, byte ptr [esi+4020FE]     ;  [ESI+4020FE]的字符入ECX
  00401154   . |0FAFC1        imul    eax, ecx                       ;  EAX*ECX
  00401157   . |0FAFC6        imul    eax, esi                       ;  EAX*ESI
  0040115A   . |0105 62214000 add     [402162], eax                  ;  累加于[402162]
  00401160   .^|EB C5         jmp     short 00401127
  00401162   > |A1 62214000   mov     eax, [402162]                  ;  累加和入EAX
  00401167   . |6BC0 4D       imul    eax, eax, 4D                   ;  EAX*4D
  0040116A   . |3D 6654F300   cmp     eax, 0F35466                   ;  EAX=0F35466 ?
  0040116F   . |75 20         jnz     short 00401191                 ;  不等,则完蛋,否则,成功
  00401171   . |68 00200000   push    2000                           ; /Style = MB_OK|MB_TASKMODAL
  00401176   . |68 01204000   push    00402001                       ; |duelist's crackme #3
  0040117B   . |68 17204000   push    00402017                       ; |congratulations! please send a screenshot of your solution to duelist@beer.com!
  00401180   . |6A 00         push    0                              ; |hOwner = NULL
  00401182   . |E8 55010000   call    <jmp.&USER32.MessageBoxA>      ; \MessageBoxA
  00401187   . |B8 01000000   mov     eax, 1
  0040118C   .^|E9 69FFFFFF   jmp     004010FA
  00401191   > |68 00200000   push    2000                           ; /Style = MB_OK|MB_TASKMODAL
  00401196   . |68 01204000   push    00402001                       ; |duelist's crackme #3
  0040119B   . |68 68204000   push    00402068                       ; |your registration info is invalid... please support shareware authors by buying software!
  004011A0   . |6A 00         push    0                              ; |hOwner = NULL
  004011A2   . |E8 35010000   call    <jmp.&USER32.MessageBoxA>      ; \MessageBoxA
  算法比较简单,地址[4020FE]处为一个19个字节的表0x16, 0x49, 0x5E, 0x15, 0x27, 0x26, 0x21, 0x25, 0x1D, 0x59, 0x53, 0x37, 0x31, 0x48, 0x5D, 0x0C, 0x61, 0x52, 0x4D。
  进一步跟踪发现各按钮对应的代号,为了和注册机一致,我把每个代号都减了1,18个按钮的代号如下:
  16  1   2   0   7   5   6  9  10
  3  11  12  13  14  15  17  4  8  
  如我用注册机算出的一个号码为25726,转化为二进制110010001111110,把对应1位的选中就可以了,如
   
  注册机源码如下:
  #include<iostream.h>
  void main()
  {
    long unsigned loop=262143;
    long unsigned i,itemp,EAX,count,sum;
    char table[19]={0x16, 0x49, 0x5E, 0x15, 0x27, 0x26, 0x21, 0x25, 0x1D, 0x59, 0x53, 0x37, 0x31, 
  
      0x48, 0x5D, 0x0C, 0x61, 0x52, 0x4D};
    for(i=0;i<loop;i++)
    {
      sum=0;
      count=0;itemp=i;
      do
      {
        if(itemp%2==1){EAX=table[count]*table[count+1]*(count+1);sum+=EAX;}
        count++;
        itemp/=2;
      }
      while(itemp);
      if(sum*0x4d==0xf35466)
      {
        cout<<i<<endl;
      }
    }
  }
  我只找到了一个正确答案,可能也只有一个正确答案。
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2006年08月10日 下午 11:26:39
所上传文件
due-cm3.rar (上传时间2006-08-10,23:32,3.3 KB,23 次点击)
关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有