老文章档案 · 2003 年

撰稿人宝典 V1.0

赢政天下 [WINZHENG.COM] · 网络学院 · 2003-06-15 · 作者:fly 人气: · 出处:嬴政天下整理收藏)

算法分析——撰稿人宝典 V1.0

下载地址: http://www.skycn.com/soft/10803.html

软件大小: 696 KB

软件语言: 简体中文

软件类别: 国产软件 / 共享版 / 文字处理

应用平台: Win9x/NT/2000/XP

加入时间: 2003-02-13 12:08:02

下载次数: 136

推荐等级: ***

开 发 商: http://www.simplepad.51dream.com/

【软件简介】: 一款专为撰稿人设计的字处理软件,除了有常用功能外,还有许多特色功能:1.中文字数统计:您写了多少字,可随时在状态栏察看;2.自动保存:自设保存时间间隔,最小化减少意外损失;3.自动开启输入法:您可以自由选择让软件在启动时就切换出您最熟悉的输入法;4.输入时隐藏鼠标指针;5.自动翻页:读长篇文章时可自动翻页,允许自设翻页时间;6.背景音乐播放:支持“Wave,media,mp3,wma”格式,可循环播放,更加节省系统资源;7.无限次“撤销/恢复”功能;8.三击鼠标可选中一段文字,支持托拽文字操作;9.可插入自定义文本:可自定义“信头”,“联系方法”等常用词,下次即可方便插入,一次定义,一劳永逸!10.独创“随机色彩”功能:撰稿人长时间面对白屏黑字,视觉容易疲劳,受Delphi的启发,为大家精选五种醒目但却不刺眼的颜色,输入时随机变换色彩,可以有效的缓解视疲劳。

【软件限制】:NAG

【作者声明】:初学Crack,只是感兴趣,没有其它目的。失误之处敬请诸位大侠赐教!

【破解工具】:TRW2000娃娃修改版、FI2.5、UPXWin、W32Dasm8.93黄金版

—————————————————————————————

【过 程】:

呵呵,对 MiniPad 2000感到头疼,去 天空 看到一个小东西,当然是DOWN下试试了。

—————————————————————————————

一、脱壳

word.exe是UPX 1.2壳,用UPXWin脱之。423K->1.11M。Delphi编写。

用户名:fly

申请码:103B2C1E

试炼码:1357 2468

—————————————————————————————

二、反汇编、调试

呵呵,当然是祭出倚天剑、屠龙刀了!

--------------------------------------------------------

一>、首先看看申请码的生成

:004E57A8 E8CF36F2FF call 00408E7C

:004E57AD FF75E4 push [ebp-1C]

:004E57B0 B838DF4E00 mov eax, 004EDF38

:004E57B5 BA04000000 mov edx, 00000004

====>4 入 EDX

:004E57BA E84DF0F1FF call 0040480C

====>关键CALL!F8进入!

:004E57BF 8B1538DF4E00 mov edx, dword ptr [004EDF38]

:004E57C5 8B86FC020000 mov eax, dword ptr [esi+000002FC]

:004E57CB E8182CF6FF call 004483E8

:004E57D0 33D2 xor edx, edx

:004E57D2 8B8600030000 mov eax, dword ptr [esi+00000300]

:004E57D8 8B08 mov ecx, dword ptr [eax]

:004E57DA FF5164 call [ecx+64]

:004E57DD 33D2 xor edx, edx

:004E57DF 8B86F8020000 mov eax, dword ptr [esi+000002F8]

:004E57E5 8B08 mov ecx, dword ptr [eax]

:004E57E7 FF5164 call [ecx+64]

:004E57EA 8D55E0 lea edx, dword ptr [ebp-20]

:004E57ED 8B86FC020000 mov eax, dword ptr [esi+000002FC]

:004E57F3 E8C02BF6FF call 004483B8

:004E57F8 8B4DE0 mov ecx, dword ptr [ebp-20]

* Possible StringData Ref from Code Obj ->"IDcode"

|

:004E57FB BA88584E00 mov edx, 004E5888

