吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 9518|回复: 5
收起左侧

[原创] CompareDWG for AutoCAD 2006-2011算法分析及算法注册机

[复制链接]
zaas 发表于 2010-9-6 21:46
【破文标题】CompareDWG for AutoCAD 2006-2011算法分析及算法注册机
【破文作者】zaas[PYG]
破解工具】OllyICE,PEiD v0.94
【破解平台】WinXP
【软件类别】:汉化补丁/CAD 图形
【软件授权】:共享版
【软件介绍】:CompareDWG 是用来比较两个DWG图形之间差异的工具,用它可以非常快速的找出两个图形文件的不同之处,并用不同的颜色标注出来,还可以生成详细的报表,让你对图形的变动一目了然。此软件对于图纸被他人修改过后却苦于无法找出被修改的地方非常有用。
【破解声明】我是一只小菜鸟,偶得一点心得,愿与大家分享
--------------------------------------------------------------
【破解内容】
--------------------------------------------------------------
这个是autocad下的二次开发软件。打开Autocad,OD附加。发现如果输入的注册码不对的话,软件的保存注册码按钮是灰色的。
Snap1.gif
因此下enablewindow断点。断下,返回在
0D094740  /nbsp; 55            push    ebp
0D094741  |.  8BEC          mov     ebp, esp
0D094743  |.  6A FF         push    -1
0D094745  |.  68 04770A0D   push    0D0A7704
0D09474A  |.  64:A1 0000000>mov     eax, dword ptr fs:[0]
0D094750  |.  50            push    eax
0D094751  |.  83EC 48       sub     esp, 48
0D094754  |.  A1 603B0B0D   mov     eax, dword ptr [D0B3B60]
0D094759  |.  33C5          xor     eax, ebp
0D09475B  |.  50            push    eax
0D09475C  |.  8D45 F4       lea     eax, dword ptr [ebp-C]
0D09475F  |.  64:A3 0000000>mov     dword ptr fs:[0], eax
0D094765  |.  894D D4       mov     dword ptr [ebp-2C], ecx
0D094768  |.  6A 01         push    1
0D09476A  |.  8B4D D4       mov     ecx, dword ptr [ebp-2C]
0D09476D  |.  E8 DC1A0100   call    <jmp.&mfc90u.#6760>
0D094772  |.  51            push    ecx
0D094773  |.  8BCC          mov     ecx, esp
0D094775  |.  8965 E8       mov     dword ptr [ebp-18], esp
0D094778  |.  68 9BB30A0D   push    0D0AB39B
0D09477D  |.  FF15 FC930A0D call    dword ptr [<&mfc90u.#290>]       ;  mfc90u.78BF338D
0D094783  |.  8945 D0       mov     dword ptr [ebp-30], eax
0D094786  |.  8B45 D0       mov     eax, dword ptr [ebp-30]
0D094789  |.  8945 CC       mov     dword ptr [ebp-34], eax
0D09478C  |.  C745 FC 00000>mov     dword ptr [ebp-4], 0
0D094793  |.  8B4D D4       mov     ecx, dword ptr [ebp-2C]
0D094796  |.  83C1 74       add     ecx, 74
0D094799  |.  51            push    ecx
0D09479A  |.  8BD4          mov     edx, esp
0D09479C  |.  8965 E4       mov     dword ptr [ebp-1C], esp
0D09479F  |.  51            push    ecx
0D0947A0  |.  8BCA          mov     ecx, edx
0D0947A2  |.  FF15 20960A0D call    dword ptr [<&mfc90u.#280>]       ;  取出假码
0D0947A8  |.  8945 C8       mov     dword ptr [ebp-38], eax
0D0947AB  |.  8B45 C8       mov     eax, dword ptr [ebp-38]
0D0947AE  |.  8945 C4       mov     dword ptr [ebp-3C], eax
0D0947B1  |.  C645 FC 01    mov     byte ptr [ebp-4], 1
0D0947B5  |.  8B4D D4       mov     ecx, dword ptr [ebp-2C]
0D0947B8  |.  83C1 78       add     ecx, 78
0D0947BB  |.  51            push    ecx
0D0947BC  |.  8BD4          mov     edx, esp
0D0947BE  |.  8965 E0       mov     dword ptr [ebp-20], esp
0D0947C1  |.  51            push    ecx
0D0947C2  |.  8BCA          mov     ecx, edx
0D0947C4  |.  FF15 20960A0D call    dword ptr [<&mfc90u.#280>]       ;  取出注册名
0D0947CA  |.  8945 C0       mov     dword ptr [ebp-40], eax
0D0947CD  |.  8B45 C0       mov     eax, dword ptr [ebp-40]
0D0947D0  |.  8945 BC       mov     dword ptr [ebp-44], eax
0D0947D3  |.  C645 FC 02    mov     byte ptr [ebp-4], 2
0D0947D7  |.  8B4D D4       mov     ecx, dword ptr [ebp-2C]
0D0947DA  |.  83C1 7C       add     ecx, 7C
0D0947DD  |.  51            push    ecx
0D0947DE  |.  8BD4          mov     edx, esp
0D0947E0  |.  8965 DC       mov     dword ptr [ebp-24], esp
0D0947E3  |.  51            push    ecx
0D0947E4  |.  8BCA          mov     ecx, edx
0D0947E6  |.  FF15 20960A0D call    dword ptr [<&mfc90u.#280>]       ;  注册类型
0D0947EC  |.  8945 B8       mov     dword ptr [ebp-48], eax
0D0947EF  |.  8B45 B8       mov     eax, dword ptr [ebp-48]
0D0947F2  |.  8945 B4       mov     dword ptr [ebp-4C], eax
0D0947F5  |.  C645 FC 03    mov     byte ptr [ebp-4], 3
0D0947F9  |.  51            push    ecx
0D0947FA  |.  8BCC          mov     ecx, esp
0D0947FC  |.  8965 D8       mov     dword ptr [ebp-28], esp
0D0947FF  |.  68 90B30A0D   push    0D0AB390                         ;  ASCII "CompareDWG"
0D094804  |.  FF15 FC930A0D call    dword ptr [<&mfc90u.#290>]       ;  软件名称
0D09480A  |.  8945 B0       mov     dword ptr [ebp-50], eax
0D09480D  |.  C745 FC FFFFF>mov     dword ptr [ebp-4], -1
0D094814  |.  E8 97200000   call    0D0968B0                         ;  关键call
0D094819  |.  83C4 14       add     esp, 14
0D09481C  |.  8845 AF       mov     byte ptr [ebp-51], al            ;  假码首字符
0D09481F  |.  8A4D AF       mov     cl, byte ptr [ebp-51]
0D094822  |.  884D F3       mov     byte ptr [ebp-D], cl
0D094825  |.  0FBE55 F3     movsx   edx, byte ptr [ebp-D]
0D094829  |.  33C0          xor     eax, eax
0D09482B  |.  83FA 43       cmp     edx, 43                          ;  不可以<=C,为老版本
0D09482E  |.  0F9DC0        setge   al
0D094831  |.  8945 EC       mov     dword ptr [ebp-14], eax
0D094834  |.  837D EC 00    cmp     dword ptr [ebp-14], 0
0D094838  |.  75 1D         jnz     short 0D094857
0D09483A  |.  0FBE4D F3     movsx   ecx, byte ptr [ebp-D]
0D09483E  |.  83F9 41       cmp     ecx, 41
0D094841  |.  7C 14         jl      short 0D094857                   ;  <A也可以的,但算法里并没有这个运算
0D094843  |.  8B55 D4       mov     edx, dword ptr [ebp-2C]
0D094846  |.  8B42 74       mov     eax, dword ptr [edx+74]
0D094849  |.  50            push    eax
0D09484A  |.  68 E8B20A0D   push    0D0AB2E8                         ;  UNICODE "Old registration code %s.",LF,LF,"Please update your license at http://www.furix.com/renew"
0D09484F  |.  E8 CCFD0000   call    0D0A4620
0D094854  |.  83C4 08       add     esp, 8
0D094857  |>  8B4D EC       mov     ecx, dword ptr [ebp-14]
0D09485A  |.  51            push    ecx
0D09485B  |.  6A 01         push    1
0D09485D  |.  8B4D D4       mov     ecx, dword ptr [ebp-2C]
0D094860  |.  E8 0D1A0100   call    <jmp.&mfc90u.#2904>
0D094865  |.  8BC8          mov     ecx, eax
0D094867  |.  E8 001A0100   call    <jmp.&mfc90u.#2360>
0D09486C  |.  8B4D F4       mov     ecx, dword ptr [ebp-C]
0D09486F  |.  64:890D 00000>mov     dword ptr fs:[0], ecx
0D094876  |.  59            pop     ecx
0D094877  |.  8BE5          mov     esp, ebp
0D094879  |.  5D            pop     ebp
0D09487A  \.  C3            retn
一遍跟下来是返回不了这个call的,因为注册码不对灰色按钮是不会变的。
当然也可以用灰色按钮克星之类的。。。
初步判断关键call在0D094814  |.  E8 97200000   call    0D0968B0
注意一下,即使注册码正确下边还有一个注册码首字母的比较。如果是‘A’,‘B’,‘C’的话会提示是旧版本的注册码。
跟进关键call:
0D0968B0  /nbsp; 55            push    ebp
0D0968B1  |.  8BEC          mov     ebp, esp
0D0968B3  |.  6A FF         push    -1
0D0968B5  |.  68 3E790A0D   push    0D0A793E
0D0968BA  |.  64:A1 0000000>mov     eax, dword ptr fs:[0]
0D0968C0  |.  50            push    eax
0D0968C1  |.  81EC 88000000 sub     esp, 88
0D0968C7  |.  A1 603B0B0D   mov     eax, dword ptr [D0B3B60]
0D0968CC  |.  33C5          xor     eax, ebp
0D0968CE  |.  50            push    eax
0D0968CF  |.  8D45 F4       lea     eax, dword ptr [ebp-C]
0D0968D2  |.  64:A3 0000000>mov     dword ptr fs:[0], eax
0D0968D8  |.  C745 FC 04000>mov     dword ptr [ebp-4], 4
0D0968DF  |.  C645 F3 5A    mov     byte ptr [ebp-D], 5A             ;  5a=Z
0D0968E3  |.  EB 08         jmp     short 0D0968ED
0D0968E5  |>  8A45 F3       /mov     al, byte ptr [ebp-D]
0D0968E8  |.  2C 01         |sub     al, 1
0D0968EA  |.  8845 F3       |mov     byte ptr [ebp-D], al
0D0968ED  |>  0FBE4D F3      movsx   ecx, byte ptr [ebp-D]
0D0968F1  |.  83F9 42       |cmp     ecx, 42                         ;  42=B
0D0968F4  |.  0F8C 3F010000 |jl      0D096A39
0D0968FA  |.  8D4D EC       |lea     ecx, dword ptr [ebp-14]
0D0968FD  |.  FF15 FC950A0D |call    dword ptr [<&mfc90u.#296>]      ;  mfc90u.78A87587
0D096903  |.  C645 FC 05    |mov     byte ptr [ebp-4], 5
0D096907  |.  8B55 18       |mov     edx, dword ptr [ebp+18]
0D09690A  |.  52            |push    edx
0D09690B  |.  0FBE45 F3     |movsx   eax, byte ptr [ebp-D]           ;  从Z开始递减
0D09690F  |.  83E8 40       |sub     eax, 40                         ;  5A-40=1A=26
0D096912  |.  50            |push    eax
0D096913  |.  8B4D 08       |mov     ecx, dword ptr [ebp+8]          ;  软件名
0D096916  |.  51            |push    ecx
0D096917  |.  68 40C30A0D   |push    0D0AC340                        ;  UNICODE "%s%d%s"
0D09691C  |.  8D55 EC       |lea     edx, dword ptr [ebp-14]
0D09691F  |.  52            |push    edx
0D096920  |.  FF15 8C930A0D |call    dword ptr [<&mfc90u.#2537>]     ;  UNICODE "CompareDWG+字母序号26"
0D096926  |.  83C4 14       |add     esp, 14
0D096929  |.  51            |push    ecx
0D09692A  |.  8BCC          |mov     ecx, esp
0D09692C  |.  8965 E8       |mov     dword ptr [ebp-18], esp
0D09692F  |.  6A 01         |push    1
0D096931  |.  0FB645 F3     |movzx   eax, byte ptr [ebp-D]           ;  从Z开始递减
0D096935  |.  50            |push    eax
0D096936  |.  FF15 64940A0D |call    dword ptr [<&mfc90u.#281>]      ;  mfc90u.78BF3409
0D09693C  |.  8945 B8       |mov     dword ptr [ebp-48], eax
0D09693F  |.  8B4D B8       |mov     ecx, dword ptr [ebp-48]
0D096942  |.  894D B4       |mov     dword ptr [ebp-4C], ecx
0D096945  |.  C645 FC 06    |mov     byte ptr [ebp-4], 6
0D096949  |.  51            |push    ecx
0D09694A  |.  8BCC          |mov     ecx, esp
0D09694C  |.  8965 E4       |mov     dword ptr [ebp-1C], esp
0D09694F  |.  8D55 14       |lea     edx, dword ptr [ebp+14]         ;  假码ucode
0D096952  |.  52            |push    edx
0D096953  |.  FF15 20960A0D |call    dword ptr [<&mfc90u.#280>]      ;  mfc90u.78A348EB
0D096959  |.  8945 B0       |mov     dword ptr [ebp-50], eax
0D09695C  |.  8B45 B0       |mov     eax, dword ptr [ebp-50]
0D09695F  |.  8945 AC       |mov     dword ptr [ebp-54], eax
0D096962  |.  C645 FC 07    |mov     byte ptr [ebp-4], 7
0D096966  |.  51            |push    ecx
0D096967  |.  8BCC          |mov     ecx, esp
0D096969  |.  8965 E0       |mov     dword ptr [ebp-20], esp
0D09696C  |.  8D55 10       |lea     edx, dword ptr [ebp+10]         ;  注册名ucode
0D09696F  |.  52            |push    edx
0D096970  |.  FF15 20960A0D |call    dword ptr [<&mfc90u.#280>]      ;  mfc90u.78A348EB
0D096976  |.  8945 A8       |mov     dword ptr [ebp-58], eax
0D096979  |.  8B45 A8       |mov     eax, dword ptr [ebp-58]
0D09697C  |.  8945 A4       |mov     dword ptr [ebp-5C], eax
0D09697F  |.  C645 FC 08    |mov     byte ptr [ebp-4], 8
0D096983  |.  51            |push    ecx
0D096984  |.  8BCC          |mov     ecx, esp
0D096986  |.  8965 DC       |mov     dword ptr [ebp-24], esp
0D096989  |.  8D55 0C       |lea     edx, dword ptr [ebp+C]
0D09698C  |.  52            |push    edx
0D09698D  |.  FF15 20960A0D |call    dword ptr [<&mfc90u.#280>]      ;  注册类型
0D096993  |.  8945 A0       |mov     dword ptr [ebp-60], eax
0D096996  |.  8B45 A0       |mov     eax, dword ptr [ebp-60]
0D096999  |.  8945 9C       |mov     dword ptr [ebp-64], eax
0D09699C  |.  C645 FC 09    |mov     byte ptr [ebp-4], 9
0D0969A0  |.  51            |push    ecx
0D0969A1  |.  8BCC          |mov     ecx, esp
0D0969A3  |.  8965 D8       |mov     dword ptr [ebp-28], esp
0D0969A6  |.  8D55 EC       |lea     edx, dword ptr [ebp-14]
0D0969A9  |.  52            |push    edx
0D0969AA  |.  FF15 20960A0D |call    dword ptr [<&mfc90u.#280>]      ;  UNICODE "CompareDWG+字母序号26"
0D0969B0  |.  8945 98       |mov     dword ptr [ebp-68], eax
0D0969B3  |.  C645 FC 05    |mov     byte ptr [ebp-4], 5
0D0969B7  |.  E8 E4010000   |call    0D096BA0                        ;  算法call
0D0969BC  |.  83C4 14       |add     esp, 14
0D0969BF  |.  8945 94       |mov     dword ptr [ebp-6C], eax         ;  标志位
0D0969C2  |.  837D 94 00    |cmp     dword ptr [ebp-6C], 0
0D0969C6  |.  74 5F         |je      short 0D096A27                  ;  有一组成功则保存按钮可用,跳出循环
0D0969C8  |.  8A45 F3       |mov     al, byte ptr [ebp-D]            ;  否则,进行下一组的比较
0D0969CB  |.  8845 D7       |mov     byte ptr [ebp-29], al
这里是一个大循环。如果输入的注册码不正确的话会在这个call里打转。循环是从字母‘Z’一直循环到字母‘A’,共26次。
每次根据字母在字母表中的序号,生成不同的字符串,由此得到不同的真码,和输入的假码比较。也就是说你每个注册名对应26组正确的注册码。
但首字母为‘A’,‘B’,‘C’的即使正确也会认为是旧版注册码。
可知算法call,跟进:
0D096BA0  /nbsp; 55            push    ebp
0D096BA1  |.  8BEC          mov     ebp, esp
0D096BA3  |.  6A FF         push    -1
0D096BA5  |.  68 B1790A0D   push    0D0A79B1
0D096BAA  |.  64:A1 0000000>mov     eax, dword ptr fs:[0]
0D096BB0  |.  50            push    eax
0D096BB1  |.  83EC 40       sub     esp, 40
0D096BB4  |.  A1 603B0B0D   mov     eax, dword ptr [D0B3B60]
0D096BB9  |.  33C5          xor     eax, ebp
0D096BBB  |.  50            push    eax
0D096BBC  |.  8D45 F4       lea     eax, dword ptr [ebp-C]
0D096BBF  |.  64:A3 0000000>mov     dword ptr fs:[0], eax
0D096BC5  |.  C745 FC 04000>mov     dword ptr [ebp-4], 4
0D096BCC  |.  51            push    ecx
0D096BCD  |.  8BCC          mov     ecx, esp
0D096BCF  |.  8965 EC       mov     dword ptr [ebp-14], esp
0D096BD2  |.  8D45 18       lea     eax, dword ptr [ebp+18]
0D096BD5  |.  50            push    eax
0D096BD6  |.  FF15 20960A0D call    dword ptr [<&mfc90u.#280>]       ;  从Z开始递减的变量
0D096BDC  |.  8945 D0       mov     dword ptr [ebp-30], eax
0D096BDF  |.  8B4D D0       mov     ecx, dword ptr [ebp-30]
0D096BE2  |.  894D CC       mov     dword ptr [ebp-34], ecx
0D096BE5  |.  C645 FC 05    mov     byte ptr [ebp-4], 5
0D096BE9  |.  51            push    ecx
0D096BEA  |.  8BCC          mov     ecx, esp
0D096BEC  |.  8965 E8       mov     dword ptr [ebp-18], esp
0D096BEF  |.  8D55 10       lea     edx, dword ptr [ebp+10]          ;  注册名
0D096BF2  |.  52            push    edx
0D096BF3  |.  FF15 20960A0D call    dword ptr [<&mfc90u.#280>]       ;  mfc90u.78A348EB
0D096BF9  |.  8945 C8       mov     dword ptr [ebp-38], eax
0D096BFC  |.  8B45 C8       mov     eax, dword ptr [ebp-38]
0D096BFF  |.  8945 C4       mov     dword ptr [ebp-3C], eax
0D096C02  |.  C645 FC 06    mov     byte ptr [ebp-4], 6
0D096C06  |.  51            push    ecx
0D096C07  |.  8BCC          mov     ecx, esp
0D096C09  |.  8965 E4       mov     dword ptr [ebp-1C], esp
0D096C0C  |.  8D55 0C       lea     edx, dword ptr [ebp+C]
0D096C0F  |.  52            push    edx                              ;  注册类型
0D096C10  |.  FF15 20960A0D call    dword ptr [<&mfc90u.#280>]       ;  mfc90u.78A348EB
0D096C16  |.  8945 C0       mov     dword ptr [ebp-40], eax
0D096C19  |.  8B45 C0       mov     eax, dword ptr [ebp-40]
0D096C1C  |.  8945 BC       mov     dword ptr [ebp-44], eax
0D096C1F  |.  C645 FC 07    mov     byte ptr [ebp-4], 7
0D096C23  |.  51            push    ecx
0D096C24  |.  8BCC          mov     ecx, esp
0D096C26  |.  8965 E0       mov     dword ptr [ebp-20], esp
0D096C29  |.  8D55 08       lea     edx, dword ptr [ebp+8]
0D096C2C  |.  52            push    edx
0D096C2D  |.  FF15 20960A0D call    dword ptr [<&mfc90u.#280>]       ;  UNICODE "CompareDWG字母序号"
0D096C33  |.  8945 B8       mov     dword ptr [ebp-48], eax          ;  以上为传参过程
0D096C36  |.  8D45 DC       lea     eax, dword ptr [ebp-24]
0D096C39  |.  50            push    eax
0D096C3A  |.  C645 FC 04    mov     byte ptr [ebp-4], 4
0D096C3E  |.  E8 FDF9FFFF   call    0D096640                         ;  算法call
0D096C43  |.  83C4 14       add     esp, 14
0D096C46  |.  8945 B4       mov     dword ptr [ebp-4C], eax
0D096C49  |.  8B4D B4       mov     ecx, dword ptr [ebp-4C]
0D096C4C  |.  894D D4       mov     dword ptr [ebp-2C], ecx
0D096C4F  |.  C645 FC 08    mov     byte ptr [ebp-4], 8
0D096C53  |.  8B4D D4       mov     ecx, dword ptr [ebp-2C]
0D096C56  |.  FF15 18960A0D call    dword ptr [<&mfc90u.#909>]       ;  真吗出现
0D096C5C  |.  50            push    eax
0D096C5D  |.  8D4D 14       lea     ecx, dword ptr [ebp+14]
0D096C60  |.  FF15 78930A0D call    dword ptr [<&mfc90u.#1599>]      ;  真假码比较call
0D096C66  |.  F7D8          neg     eax
0D096C68  |.  1BC0          sbb     eax, eax
0D096C6A  |.  83C0 01       add     eax, 1                           ;  这里就是标志位的由来
0D096C6D  |.  0FB6D0        movzx   edx, al
0D096C70  |.  8955 F0       mov     dword ptr [ebp-10], edx
这部分只是传参,真正的算法在0D096C3E  |.  E8 FDF9FFFF   call    0D096640,跟进:
0D09669C  |>  8D4D 10       lea     ecx, dword ptr [ebp+10]          ;  注册类型
0D09669F  |.  51            push    ecx
0D0966A0  |.  8D55 0C       lea     edx, dword ptr [ebp+C]           ;  uNICODE "CompareDWG25"
0D0966A3  |.  52            push    edx
0D0966A4  |.  8D45 D0       lea     eax, dword ptr [ebp-30]
0D0966A7  |.  50            push    eax
0D0966A8  |.  E8 33060000   call    0D096CE0                         ;  字符串组合UNICODE "CompareDWG25Company license (unlimited)"
0D0966AD  |.  83C4 0C       add     esp, 0C
0D0966B0  |.  8945 C4       mov     dword ptr [ebp-3C], eax
0D0966B3  |.  8B4D C4       mov     ecx, dword ptr [ebp-3C]
0D0966B6  |.  894D C0       mov     dword ptr [ebp-40], ecx
0D0966B9  |.  C645 FC 04    mov     byte ptr [ebp-4], 4
0D0966BD  |.  8D55 14       lea     edx, dword ptr [ebp+14]
0D0966C0  |.  52            push    edx                              ;  注册名
0D0966C1  |.  8B45 C0       mov     eax, dword ptr [ebp-40]
0D0966C4  |.  50            push    eax                              ;  组合字符串
0D0966C5  |.  8D4D EC       lea     ecx, dword ptr [ebp-14]
0D0966C8  |.  51            push    ecx
0D0966C9  |.  E8 12060000   call    0D096CE0                         ;  再次组合注册名
0D0966CE  |.  83C4 0C       add     esp, 0C
0D0966D1  |.  C645 FC 06    mov     byte ptr [ebp-4], 6
0D0966D5  |.  8D4D D0       lea     ecx, dword ptr [ebp-30]
0D0966D8  |.  FF15 2C960A0D call    dword ptr [<&mfc90u.#600>]       ;  mfc90u.78A8D3D2
0D0966DE  |.  8D4D EC       lea     ecx, dword ptr [ebp-14]
0D0966E1  |.  FF15 5C940A0D call    dword ptr [<&mfc90u.#4494>]      ;  转大写
0D0966E7  |.  68 D8970A0D   push    0D0A97D8
0D0966EC  |.  8D4D E8       lea     ecx, dword ptr [ebp-18]
0D0966EF  |.  FF15 24960A0D call    dword ptr [<&mfc90u.#286>]       ;  mfc90u.78A35B3B
0D0966F5  |.  C645 FC 07    mov     byte ptr [ebp-4], 7
0D0966F9  |.  C745 F0 00000>mov     dword ptr [ebp-10], 0
0D096700  |.  EB 09         jmp     short 0D09670B
0D096702  |>  8B55 F0       /mov     edx, dword ptr [ebp-10]
0D096705  |.  83C2 01       |add     edx, 1
0D096708  |.  8955 F0       |mov     dword ptr [ebp-10], edx
0D09670B  |>  8D4D EC        lea     ecx, dword ptr [ebp-14]
0D09670E  |.  FF15 14960A0D |call    dword ptr [<&mfc90u.#3185>]     ;  取长度
0D096714  |.  3945 F0       |cmp     dword ptr [ebp-10], eax
0D096717  |.  7D 33         |jge     short 0D09674C                  ;  非0
0D096719  |.  8B45 F0       |mov     eax, dword ptr [ebp-10]
0D09671C  |.  50            |push    eax
0D09671D  |.  8D4D EC       |lea     ecx, dword ptr [ebp-14]
0D096720  |.  FF15 94930A0D |call    dword ptr [<&mfc90u.#899>]      ;  取字符
0D096726  |.  66:8945 DC    |mov     word ptr [ebp-24], ax
0D09672A  |.  0FB74D DC     |movzx   ecx, word ptr [ebp-24]
0D09672E  |.  51            |push    ecx                             ; /w
0D09672F  |.  FF15 80910A0D |call    dword ptr [<&MSVCR90.iswalnum>] ; \iswalnum
0D096735  |.  83C4 04       |add     esp, 4                          ;  字符检查
0D096738  |.  85C0          |test    eax, eax
0D09673A  |.  74 0E         |je      short 0D09674A
0D09673C  |.  0FB755 DC     |movzx   edx, word ptr [ebp-24]
0D096740  |.  52            |push    edx
0D096741  |.  8D4D E8       |lea     ecx, dword ptr [ebp-18]
0D096744  |.  FF15 90930A0D |call    dword ptr [<&mfc90u.#933>]      ;  mfc90u.78A71137
0D09674A  |>^ EB B6         \jmp     short 0D096702                  ;  去非字母数字字符
0D09674C  |>  C745 E0 00000>mov     dword ptr [ebp-20], 0
0D096753  |.  C745 E4 00000>mov     dword ptr [ebp-1C], 0
0D09675A  |.  C745 F0 00000>mov     dword ptr [ebp-10], 0
0D096761  |.  EB 09         jmp     short 0D09676C
0D096763  |>  8B45 F0       /mov     eax, dword ptr [ebp-10]
0D096766  |.  83C0 01       |add     eax, 1
0D096769  |.  8945 F0       |mov     dword ptr [ebp-10], eax
0D09676C  |>  8D4D E8        lea     ecx, dword ptr [ebp-18]
0D09676F  |.  FF15 14960A0D |call    dword ptr [<&mfc90u.#3185>]     ;  长度
0D096775  |.  3945 F0       |cmp     dword ptr [ebp-10], eax
0D096778  |.  7D 74         |jge     short 0D0967EE                  ;  非0
0D09677A  |.  8B4D F0       |mov     ecx, dword ptr [ebp-10]         ;  初始值为0
0D09677D  |.  51            |push    ecx
0D09677E  |.  8D4D E8       |lea     ecx, dword ptr [ebp-18]
0D096781  |.  FF15 94930A0D |call    dword ptr [<&mfc90u.#899>]      ;  取字符
0D096787  |.  66:8945 D8    |mov     word ptr [ebp-28], ax
0D09678B  |.  C745 D4 00000>|mov     dword ptr [ebp-2C], 0
0D096792  |.  EB 09         |jmp     short 0D09679D
0D096794  |>  8B55 D4       |/mov     edx, dword ptr [ebp-2C]        ;  计数器
0D096797  |.  83C2 01       ||add     edx, 1
0D09679A  |.  8955 D4       ||mov     dword ptr [ebp-2C], edx
0D09679D  |>  837D D4 08    | cmp     dword ptr [ebp-2C], 8
0D0967A1  |.  7D 46         ||jge     short 0D0967E9                 ;  做8次运算
0D0967A3  |.  0FB745 D8     ||movzx   eax, word ptr [ebp-28]         ;  字符ascii
0D0967A7  |.  8BC8          ||mov     ecx, eax
0D0967A9  |.  81E1 1F000080 ||and     ecx, 8000001F                  ;  and 运算
0D0967AF  |.  79 05         ||jns     short 0D0967B6
0D0967B1  |.  49            ||dec     ecx
0D0967B2  |.  83C9 E0       ||or      ecx, FFFFFFE0
0D0967B5  |.  41            ||inc     ecx
0D0967B6  |>  8B55 E4       ||mov     edx, dword ptr [ebp-1C]        ;  初始值为0
0D0967B9  |.  D3C2          ||rol     edx, cl                        ;  循环左移cl位
0D0967BB  |.  8955 E4       ||mov     dword ptr [ebp-1C], edx
0D0967BE  |.  8B45 E4       ||mov     eax, dword ptr [ebp-1C]        ;  初始值为0
0D0967C1  |.  83E0 FE       ||and     eax, FFFFFFFE
0D0967C4  |.  8945 E4       ||mov     dword ptr [ebp-1C], eax
0D0967C7  |.  0FB74D D8     ||movzx   ecx, word ptr [ebp-28]         ;  字符ascii
0D0967CB  |.  83E1 01       ||and     ecx, 1
0D0967CE  |.  0B4D E4       ||or      ecx, dword ptr [ebp-1C]
0D0967D1  |.  894D E4       ||mov     dword ptr [ebp-1C], ecx
0D0967D4  |.  8B55 E0       ||mov     edx, dword ptr [ebp-20]        ;  初始值为0
0D0967D7  |.  3355 E4       ||xor     edx, dword ptr [ebp-1C]        ;  XOR是关键
0D0967DA  |.  8955 E0       ||mov     dword ptr [ebp-20], edx
0D0967DD  |.  0FB745 D8     ||movzx   eax, word ptr [ebp-28]
0D0967E1  |.  D1C8          ||ror     eax, 1
0D0967E3  |.  66:8945 D8    ||mov     word ptr [ebp-28], ax
0D0967E7  |.^ EB AB         |\jmp     short 0D096794
0D0967E9  |>^ E9 75FFFFFF   \jmp     0D096763
0D0967EE  |>  8B4D E0       mov     ecx, dword ptr [ebp-20]          ;  以上为关键算法
0D0967F1  |.  51            push    ecx
0D0967F2  |.  68 FCC20A0D   push    0D0AC2FC                         ;  UNICODE "%08LX"
0D0967F7  |.  8D55 E8       lea     edx, dword ptr [ebp-18]
0D0967FA  |.  52            push    edx
0D0967FB  |.  FF15 8C930A0D call    dword ptr [<&mfc90u.#2537>]      ;  结果转字符串
0D096801  |.  83C4 0C       add     esp, 0C
0D096804  |.  8D45 18       lea     eax, dword ptr [ebp+18]
0D096807  |.  50            push    eax
0D096808  |.  8D4D CC       lea     ecx, dword ptr [ebp-34]
0D09680B  |.  FF15 20960A0D call    dword ptr [<&mfc90u.#280>]       ;  mfc90u.78A348EB
0D096811  |.  8945 BC       mov     dword ptr [ebp-44], eax
0D096814  |.  8B4D BC       mov     ecx, dword ptr [ebp-44]
0D096817  |.  894D B8       mov     dword ptr [ebp-48], ecx
0D09681A  |.  C645 FC 08    mov     byte ptr [ebp-4], 8
0D09681E  |.  8D55 E8       lea     edx, dword ptr [ebp-18]
0D096821  |.  52            push    edx
0D096822  |.  8B45 B8       mov     eax, dword ptr [ebp-48]
0D096825  |.  50            push    eax
0D096826  |.  8B4D 08       mov     ecx, dword ptr [ebp+8]
0D096829  |.  51            push    ecx
0D09682A  |.  E8 B1040000   call    0D096CE0                         ;  连接初始化的字符串
软件用软件名,字母序号,注册类型,注册名组成一个新字符串,剔除非数字和字母的符号,用ascii码做了一个很复杂的运算。
循环左右移和XOR得出一个结果,转字符串(8位)并和组成新字符串时候所用到的字符组合在一起,即为注册码。
举例:假设使用字母D,D在字母表中序号为4,注册名为zaas。则组合的新字符串为:
CompareDWG4Company license (unlimited)
变换后得到的十六进制数值为:B716D222
则注册码前面加上使用的字母D,为:DB716D222
一组可用的注册码:
注册名:zaas
注册码:PA98B0F06
注册类型:Company license (unlimited)

具体字符串转换的循环左右移算法让人头晕。估计是自己没找到其数学模型。(数学不好,没办法)
写注册机正好试试内嵌汇编。对delphi的这个功能神往已久了。从VB转delphi很大程度上是因为这个。
实践证明:非常爽!
算法注册机代码如下:
procedure TForm1.BitBtn1Click(Sender: TObject);
    var
      Name,Code,FstWord:string;
      RndNum,i,j:Integer;
      ONECHAR:word;
      REF,RESULT:integer;
    const
      Index:string='DDDDEFGHIJKLMNOPQRSTUVWXYZ';
      Company:string='CompareDWG';
      License:string='Companylicenseunlimited';
begin
      Randomize;
      RndNum:=Random(26);
      FstWord:=index[RndNum] ;
      name:=UpperCase(Company+inttostr(RndNum)+license+Trim(edit1.Text));
      REF:=0;    //   [ebp-1]
      RESULT:=0;
      for i:=1 to length(name) do
          begin
              ONECHAR:=Ord(name[i]);
              for j:=1 to 8  do
                  begin
                      asm
                          movzx   eax, ONECHAR
                          mov     ecx, eax
                          and     ecx, $8000001F
                          jns     @JUMP
                          dec     ecx
                          or      ecx, $FFFFFFE0
                          inc     ecx
                          @JUMP:
                          mov     edx, REF
                          rol     edx, cl
                          mov     eax, edx
                          and     eax, $FFFFFFFE
                          movzx   ecx, ONECHAR
                          and     ecx, 1
                          or      ecx, eax
                          mov     REF, ecx
                          mov     edx, RESULT
                          xor     edx, ecx
                          mov     RESULT, edx
                          movzx   eax, ONECHAR
                          ror     eax, 1
                          mov     ONECHAR, ax
                      end;
                  end;
          end;
      code:=FstWord+IntToHex(RESULT,8)   ;
      edit2.Text:=code;
end;
【版权声明】破文是学习的手记,兴趣是成功的源泉;本破文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!
Snap3.gif

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

1zm 发表于 2010-9-7 08:02
有毒吗,可以下吗
zsl01 发表于 2010-9-30 07:58
mw286283329 发表于 2010-10-1 00:48
363413806 发表于 2011-5-2 03:01
郁闷看了半天没明白
行云流水 发表于 2011-5-26 17:28
小弟比较下  版主的注册机 没看明白  
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-23 03:51

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表