Active Ebook Compiler的註冊演算法 (14千字)

看雪資料發表於2001-05-09

[軟體名稱]
    ACTIVEBOOK COMPILER 4.01
[下載地址]
    http://www.ans2000.com/

    感覺上和做成chm沒什麼特別大的區別。無非是變成了exe檔案,變成共享檔案(I hate it!),用
VBScript或者JAVAScript 編輯起來會更容易一點。不過它的Search功能可遠遠不如chm的。不過也算是
一個不錯的東東了。

下面是Active Ebook Compiler的註冊演算法,如有不當指出,請大家指正。
註冊碼分兩部分,和註冊時填入的方式是一樣的。
1. 數字部分,8位
2. 字母部分,9位
數字4-8位的計算需要查表,表的位置在49547C - 4956BB。

字母部分計算完成後會將順序倒轉。

註冊成功後註冊資訊會寫入window目錄下面的asn2000.ini檔案中。

* Referenced by a CALL at Addresses:
|:0041035A  , :0041AB95  , :0041FEDA  , :00437FE0 
|
:0042AD00 81EC00010000            sub esp, 00000100
:0042AD06 53                      push ebx
:0042AD07 56                      push esi
:0042AD08 8BB4240C010000          mov esi, dword ptr [esp+0000010C]  <--- UserID,5位
:0042AD0F B90A000000              mov ecx, 0000000A                  <--- A放入ecx
:0042AD14 C744240800000000        mov [esp+08], 00000000
:0042AD1C 6A00                    push 00000000
:0042AD1E 8D4601                  lea eax, dword ptr [esi+01]    <--- nc+1放入eax
:0042AD21 56                      push esi
:0042AD22 99                      cdq
:0042AD23 F7F9                    idiv ecx                      <--- eax除以ecx,餘數在edx   
:0042AD25 B840420F00              mov eax, 000F4240           
:0042AD2A 6A08                    push 00000008
:0042AD2C 2BC6                    sub eax, esi                  <--- F4240 - UserID 放在eax
:0042AD2E 80C230                  add dl, 30             
:0042AD31 88542414                mov byte ptr [esp+14], dl      <--- 數字部分第1位
:0042AD35 99                      cdq
:0042AD36 F7F9                    idiv ecx                      <--- eax除以ecx,餘數在edx
:0042AD38 8D0476                  lea eax, dword ptr [esi+2*esi] <--- 3*UserID放入eax,
:0042AD3B 80C230                  add dl, 30
:0042AD3E 88542415                mov byte ptr [esp+15], dl      <--- 數字部分第2位
:0042AD42 99                      cdq
:0042AD43 F7F9                    idiv ecx                      <--- eax除以ecx,餘數在edx
:0042AD45 80C230                  add dl, 30
:0042AD48 88542416                mov byte ptr [esp+16], dl      <--- 數字部分第3位
:0042AD4C 8D542414                lea edx, dword ptr [esp+14]
:0042AD50 52                      push edx
:0042AD51 E81AECFFFF              call 00429970                  <--------計算其餘的數字部分
:0042AD56 6A00                    push 00000000
:0042AD58 8D442424                lea eax, dword ptr [esp+24]
:0042AD5C 6A08                    push 00000008
:0042AD5E 50                      push eax
:0042AD5F 56                      push esi
:0042AD60 E86BEAFFFF              call 004297D0                  <--------計算字母部分
:0042AD65 8BB42430010000          mov esi, dword ptr [esp+00000130]
:0042AD6C 83C420                  add esp, 00000020
:0042AD6F 8D442408                lea eax, dword ptr [esp+08]

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0042AD95(C)
|
:0042AD73 8A10                    mov dl, byte ptr [eax]
:0042AD75 8A1E                    mov bl, byte ptr [esi]
:0042AD77 8ACA                    mov cl, dl
:0042AD79 3AD3                    cmp dl, bl
:0042AD7B 752E                    jne 0042ADAB
:0042AD7D 84C9                    test cl, cl
:0042AD7F 7416                    je 0042AD97
:0042AD81 8A5001                  mov dl, byte ptr [eax+01]
:0042AD84 8A5E01                  mov bl, byte ptr [esi+01]
:0042AD87 8ACA                    mov cl, dl
:0042AD89 3AD3                    cmp dl, bl
:0042AD8B 751E                    jne 0042ADAB
:0042AD8D 83C002                  add eax, 00000002
:0042AD90 83C602                  add esi, 00000002
:0042AD93 84C9                    test cl, cl
:0042AD95 75DC                    jne 0042AD73

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0042AD7F(C)
|
:0042AD97 33C0                    xor eax, eax
:0042AD99 33C9                    xor ecx, ecx
:0042AD9B 85C0                    test eax, eax
:0042AD9D 0F94C1                  sete cl
:0042ADA0 5E                      pop esi
:0042ADA1 8BC1                    mov eax, ecx
:0042ADA3 5B                      pop ebx
:0042ADA4 81C400010000            add esp, 00000100
:0042ADAA C3                      ret