:004E5800 8BC3 mov eax, ebx

:004E5802 E8B99EF8FF call 0046F6C0

:004E5807 8D55DC lea edx, dword ptr [ebp-24]

:004E580A 8B86F8020000 mov eax, dword ptr [esi+000002F8]

:004E5810 E8A32BF6FF call 004483B8

:004E5815 8B4DDC mov ecx, dword ptr [ebp-24]

* Possible StringData Ref from Code Obj ->"User"

|

:004E5818 BA98584E00 mov edx, 004E5898

:004E581D 8BC3 mov eax, ebx

:004E581F E89C9EF8FF call 0046F6C0

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

进入4E57BA call 0040480C

:0040480C 53 push ebx

:0040480D 56 push esi

:0040480E 57 push edi

:0040480F 52 push edx

:00404810 50 push eax

:00404811 89D3 mov ebx, edx

:00404813 31FF xor edi, edi

:00404815 8B4C9414 mov ecx, dword ptr [esp+4*edx+14]

====>把ESP+EDX*4+14处的内存中值移入ECX

呵呵,不知道怎么表达了。希望大家指点!

====>1、00DA26F0中为10

:00404819 85C9 test ecx, ecx

:0040481B 7406 je 00404823

:0040481D 3908 cmp dword ptr [eax], ecx

:0040481F 7502 jne 00404823

:00404821 89C7 mov edi, eax

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:

|:0040481B(C), :0040481F(C)

|

:00404823 31C0 xor eax, eax

* Referenced by a (U)nconditional or (C)onditional Jump at Address:

|:00404837(C)

|

:00404825 8B4C9414 mov ecx, dword ptr [esp+4*edx+14]

====>把ESP+EDX*4+14处的内存中值移入ECX

呵呵,不知道怎么表达了。希望大家指点!

====>1、00DA26F0中为10

====>2、00DA2F6C中为3B

====>3、00DA2134中为2C

====>4、00DA5050中为1E

:00404829 85C9 test ecx, ecx

:0040482B 7409 je 00404836

:0040482D 0341FC add eax, dword ptr [ecx-04]

:00404830 39CF cmp edi, ecx

:00404832 7502 jne 00404836

:00404834 31FF xor edi, edi

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:

|:0040482B(C), :00404832(C)

|

:00404836 4A dec edx

====>依次减1

:00404837 75EC jne 00404825

====>循环4次!

呵呵,把上面的值连起来就是程序给我们的申请码!不知道为何申请码的生成具有随机性,既每次的申请码皆不同。与用户名无关!希望大家给我指点迷津!

——————————————————————————————————

二>、追注册码的算法!

查找关键提示"注册码错误"在4E5C05 ,由004E596C和004E59B3跳至!因此我们很容易就找到关键的断点了。因为想看看算法,所以把断点下在4E593E处。分别输入上面的试炼码,点“注册”,OK!拦下!

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:

|:004E596C(C), :004E59B3(C) < ==== 向上追!

|

:004E5C03 6A10 push 00000010

* Possible StringData Ref from Code Obj ->"注册码错误"

|

:004E5C05 68185E4E00 push 004E5E18

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

BPX 4E593E 拦下!呵呵,又开始我的菜鸟学算法之旅了!

:004E593E E8752AF6FF call 004483B8

====>拦下!

:004E5943 8B45E8 mov eax, dword ptr [ebp-18]

:004E5946 50 push eax

====>EAX=103B2C1E 申请码

:004E5947 8D55E4 lea edx, dword ptr [ebp-1C]

:004E594A 8B83F8020000 mov eax, dword ptr [ebx+000002F8]

:004E5950 E8632AF6FF call 004483B8

:004E5955 8B45E4 mov eax, dword ptr [ebp-1C]

====> fly 入 EAX

* Possible StringData Ref from Code Obj ->"EZWord"

====>注意:EZWord

:004E5958 B9085D4E00 mov ecx, 004E5D08

====> EZWord 入 ECX

:004E595D 5A pop edx

:004E595E E875F9FFFF call 004E52D8

