首页
社区
课程
招聘
[原创]一个CNCG的CrackMe注册分析
发表于: 2007-12-26 12:34 5756

[原创]一个CNCG的CrackMe注册分析

2007-12-26 12:34
5756
【文章标题】: 一个CNCG的CrackMe注册分析
【文章作者】: CuteSnail
【作者QQ号】: 121567771
【作者声明】: 只是感兴趣的自娱自乐,没有其他目的。失误之处还要敬请诸位大侠赐教!
-------------------------------------------------------------------------------
【详细过程】

  使用OD载入该程序后运行它,然后输入假的 注册名: 1 和 注册码: 2, 然后字符串参考: '请输入用户名或注册码'后,来到了这里:
      
  
  00466EF0  /.  55                push    ebp
  00466EF1  |.  8BEC              mov     ebp, esp
  00466EF3  |.  6A 00             push    0
  00466EF5  |.  53                push    ebx
  00466EF6  |.  8BD8              mov     ebx, eax
  00466EF8  |.  33C0              xor     eax, eax
  00466EFA  |.  55                push    ebp
  00466EFB  |.  68 666F4600       push    CNCG.00466F66
  00466F00  |.  64:FF30           push    dword ptr fs:[eax]
  00466F03  |.  64:8920           mov     dword ptr fs:[eax], esp
  00466F06  |.  8D55 FC           lea     edx, dword ptr [ebp-4]
  00466F09  |.  8B83 F8020000     mov     eax, dword ptr [ebx+2F8]
  00466F0F  |.  E8 543EFDFF       call    CNCG.0043AD68                  ;  得到注册名的长度
  00466F14  |.  837D FC 00        cmp     dword ptr [ebp-4], 0           ;  比较是否为空
  00466F18  |.  75 12             jnz     short CNCG.00466F2C            ;  不为空,跳走
  00466F1A  |.  BA 7C6F4600       mov     edx, CNCG.00466F7C             ;  请输入用户名或注册码
  00466F1F  |.  8B83 28030000     mov     eax, dword ptr [ebx+328]
  00466F25  |.  E8 7E3EFDFF       call    CNCG.0043ADA8
  00466F2A  |.  EB 24             jmp     short CNCG.00466F50
  00466F2C  |>  8BC3              mov     eax, ebx
  00466F2E  |.  E8 45FDFFFF       call    CNCG.00466C78                  ;  关键算法,需要进入
  00466F33  |.  84C0              test    al, al                         ;  al and al 的结果是否为0
  00466F35  |.  74 09             je      short CNCG.00466F40            ;  为0,跳走,不成功
  00466F37  |.  8BC3              mov     eax, ebx
  00466F39  |.  E8 C2FBFFFF       call    CNCG.00466B00                  ;  注册成功信息
  00466F3E  |.  EB 10             jmp     short CNCG.00466F50
  
  
  进入到: 00466F2E 的关键 call 中后:
      
      
  00466C78  /$  55                push    ebp
  00466C79  |.  8BEC              mov     ebp, esp
  00466C7B  |.  33C9              xor     ecx, ecx
  00466C7D  |.  51                push    ecx
  00466C7E  |.  51                push    ecx
  00466C7F  |.  51                push    ecx
  00466C80  |.  51                push    ecx
  00466C81  |.  51                push    ecx
  00466C82  |.  51                push    ecx
  00466C83  |.  51                push    ecx
  00466C84  |.  51                push    ecx
  00466C85  |.  53                push    ebx
  00466C86  |.  56                push    esi
  00466C87  |.  8945 FC           mov     dword ptr [ebp-4], eax
  00466C8A  |.  33C0              xor     eax, eax
  00466C8C  |.  55                push    ebp
  00466C8D  |.  68 076E4600       push    CNCG.00466E07
  00466C92  |.  64:FF30           push    dword ptr fs:[eax]
  00466C95  |.  64:8920           mov     dword ptr fs:[eax], esp
  00466C98  |.  33C0              xor     eax, eax
  00466C9A  |.  8945 F4           mov     dword ptr [ebp-C], eax         ;  初始化dword ptr [ebp-C]变量
  00466C9D  |.  68 206E4600       push    CNCG.00466E20                  ;  'The CNCG Crackme CrackED BY '
  00466CA2  |.  8D55 EC           lea     edx, dword ptr [ebp-14]
  00466CA5  |.  8B45 FC           mov     eax, dword ptr [ebp-4]
  00466CA8  |.  8B80 F8020000     mov     eax, dword ptr [eax+2F8]
  00466CAE  |.  E8 B540FDFF       call    CNCG.0043AD68
  00466CB3  |.  FF75 EC           push    dword ptr [ebp-14]
  00466CB6  |.  68 486E4600       push    CNCG.00466E48                  ;  ' [CNCG]'
  00466CBB  |.  8D45 F8           lea     eax, dword ptr [ebp-8]
  00466CBE  |.  BA 03000000       mov     edx, 3
  00466CC3  |.  E8 08D9F9FF       call    CNCG.004045D0                  ;  'The CNCG Crackme CrackED BY ' + 注册名 + ' [CNCG]'
  00466CC8  |.  8B45 F8           mov     eax, dword ptr [ebp-8]         ;  连接后的字符串地址 送到 eax
  00466CCB  |.  E8 40D8F9FF       call    CNCG.00404510
  00466CD0  |.  8BF0              mov     esi, eax
  00466CD2  |.  85F6              test    esi, esi
  00466CD4  |.  7E 35             jle     short CNCG.00466D0B
  00466CD6  |.  BB 01000000       mov     ebx, 1                         ;  计数初始化
  00466CDB  |>  8D45 E8           /lea     eax, dword ptr [ebp-18]
  00466CDE  |.  50                |push    eax
  00466CDF  |.  B9 01000000       |mov     ecx, 1
  00466CE4  |.  8BD3              |mov     edx, ebx
  00466CE6  |.  8B45 F8           |mov     eax, dword ptr [ebp-8]        ;  上面连接后的新字符串
  00466CE9  |.  E8 7ADAF9FF       |call    CNCG.00404768
  00466CEE  |.  8B45 E8           |mov     eax, dword ptr [ebp-18]
  00466CF1  |.  E8 12DAF9FF       |call    CNCG.00404708
  00466CF6  |.  8A00              |mov     al, byte ptr [eax]            ;  依次取新字符串得每一位字符码 送 al
  00466CF8  |.  25 FF000000       |and     eax, 0FF                      ;  与 0xFF 作 与 运算
  00466CFD  |.  0145 F4           |add     dword ptr [ebp-C], eax        ;  依次累加到变量中
  00466D00  |.  71 05             |jno     short CNCG.00466D07           ;  不溢出,跳走
  00466D02  |.  E8 25C7F9FF       |call    CNCG.0040342C
  00466D07  |>  43                |inc     ebx                           ;  指向新字符串的下一字符
  00466D08  |.  4E                |dec     esi                           ;  计数减少1
  00466D09  |.^ 75 D0             \jnz     short CNCG.00466CDB
  00466D0B  |>  8D55 F0           lea     edx, dword ptr [ebp-10]        ;  我这里[ebp-C]的结果:0ABE(注册名为:1时)
  00466D0E  |.  8B45 FC           mov     eax, dword ptr [ebp-4]
  00466D11  |.  8B80 FC020000     mov     eax, dword ptr [eax+2FC]
  00466D17  |.  E8 4C40FDFF       call    CNCG.0043AD68
  00466D1C  |.  8D55 E4           lea     edx, dword ptr [ebp-1C]
  00466D1F  |.  8B45 FC           mov     eax, dword ptr [ebp-4]
  00466D22  |.  8B80 FC020000     mov     eax, dword ptr [eax+2FC]
  00466D28  |.  E8 3B40FDFF       call    CNCG.0043AD68                  ;  读入注册码
  00466D2D  |.  8B45 E4           mov     eax, dword ptr [ebp-1C]        ;  地址送 eax
  00466D30  |.  E8 D3D9F9FF       call    CNCG.00404708
  00466D35  |.  E8 461FFAFF       call    CNCG.00408C80                  ;  得到注册码长度
  00466D3A  |.  85C0              test    eax, eax
  00466D3C  |.  79 05             jns     short CNCG.00466D43            ;  注册码长度是否为空
  00466D3E  |.  E8 E1C6F9FF       call    CNCG.00403424
  00466D43  |>  8BF0              mov     esi, eax
  00466D45  |.  85F6              test    esi, esi
  00466D47  |.  7E 4A             jle     short CNCG.00466D93            ;  为空,跳走
  00466D49  |.  BB 01000000       mov     ebx, 1                         ;  计数初始化
  00466D4E  |>  8B45 F0           /mov     eax, dword ptr [ebp-10]       ;  注册码
  00466D51  |.  4B                |dec     ebx
  00466D52  |.  85C0              |test    eax, eax                      ;  注册码是否为空
  00466D54  |.  74 05             |je      short CNCG.00466D5B           ;  为空,跳走
  00466D56  |.  3B58 FC           |cmp     ebx, dword ptr [eax-4]        ;  注册码长度是否为0
  00466D59  |.  72 05             |jb      short CNCG.00466D60           ;  不为0,跳走
  00466D5B  |>  E8 C4C6F9FF       |call    CNCG.00403424
  00466D60  |>  43                |inc     ebx                           ;  ebx 增加1
  00466D61  |.  8A4418 FF         |mov     al, byte ptr [eax+ebx-1]      ;  依次取注册名码值 送 al
  00466D65  |.  3C 30             |cmp     al, 30                        ;  与0比较
  00466D67  |.  0F92C0            |setb    al                            ;  小于,出错
  00466D6A  |.  8B55 F0           |mov     edx, dword ptr [ebp-10]
  00466D6D  |.  4B                |dec     ebx
  00466D6E  |.  85D2              |test    edx, edx
  00466D70  |.  74 05             |je      short CNCG.00466D77
  00466D72  |.  3B5A FC           |cmp     ebx, dword ptr [edx-4]        ;  注册码长度是否为0
  00466D75  |.  72 05             |jb      short CNCG.00466D7C           ;  不为0,跳走
  00466D77  |>  E8 A8C6F9FF       |call    CNCG.00403424
  00466D7C  |>  43                |inc     ebx                           ;  ebx 增加1
  00466D7D  |.  8A541A FF         |mov     dl, byte ptr [edx+ebx-1]      ;  依次取注册名码值 送 al
  00466D81  |.  80FA 39           |cmp     dl, 39                        ;  与9比较
  00466D84  |.  0F97C2            |seta    dl                            ;  大于,出错
  00466D87  |.  0AC2              |or      al, dl
  00466D89  |.  74 04             |je      short CNCG.00466D8F
  00466D8B  |.  33DB              |xor     ebx, ebx
  00466D8D  |.  EB 3D             |jmp     short CNCG.00466DCC
  00466D8F  |>  43                |inc     ebx
  00466D90  |.  4E                |dec     esi
  00466D91  |.^ 75 BB             \jnz     short CNCG.00466D4E           ;  这个循环是要注册码必须是0~9之间的字符
  00466D93  |>  8D55 E0           lea     edx, dword ptr [ebp-20]
  00466D96  |.  8B45 FC           mov     eax, dword ptr [ebp-4]
  00466D99  |.  8B80 FC020000     mov     eax, dword ptr [eax+2FC]
  00466D9F  |.  E8 C43FFDFF       call    CNCG.0043AD68
  00466DA4  |.  8B45 E0           mov     eax, dword ptr [ebp-20]
  00466DA7  |.  E8 A01AFAFF       call    CNCG.0040884C                  ;  这个call将注册码的字符串转为了16进制数值 送 eax
  00466DAC  |.  3B45 F4           cmp     eax, dword ptr [ebp-C]         ;  比较注册名的运算结果 和 注册码
  00466DAF      75 19             jnz     short CNCG.00466DCA            ;  相等,不跳,成功
  00466DB1  |.  B3 01             mov     bl, 1
  00466DB3  |.  B8 58AC4600       mov     eax, CNCG.0046AC58
  00466DB8  |.  8B55 F8           mov     edx, dword ptr [ebp-8]
  00466DBB  |.  E8 ECD4F9FF       call    CNCG.004042AC
  00466DC0  |.  8B45 F4           mov     eax, dword ptr [ebp-C]
  00466DC3  |.  A3 5CAC4600       mov     dword ptr [46AC5C], eax
  00466DC8  |.  EB 02             jmp     short CNCG.00466DCC
  00466DCA  |>  33DB              xor     ebx, ebx
  00466DCC  |>  33C0              xor     eax, eax
  

  从上面,便知道这个程序的运算就是:
  将 字符串'The CNCG Crackme CrackED BY ' 连接上 (注册名) 再连接上 字符串' [CNCG]' 后,得到一个新的字符串,然后依次取这个字符串的ASCII码值,循环累加后得到一个数值,放入到[ebp-C]所指的变量处,然后读入注册码,如果注册码的大小与这个数值相等,就注册成功了,那么当我的注册名是1时,我的正确注册码就是: 2750 了, 哈哈 ^_^
      
  成功的注册信息:
      
  注册名: 1
  注册码: 2750
  
-----------------------------------------------------------------------------------
【版权声明】: 本文由 CuteSnail 原创, 转载请注明作者并保持文章的完整性, 谢谢! 再见!!

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 259
活跃值: (10)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
2
精华文章提前占沙发,
2007-12-27 01:28
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我怎么找不到“请输入用户名或注册码”,也找不到“注册码不准确,无法注册”
2007-12-27 12:15
0
游客
登录 | 注册 方可回帖
返回
//