-------------------------------------------------------------------------------------
數字部分4-8位的計算:

* Referenced by a CALL at Addresses:
|:0042AD51  , :0042AEB7  , :0042AF87  , :0042B051  , :0042B127 
|:0042B1F1  , :0042B308  , :0042B3D1  , :0042B4A7  , :0042B571 
|:0042B641  , :0042B7A7  , :0042B877  , :0042B941  , :0042BA14 
|:0042BAE7  , :0042BBB1  , :0042BCC8  , :0042BD91  , :0042BE67 
|:0042BF31 
|
:00429970 8B44240C                mov eax, dword ptr [esp+0C]      <----- UserID放入eax
:00429974 2507000080              and eax, 80000007
:00429979 7905                    jns 00429980                    <----- 正數的話就跳
:0042997B 48                      dec eax
:0042997C 83C8F8                  or eax, FFFFFFF8
:0042997F 40                      inc eax

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00429979(C)
|
:00429980 8B4C2408                mov ecx, dword ptr [esp+08]      <----- 8放入ecx 
:00429984 8D14C8                  lea edx, dword ptr [eax+8*ecx]  <----- eax+8*8放入edx
:00429987 8B442404                mov eax, dword ptr [esp+04]
:0042998B 80C130                  add cl, 30
:0042998E 8D14957C544900          lea edx, dword ptr [4*edx+0049547C]  <---- edx中是表地址
:00429995 884803                  mov byte ptr [eax+03], cl            <---- 數字部分第4位
:00429998 8A0A                    mov cl, byte ptr [edx]              <---- 表的內容,送一個位元組進cl
:0042999A 884804                  mov byte ptr [eax+04], cl            <---- 數字部分第5位
:0042999D 8A4A01                  mov cl, byte ptr [edx+01]
:004299A0 884805                  mov byte ptr [eax+05], cl            <---- 數字部分第6位
:004299A3 8A4C2410                mov cl, byte ptr [esp+10]
:004299A7 8A5202                  mov dl, byte ptr [edx+02]
:004299AA 80C130                  add cl, 30
:004299AD 885006                  mov byte ptr [eax+06], dl            <---- 數字部分第7位
:004299B0 884807                  mov byte ptr [eax+07], cl            <---- 數字部分第8位
:004299B3 8A5004                  mov dl, byte ptr [eax+04]            <-----------------------------
:004299B6 8A08                    mov cl, byte ptr [eax]              <-    (5)<->(1),第5位和第1位換位置
:004299B8 8810                    mov byte ptr [eax], dl              <-
:004299BA 884804                  mov byte ptr [eax+04], cl            <-----------------------------
:004299BD 8A5005                  mov dl, byte ptr [eax+05]            <---- (6)<->(2)
:004299C0 8A4801                  mov cl, byte ptr [eax+01]
:004299C3 885001                  mov byte ptr [eax+01], dl
:004299C6 884805                  mov byte ptr [eax+05], cl
:004299C9 8A5006                  mov dl, byte ptr [eax+06]            <---- (7)<->(3)
:004299CC 8A4802                  mov cl, byte ptr [eax+02]
:004299CF 885002                  mov byte ptr [eax+02], dl
:004299D2 884806                  mov byte ptr [eax+06], cl
:004299D5 C3                      ret
-----------------------------------------------------------------------------------
字母部分計算:
* Referenced by a CALL at Addresses:
|:00429761  , :00429AB0  , :00429C16  , :00429CE6  , :00429DB0 
|:00429E86  , :00429F50  , :0042A067  , :0042A130  , :0042A206 
|:0042A2D0  , :0042A3A0  , :0042A506  , :0042A5D6  , :0042A6A0 
|:0042A773  , :0042A846  , :0042A910  , :0042AA27  , :0042AAF0 
|:0042ABC6  , :0042AC90  , :0042AD60  , :0042AEC6  , :0042AF96 
|:0042B060  , :0042B136  , :0042B200  , :0042B317  , :0042B3E0 
|:0042B4B6  , :0042B580  , :0042B650  , :0042B7B6  , :0042B886 
|:0042B950  , :0042BA23  , :0042BAF6  , :0042BBC0  , :0042BCD7 
|:0042BDA0  , :0042BE76  , :0042BF40 
|
:004297D0 81EC1C010000            sub esp, 0000011C
:004297D6 8B842420010000          mov eax, dword ptr [esp+00000120]
:004297DD 53                      push ebx
:004297DE 56                      push esi
:004297DF 57                      push edi
:004297E0 50                      push eax
:004297E1 8D4C242C                lea ecx, dword ptr [esp+2C]