====>运算第一部分!进入!

:004E5963 8B55EC mov edx, dword ptr [ebp-14]

====>结果:9e130943 入 EDX

:004E5966 58 pop eax

====>EAX=1357 试炼码的前部分

:004E5967 E824EFF1FF call 00404890

====>比较第一部分!进入!

:004E596C 0F8591020000 jne 004E5C03

====>跳则OVER!

:004E5972 8D55E0 lea edx, dword ptr [ebp-20]

:004E5975 8B8318030000 mov eax, dword ptr [ebx+00000318]

:004E597B E8382AF6FF call 004483B8

:004E5980 8B45E0 mov eax, dword ptr [ebp-20]

:004E5983 50 push eax

:004E5984 68FC5C4E00 push 004E5CFC

:004E5989 8D45DC lea eax, dword ptr [ebp-24]

:004E598C 50 push eax

:004E598D 8D55D8 lea edx, dword ptr [ebp-28]

:004E5990 8B83FC020000 mov eax, dword ptr [ebx+000002FC]

:004E5996 E81D2AF6FF call 004483B8

:004E599B 8B55D8 mov edx, dword ptr [ebp-28]

====>103B2C1E 入EDX 申请码

* Possible StringData Ref from Code Obj ->"EZWord"

|

:004E599E B9085D4E00 mov ecx, 004E5D08

====> EZWord 入 ECX

:004E59A3 33C0 xor eax, eax

:004E59A5 E82EF9FFFF call 004E52D8

====>运算第二部分!进入!

:004E59AA 8B55DC mov edx, dword ptr [ebp-24]

====>结果:e4e8a4fe 入 EDX

:004E59AD 58 pop eax

====>EAX=2468 试炼码的后部分

:004E59AE E8DDEEF1FF call 00404890

====>比较第二部分!进入!

:004E59B3 0F854A020000 jne 004E5C03

====>跳则OVER!

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

1、进入运算部分!4E595E call 004E52D8

2、进入运算部分!4E59A5 call 004E52D8

* Referenced by a CALL at Addresses:

|:004E595E , :004E59A5 , :004E59F6 , :004E5A14 , :004E5A46

|:004E5A64 , :004E5A96 , :004E5AB4 , :004E5AE6 , :004E5B04

|:004E8DD8 , :004E8E11 , :004E8E4A , :004E8E83

|

:004E52D8 55 push ebp

:004E52D9 8BEC mov ebp, esp

:004E52DB 83C4EC add esp, FFFFFFEC

:004E52DE 53 push ebx

:004E52DF 33DB xor ebx, ebx

:004E52E1 895DEC mov dword ptr [ebp-14], ebx

:004E52E4 895DF0 mov dword ptr [ebp-10], ebx

:004E52E7 894DF4 mov dword ptr [ebp-0C], ecx

:004E52EA 8955F8 mov dword ptr [ebp-08], edx

:004E52ED 8945FC mov dword ptr [ebp-04], eax

:004E52F0 8B45FC mov eax, dword ptr [ebp-04]

:004E52F3 E83CF6F1FF call 00404934

:004E52F8 8B45F8 mov eax, dword ptr [ebp-08]

:004E52FB E834F6F1FF call 00404934

:004E5300 8B45F4 mov eax, dword ptr [ebp-0C]

:004E5303 E82CF6F1FF call 00404934

:004E5308 8B450C mov eax, dword ptr [ebp+0C]

:004E530B E824F6F1FF call 00404934

:004E5310 33C0 xor eax, eax

:004E5312 55 push ebp

:004E5313 687E534E00 push 004E537E

:004E5318 64FF30 push dword ptr fs:[eax]

:004E531B 648920 mov dword ptr fs:[eax], esp

:004E531E FF75FC push [ebp-04]

:004E5321 FF75F8 push [ebp-08]

:004E5324 FF75F4 push [ebp-0C]

:004E5327 FF750C push [ebp+0C]

:004E532A 8B450C mov eax, dword ptr [ebp+0C]

:004E532D 50 push eax

