[软件名称]
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
--------------------------------------------------------------------------------
- 标 题:Active Ebook Compiler的注册算法 (14千字)
- 作 者:henryw
- 时 间:2001-5-9 12:30:42
- 链 接:http://bbs.pediy.com