频道栏目
首页 > 资讯 > 加密解密 > 正文

趣味CRACKME破解分析

06-10-21        来源:[db:作者]  
收藏   我要投稿

【破解工具】OD,计算器
【破解平台】WINXP
【软件简介】Difficulty: 2 - Needs a little brain (or luck)
            Platform: Windows
            Language: Assembler

----------------------------------------------------------------------
CRACKME很有意思,第一次见如此注册方式的CRACKME.分析一下,
根据提示信息很容易找到关键代码。

00401288  /$  55            push    ebp                ;  在这里下断点
00401289  |.  8BEC          mov     ebp, esp
0040128B  |.  81C4 FCFEFFFF add     esp, -104
00401291  |.  C785 FCFEFFFF>mov     dword ptr [ebp-104>
0040129B  |.  68 80000000   push    80                 ; /Count = 80 (128.)
004012A0  |.  8D45 80       lea     eax, [ebp-80]      ; |
004012A3  |.  50            push    eax                ; |Buffer
004012A4  |.  68 ED030000   push    3ED                ; |ControlID = 3ED (1005.)
004012A9  |.  FF35 0C304000 push    dword ptr [40300C] ; |hWnd = 00190644 (b2c_2k5,class=DLGCLASS)
004012AF  |.  E8 3A010000   call    <jmp.&user32.GetDl>; GetDlgItemTextA
004012B4  |.  83F8 05       cmp     eax, 5             ;  注册名位数与5比较
004012B7  |.  0F82 C7000000 jb      00401384           ;  小于5位就跳向失败
004012BD  |.  68 80000000   push    80                 ; /Count = 80 (128.)
004012C2  |.  8D85 00FFFFFF lea     eax, [ebp-100]     ; |
004012C8  |.  50            push    eax                ; |Buffer
004012C9  |.  68 EE030000   push    3EE                ; |ControlID = 3EE (1006.)
004012CE  |.  FF35 0C304000 push    dword ptr [40300C] ; |hWnd = 00190644 (b2c_2k5,class=DLGCLASS)
004012D4  |.  E8 15010000   call    <jmp.&user32.GetDl>; GetDlgItemTextA
004012D9  |.  83F8 08       cmp     eax, 8             ;  注册码位数与8比较
004012DC  |.  0F85 A2000000 jnz     00401384           ;  注册码不等于8位就跳向失败
从这里可以得知:
注册名必须大于5位
注册码必须等于8位

004012E2  |.  8D95 00FFFFFF lea     edx, [ebp-100]     ;  使EDX等于输入的注册码
004012E8  |.  52            push    edx
004012E9  |.  E8 82010000   call    00401470           ;  将输入的注册码转换成对应的大写
004012EE  |.  50            push    eax
004012EF  |.  E8 92000000   call    00401386
004012F4  |.  83F8 00       cmp     eax, 0             ;  输入注册码了吗?
004012F7  |.  0F84 87000000 je      00401384           ;  没有输入注册码就跳向失败
004012FD  |.  33D2          xor     edx, edx           ;  EDX清零,准备开始计算
004012FF  |.  35 33644752   xor     eax, 52476433      ;  XOR (输入的注册码,0x52476433),结果设为A
00401304  |.  35 56244752   xor     eax, 52472456      ;  XOR (A,0x52472456),结果设为B
00401309  |.  2D 00000004   sub     eax, 4000000       ;  B减去0x4000000结果设为C

这是对注册码的处理,先将注册码中小写的部分转换成对应的大写形式。
设输入的注册码为;CODE
则对注册码的处理过程为:XOR [XOR(CODE,0x52476433),0x52472456],
作者:逍遥风
因为XOR(0x52476433,0x52472456)=0x4065

所以:对注册码处理的过程就相当与 XOR (CODE,0x4065)结果设为B

C=B-0x4000000

0040130E  |.  BB 01000000   mov     ebx, 1                ;  使EBX等于1
00401313  |.  C1C3 10       rol     ebx, 10               ;  ROL (EBX,10)
00401316  |.  8D75 80       lea     esi, [ebp-80]         ;  使ESI等于注册名
00401319  |>  803E 00       /cmp     byte ptr [esi], 0
0040131C  |.  74 0D         |je      short 0040132B
0040131E  |.  0FB616        |movzx   edx, byte ptr [esi]  ;  取注册名每一位的ASCII码
00401321  |.  C1C2 10       |rol     edx, 10              ;  ROL (注册名ASCII,10)
00401324  |.  03C2          |add     eax, edx             ;  C与注册名ASCII码累加计算
00401326  |.  2BC3          |sub     eax, ebx             ;  每一次计算的结果减去定值0x10000
00401328  |.  46            |inc     esi                  ;  每计算一次ESI加1
00401329  |.^ EB EE         jmp     short 00401319       ;  循环计算
0040132B  |&

相关TAG标签
上一篇:让Windows XP系统锁定期间拒绝关机
下一篇:按键精灵让QQ登录更快 网游升级更便捷
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站