:004E532E 8D45EC lea eax, dword ptr [ebp-14]

:004E5331 50 push eax

:004E5332 8B4DF4 mov ecx, dword ptr [ebp-0C]

:004E5335 8B55F8 mov edx, dword ptr [ebp-08]

:004E5338 8B45FC mov eax, dword ptr [ebp-04]

:004E533B E840FDFFFF call 004E5080

:004E5340 FF75EC push [ebp-14]

运算第一部分! ====>U@pg%,p` 程序自给

运算第二部分! ====>npnczwFj 程序自给

:004E5343 8D45F0 lea eax, dword ptr [ebp-10]

:004E5346 BA05000000 mov edx, 00000005

:004E534B E8BCF4F1FF call 0040480C

运算第一部分! ====>此CALL把用户名、申请码以及上面的U@pg%,p`连接起来

运算第二部分! ====>此CALL把申请码以及上面的npnczwFj连接起来

:004E5350 8B5508 mov edx, dword ptr [ebp+08]

:004E5353 8B45F0 mov eax, dword ptr [ebp-10]

运算第一部分! ====>fly103B2C1EEZWord1U@pg%,p` 入 EAX

运算第二部分! ====>103B2C1EEZWord1npnczwFj 入 EAX

:004E5356 E831000000 call 004E538C

====>运算了!进入!

:004E535B 33C0 xor eax, eax

:004E535D 5A pop edx

:004E535E 59 pop ecx

:004E535F 59 pop ecx

:004E5360 648910 mov dword ptr fs:[eax], edx

:004E5363 6885534E00 push 004E5385

* Referenced by a (U)nconditional or (C)onditional Jump at Address:

|:004E5383(U)

|

:004E5368 8D45EC lea eax, dword ptr [ebp-14]

:004E536B BA05000000 mov edx, 00000005

:004E5370 E833F1F1FF call 004044A8

:004E5375 8D450C lea eax, dword ptr [ebp+0C]

:004E5378 E807F1F1FF call 00404484

:004E537D C3 ret

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

进入运算CALL:4E5356 call 004E538C

* Referenced by a CALL at Address:

|:004E5356

|

:004E538C 55 push ebp

:004E538D 8BEC mov ebp, esp

:004E538F 83C4F4 add esp, FFFFFFF4

:004E5392 53 push ebx

:004E5393 56 push esi

:004E5394 33C9 xor ecx, ecx

:004E5396 894DF4 mov dword ptr [ebp-0C], ecx

:004E5399 8955F8 mov dword ptr [ebp-08], edx

:004E539C 8945FC mov dword ptr [ebp-04], eax

:004E539F 8B45FC mov eax, dword ptr [ebp-04]

:004E53A2 E88DF5F1FF call 00404934

:004E53A7 33C0 xor eax, eax

:004E53A9 55 push ebp

:004E53AA 682B544E00 push 004E542B

:004E53AF 64FF30 push dword ptr fs:[eax]

:004E53B2 648920 mov dword ptr fs:[eax], esp

:004E53B5 33DB xor ebx, ebx

:004E53B7 8B45FC mov eax, dword ptr [ebp-04]

运算第一部分! ====>fly103B2C1EEZWord1U@pg%,p` 入 EAX

运算第二部分! ====>103B2C1EEZWord1npnczwFj 入 EAX

:004E53BA E88DF3F1FF call 0040474C

====>求上面字符串的长度

:004E53BF 85C0 test eax, eax

运算第一部分! ====>EAX=1A (即:26位)

运算第二部分! ====>EAX=17 (即:23位)

:004E53C1 7E2C jle 004E53EF

:004E53C3 BE01000000 mov esi, 00000001

* Referenced by a (U)nconditional or (C)onditional Jump at Address:

|:004E53ED(C)

|

:004E53C8 8B55FC mov edx, dword ptr [ebp-04]

运算第一部分! ====>fly103B2C1EEZWord1U@pg%,p` 入 EDX

运算第二部分! ====>103B2C1EEZWord1npnczwFj 入 EDX

:004E53CB 8A5432FF mov dl, byte ptr [edx+esi-01]

运算第一部分! ====>逐位从fly103B2C1EEZWord1U@pg%,p`中取字符的HEX值!