* Possible StringData Ref from Data Obj ->"%05d"
                                  |
:004297E5 687C594900              push 0049597C
:004297EA 51                      push ecx
:004297EB E88E820100              call 00441A7E
:004297F0 8A5C2437                mov bl, byte ptr [esp+37]      <--- UserID字串第(4)位
:004297F4 8A4C2434                mov cl, byte ptr [esp+34]      <--- UserID字串第(1)位
:004297F8 8A542435                mov dl, byte ptr [esp+35]      <--- UserID字串第(2)位
:004297FC 80EB30                  sub bl, 30
:004297FF 80E930                  sub cl, 30
:00429802 885C242F                mov byte ptr [esp+2F], bl      <--- 儲存到esp+2F處,下面用到。
:00429806 8A5C2438                mov bl, byte ptr [esp+38]      <--- UserID字串第(5)位
:0042980A 80C14A                  add cl, 4A
:0042980D 8A442436                mov al, byte ptr [esp+36]      <--- UserID字串第(3)位
:00429811 80EB30                  sub bl, 30
:00429814 884C2419                mov byte ptr [esp+19], cl      <--- 字母部分第(2)位
:00429818 80EA30                  sub dl, 30
:0042981B B15A                    mov cl, 5A
:0042981D 885C2430                mov byte ptr [esp+30], bl      <--- 儲存到esp+30處,下面用到。
:00429821 80C34C                  add bl, 4C
:00429824 2ACA                    sub cl, dl
:00429826 885C2418                mov byte ptr [esp+18], bl      <--- 字母部分第(1)位
:0042982A 8A5C242F                mov bl, byte ptr [esp+2F]
:0042982E 884C241A                mov byte ptr [esp+1A], cl      <--- 字母部分第(3)位
:00429832 B158                    mov cl, 58
:00429834 2ACB                    sub cl, bl
:00429836 2C30                    sub al, 30
:00429838 884C241B                mov byte ptr [esp+1B], cl      <--- 字母部分第(4)位
:0042983C 8AC8                    mov cl, al
:0042983E 80C141                  add cl, 41
:00429841 8A5C2430                mov bl, byte ptr [esp+30]
:00429845 884C241C                mov byte ptr [esp+1C], cl      <--- 字母部分第(5)位
:00429849 B153                    mov cl, 53
:0042984B 2ACA                    sub cl, dl
:0042984D 044B                    add al, 4B
:0042984F 884C241D                mov byte ptr [esp+1D], cl      <--- 字母部分第(6)位
:00429853 8844241E                mov byte ptr [esp+1E], al      <--- 字母部分第(7)位
:00429857 B059                    mov al, 59
:00429859 B158                    mov cl, 58
:0042985B 2AC3                    sub al, bl
:0042985D 2ACA                    sub cl, dl
:0042985F 8844241F                mov byte ptr [esp+1F], al      <--- 字母部分第(8)位
:00429863 8B842440010000          mov eax, dword ptr [esp+00000140]
:0042986A 884C2420                mov byte ptr [esp+20], cl      <--- 字母部分第(9)位
:0042986E 8B8C2444010000          mov ecx, dword ptr [esp+00000144]
:00429875 83C40C                  add esp, 0000000C
:00429878 3BC1                    cmp eax, ecx
:0042987A C644241500              mov [esp+15], 00
:0042987F 743A                    je 004298BB

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004298B9(C)
|
:00429881 85C0                    test eax, eax
:00429883 7C1E                    jl 004298A3
:00429885 83F808                  cmp eax, 00000008
:00429888 7F19                    jg 004298A3
:0042988A 85C9                    test ecx, ecx
:0042988C 7C15                    jl 004298A3
:0042988E 83F908                  cmp ecx, 00000008
:00429891 7F10                    jg 004298A3
:00429893 8A5C0C0C                mov bl, byte ptr [esp+ecx+0C]  <--- 準備將剛才生成的字母的順序倒過來。
:00429897 8A54040C                mov dl, byte ptr [esp+eax+0C]
:0042989B 885C040C                mov byte ptr [esp+eax+0C], bl
:0042989F 88540C0C                mov byte ptr [esp+ecx+0C], dl

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00429883(C), :00429888(C), :0042988C(C), :00429891(C)
|
:004298A3 48                      dec eax
:004298A4 41                      inc ecx
:004298A5 85C0                    test eax, eax
:004298A7 7C12                    jl 004298BB
:004298A9 83F808                  cmp eax, 00000008
:004298AC 7F0D                    jg 004298BB
:004298AE 85C9                    test ecx, ecx
:004298B0 7C09                    jl 004298BB
:004298B2 83F908                  cmp ecx, 00000008
:004298B5 7F04                    jg 004298BB
:004298B7 3BC1                    cmp eax, ecx
:004298B9 75C6                    jne 00429881

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0042987F(C), :004298A7(C), :004298AC(C), :004298B0(C), :004298B5(C)
|
:004298BB 8D7C240C                lea edi, dword ptr [esp+0C]
:004298BF 83C9FF                  or ecx, FFFFFFFF
:004298C2 33C0                    xor eax, eax
:004298C4 F2                      repnz
:004298C5 AE                      scasb
:004298C6 F7D1                    not ecx
:004298C8 2BF9                    sub edi, ecx
:004298CA 8BD1                    mov edx, ecx
:004298CC 8BF7                    mov esi, edi
:004298CE 8BBC2430010000          mov edi, dword ptr [esp+00000130]
:004298D5 C1E902                  shr ecx, 02
:004298D8 F3                      repz
:004298D9 A5                      movsd
:004298DA 8BCA                    mov ecx, edx
:004298DC 83E103                  and ecx, 00000003
:004298DF F3                      repz
:004298E0 A4                      movsb
:004298E1 5F                      pop edi
:004298E2 5E                      pop esi
:004298E3 5B                      pop ebx
:004298E4 81C41C010000            add esp, 0000011C
:004298EA C3                      ret
--------------------------------------------------------------------------------

相關文章