====>1、DL=66

…… …… 省略(共26次) …… ……

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

运算第二部分! ====>逐位从103B2C1EEZWord1npnczwFj中取字符的HEX值!

====>1、DL=31

…… …… 省略(共23次) …… ……

:004E53CF 32D3 xor dl, bl

运算第一部分! ====>与 BL 进行异或! 第一次BL=0

====>1、DL=66 XOR 0=66

…… …… 省略(共26次) …… ……

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

运算第二部分! ====>与 BL 进行异或! 第一次BL=0

====>1、DL=31 XOR 0=31

…… …… 省略(共23次) …… ……

:004E53D1 81E2FF000000 and edx, 000000FF

:004E53D7 8B1495A4BC4E00 mov edx, dword ptr [4*edx+004EBCA4]

运算第一部分! ====>1、EDX=A4D1C46D

…… …… 省略(共26次) …… ……

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

运算第二部分! ====>1、EDX=51DE003A

…… …… 省略(共23次) …… ……

:004E53DE C1EB08 shr ebx, 08

====>EBX 右移8位!

====>1、EBX=0

:004E53E1 81E3FFFFFF00 and ebx, 00FFFFFF

:004E53E7 33D3 xor edx, ebx

运算第一部分! ====>1、EDX=A4D1C46D XOR EBX=A4D1C46D

…… …… 省略(共26次) …… ……

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

运算第二部分! ====>1、EDX=51DE003A XOR EBX=51DE003A

…… …… 省略(共23次) …… ……

:004E53E9 8BDA mov ebx, edx

运算第一部分! ====>EDX 移入 EBX

====>循环26次后,EDX=9E130943

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

运算第二部分! ====>EDX 移入 EBX

====>循环23次后,EDX=E4E8A4FE

:004E53EB 46 inc esi

====>ESI 增1

:004E53EC 48 dec eax

====>EAX 减1

:004E53ED 75D9 jne 004E53C8

运算第一部分! ====>继续循环!共26次!

运算第二部分! ====>继续循环!共23次!

* Referenced by a (U)nconditional or (C)onditional Jump at Address:

|:004E53C1(C)

|

:004E53EF 8BC3 mov eax, ebx

运算第一部分! ====>循环26次后,9E130943入EAX

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

运算第二部分! ====>循环23次后,E4E8A4FE入EAX

:004E53F1 33D2 xor edx, edx

:004E53F3 52 push edx

:004E53F4 50 push eax

:004E53F5 8D55F4 lea edx, dword ptr [ebp-0C]

:004E53F8 B808000000 mov eax, 00000008

:004E53FD E8B63AF2FF call 00408EB8

:004E5402 8B45F4 mov eax, dword ptr [ebp-0C]

:004E5405 8B55F8 mov edx, dword ptr [ebp-08]

:004E5408 E88735F2FF call 00408994

运算第一部分! ====>将9E130943中的大写字母转化为小写!

呵呵, 9e130943就是注册码前半部分!

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

运算第二部分! ====>将E4E8A4FE中的大写字母转化为小写!

呵呵, e4e8a4fe就是注册码后半部分!

:004E540D 33C0 xor eax, eax

:004E540F 5A pop edx

:004E5410 59 pop ecx

:004E5411 59 pop ecx

:004E5412 648910 mov dword ptr fs:[eax], edx

:004E5415 6832544E00 push 004E5432

* Referenced by a (U)nconditional or (C)onditional Jump at Address:

|:004E5430(U)

|

:004E541A 8D45F4 lea eax, dword ptr [ebp-0C]

:004E541D E862F0F1FF call 00404484

:004E5422 8D45FC lea eax, dword ptr [ebp-04]

:004E5425 E85AF0F1FF call 00404484

:004E542A C3 ret

——————————————————————————————————

看看真假码的比较!

1、进入比较部分!4E5967 call 00404890

2、进入比较部分!4E59AE call 00404890

* Referenced by a CALL at Addresses:

|:0041838F , :0041EBD2 , :004213CF , :00427129 , :00428100

…… …… 很多地方CALL此处! …… ……

:00404890 53 push ebx

:00404891 56 push esi

:00404892 57 push edi

:00404893 89C6 mov esi, eax

:00404895 89D7 mov edi, edx

:00404897 39D0 cmp eax, edx

比较第一部分! ====>D EAX=1357

====>D EDX=9e130943

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

比较第二部分! ====>D EAX=2468

====>D EDX=e4e8a4fe

:00404899 0F848F000000 je 0040492E

:0040489F 85F6 test esi, esi

:004048A1 7468 je 0040490B

:004048A3 85FF test edi, edi

:004048A5 746B je 00404912

:004048A7 8B46FC mov eax, dword ptr [esi-04]

:004048AA 8B57FC mov edx, dword ptr [edi-04]

:004048AD 29D0 sub eax, edx

:004048AF 7702 ja 004048B3

————————————————————————————

【KeyMake之内存注册机】:fly{43th}

中断地址:4E5967

中断次数:1

第一字节:E8

指令长度:5

保存下列信息为注册码:

内存方式EDX

结尾插入字符 - (- 前的为注册码的前半部分,- 后的则为后半部分)

中断地址:4E59AE

中断次数:1

第一字节:E8

指令长度:5

内存方式:EDX

修改内存:

修改地址:4E596C

修改长度:6

原始指令:0F8591020000

修改指令:909090909090

—————————————————————————————

【注册信息保存】:

REGEDIT4

[HKEY_LOCAL_MACHINE\Software\EZWord]

"IDcode"="103B2C1E"

"User"="fly"

"Code1"="9e130943"

"Code2"="e4e8a4fe"

呵呵,把这些信息存为.reg文件导入注册表中应该就是注册版了。^-^

—————————————————————————————

【整 理】:

用户名:fly

申请码:103B2C1E

注册码:9e130943 e4e8a4fe

(出处:嬴政天下整理收藏)

相关文章:

·ASProtect的加密算法初步分析

·MD5算法研究

·Active Ebook Compiler的注册算法

·语音界面2.0算法分析及注册机源码!

·简单算法——小护士 V1.2

·侠客系统修改器1.21破解手记--算法分析

·中文拨号上网计时计费器 V4.12注册算法分析

·加密算法之RSA算法

·加密算法之DES算法

·加密算法之ElGamal算法

相关软件:

·胜新通用人事工资管理系统 V5.01注册码算法

·胜新出纳-支票打印软件 V4.0X 的注册码算法

·胜新现代办公百宝箱 V5.01 的注册码算法

·胜新信函宝典-信封打印软件 V2.02 注册码的算法

·胜新通用企业计划管理系统的注册码算法

·共享软件加密算法库 V3.0

·操作系统内存分配银行家算法模拟系统 XP

→ 特别推荐

→ 热点TOP10

关于我们 |

帮助(?)

| 广告服务 |

版权声明 |

商业合作 |

发展历程 |

加盟我们 |

联系我们

Copyright © 1999-2003

winzheng.com All Rights Reserved.

繁体版:由华琦数码技术提供

Powered

by:MeSky.Net

2003-2004 年,宽带刚刚普及,下载站的文章区是许多人学电脑的第一课堂。
🕰 → 🤖 从那时到现在

当年一篇教程能让一台电脑焕然一新;今天的效率工具换成了 AI。 想知道当下最可靠的 AI 模型怎么选?看 赢政指数——我们用了 28 年的选软件严谨,现在用来评测大模型。

档案性质声明:本页为赢政天下(1998-2011)老文章的历史档案复原, 内容反映当年发表时的原貌——包括当年的技术表述、软件版本与观点,部分方法在今天已不适用或不合规,仅作互联网历史记录与研究用途, 不提供任何形式的下载。原始数据经由公共网络存档(Internet Archive)复原。发现问题请联系我们
← 返回老文章档案 · 软件史档案馆 · 赢政天下站史