老文章档案 · 2003 年

谈谈用HTML作注册机

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

其实很简单的,高手们可以不屑一顾的,其实就是简单的脚本嘛!

最近几天,什么都搞不定,郁闷.....

写篇文章,换个心情吧:)

:P

上次说到:

用HTML作注册机的好处很多,限制也很多!

其好处是:

1、不需要那些动态连接库啦,因为IE都有了嘛!

2、界面可以美观阿,发挥你网页制作的优势!

3、作个网页链接简直是易如反掌,谁不会!

4、不怕病毒哦!

现在听说注册机都被那些自以为是的杀毒软件当成病毒了,呵呵,怎么活阿,用网页总不会被杀吧!不然,你就把windows杀了吧!呵呵!再说,最近深受上次破解时,系统受到的病毒袭击,惨不忍睹!为了不让大家分享幸运的没被杀掉的virus,所以,这个最好了!

5、还有就是可以在线注册了,呵呵,只要你不怕服务器当掉,就放到网上在线注册吧!

6、可以看到源代码哦。如果你愿意的话,就可以显示一下算法的过程啊。

7、最后就是新奇了,呵呵!哇,原来这个也可以啊!!!

再讲讲限制啦:

1、首先就是语言的限制。

网页上能用的脚本语言就这么几种,VB Script、Java Script、php、cgi、perl等等,直接放在网页里的,简单的应该是VBS和JS了。这哥俩是当今最流行的脚本病毒的语言哦。可惜啊,没有pascal的脚本。

2、运行速度比较慢。

比起那些编译好的程序,解释性的东西总是慢一拍,没办法啊。只要是算法做的好,不要用穷举法,大部分都搞的定,毕竟比你掰手指强多了!呵呵!不信,你试一试!

3、语言的限制,就是操作的限制。

我使用VBS所以我就讲讲VBS的限制了,至于JS我就不清楚了,找个时间看看。VBS的限制就在于函数的局限,语言本身的特性限制。比如说,VB的不直接支持UINT,晕,我每次都要设计函数做转换,想想人家C,555555。VB还不支持移位的操作,最好的例子就是那个GreRAM 2.12了,位操作咋办呢,呵呵,要变通哦!看我后面的操作吧,反正简单的都可以搞定啊,哈哈!

4、源代码的显示。

HTML的源代码,谁都可以看到,如果你不想让别人看到源代码,怎么办啊,要么用第三方软件加密,要么,就不要用HTML了:(

5、......还有吗?我没想到啦,要提醒我哦。

下面开始就是实例操作了。

首先,选个对象吧,受伤的是谁呢。!@#$#%^%&&^*&*)*(_+||~ 想到了,就是GreRAM了,拿它开刀了,不好意思哦,谁叫它用到了UINT和位操作,本来我想用ONLocPlus的,呵呵,算它运气好,逃过一劫!!!

================================Let''s Go!Go!Go!=========================================

软件名称:GreRAM v2.12 Bulid 020620

软件简介:GRE学习软件,我不清楚怎么用,因为我的英语很差啊。呵呵!

软件使用限制:注册软件以后,可以得到如下的操作

使用快捷键进行笔记本录入操作,免去了繁琐的鼠标键盘切换;在标准或全屏界面下即可实现笔记本单词的加入、删除操作!

设定"自动浏览"功能中自动逐词浏览速度!

在自动浏览单词的同时,播放取自W-M词典的的同声真人语音!

退出时自动保存设置及进度,无需每次运行后重新设置!

通过"在线更新"功能,从Internet上下载最新的程序、词库、语音,以及网友自行开发的功能性词库!

为上班族专门设计的快速隐藏功能,一键隐藏精简界面!

注册文件位置:在同一目录下的system.cfg文件里记录了加密后的注册信息。不能删除此文件。

破解作者:DarkNess0ut[FCG]

破解工具:OllyDbg Stud_PE

破解结果:通过研究算法,算出软件的注册码,编写注册机。

破解说明:首先要说明的是我是根据nEO的提示直接在CALL 0040EFD7下的断点,然后是感谢smartsl的可逆算法,节省了不少研究时间哦。

破解过程:

1、查壳是第一步,拖入Stud_PE让它研究研究,呵呵,VC++ 6 ,没壳哦,对自己的算法有自信!

2、由于知道了断点,不用研究了吧,直接用OllyDbg打开Ctrl+G,跳转,F2,断点,F9,Go!

运行,注册,停下来啦。填好注册码,DarkNess0ut,787878-565656,注册,开始了!

//注明:这一段不是注册时的代码而是删除笔记内容的代码,因为内容都是一样的,所以就copy了

//其实,我是看错了,呵呵,将错就错吧

//这段是准备工作,读取数据

:0040EFCB E872270100 Call 00421742

:0040EFD0 8B4E20 mov ecx, dword ptr [esi+20]

:0040EFD3 51 push ecx

:0040EFD4 FFD7 call edi

:0040EFD6 50 push eax

* Reference To: MFC42.Ordinal:0B30, Ord:0B30h

|

:0040EFD7 E822290100 Call 004218FE

:0040EFDC 8B9074370000 mov edx, dword ptr [eax+00003774] //左边的注册码hex

:0040EFE2 8B4620 mov eax, dword ptr [esi+20]

:0040EFE5 50 push eax

:0040EFE6 8954241C mov dword ptr [esp+1C], edx

:0040EFEA FFD7 call edi

:0040EFEC 50 push eax

* Reference To: MFC42.Ordinal:0B30, Ord:0B30h

|

:0040EFED E80C290100 Call 004218FE

:0040EFF2 8B5C241C mov ebx, dword ptr [esp+1C] //用户名

:0040EFF6 8B8878370000 mov ecx, dword ptr [eax+00003778] //右边的注册码hex

:0040EFFC 894C2428 mov dword ptr [esp+28], ecx

:0040F000 33C9 xor ecx, ecx //初始化ECX=0

:0040F002 8B6BF8 mov ebp, dword ptr [ebx-08]

:0040F005 33FF xor edi, edi //初始化字符串索引

:0040F007 85ED test ebp, ebp

:0040F009 7E22 jle 0040F02D

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

|:0040F02B(C)

|

:0040F00B 8A141F mov dl, byte ptr [edi+ebx] //依次取字符

:0040F00E 33C0 xor eax, eax

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

|:0040F01C(C)

|

//查表,看看是否在预定的字符串的范围内

//Table="hDorai%O>x[{PuvwKtC]X!7;F5''""}4W@#klfQq$gR68zA/?yHITUV&*G)`SZm3<.:Bb0=+\JepnjE^McLsd|9,-_~Y12N("

:0040F010 3A9084FC4200 cmp dl, byte ptr [eax+0042FC84]

:0040F016 7406 je 0040F01E

:0040F018 40 inc eax //纪录字符在此表的位置=〉eax

:0040F019 83F85E cmp eax, 0000005E //看看是否出了范围了

:0040F01C 7CF2 jl 0040F010

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

|:0040F016(C)

|

:0040F01E 8D0C89 lea ecx, dword ptr [ecx+4*ecx] //做累加ecx=5*ecx

:0040F021 47 inc edi //索引+1

:0040F022 3BFD cmp edi, ebp //有没有到尾部啦!

:0040F024 8D1489 lea edx, dword ptr [ecx+4*ecx] //再加edx=ecx*5

:0040F027 8D4C9005 lea ecx, dword ptr [eax+4*edx+05] //再加ecx=4*edx+eax+5

:0040F02B 7CDE jl 0040F00B //算完了,就继续

//用户名的计算到此为止了,ECX=为计算总和,计算过程中会大于0xFFFFFFFF

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

|:0040F009(C)

|

:0040F02D 8BC1 mov eax, ecx //进一步计算

:0040F02F F7D0 not eax //取反

:0040F031 25FFFF0000 and eax, 0000FFFF //eax & 0xFFFF 取低位

:0040F036 8BD0 mov edx, eax //edx=eax

:0040F038 C1E910 shr ecx, 10 //ecx右移16位

:0040F03B F7D2 not edx //edx取反

:0040F03D 23D1 and edx, ecx //edx=edx & ecx

:0040F03F F7D1 not ecx //ecx取反

:0040F041 23C8 and ecx, eax //ecx=ecx & eax

:0040F043 03D1 add edx, ecx //edx=edx + ecx

:0040F045 C1E210 shl edx, 10 //edx左移16位 得高位

:0040F048 8BFA mov edi, edx //edi就是高位值了

:0040F04A 33D2 xor edx, edx

:0040F04C 0BF8 or edi, eax

:0040F04E 8BC7 mov eax, edi

:0040F050 25FFFF0000 and eax, 0000FFFF //eax低位值

:0040F055 33DB xor ebx, ebx

:0040F057 89442424 mov dword ptr [esp+24], eax //保存eax,备用

//至此,用户名产生的数据的低位保存,作为计算左注册码的校验码

:0040F05B B81F000000 mov eax, 0000001F //开始位操作eax=0x1F

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

|:0040F081(C)

|

:0040F060 BD01000000 mov ebp, 00000001

:0040F065 8BC8 mov ecx, eax

:0040F067 D3E5 shl ebp, cl //左移cl位

:0040F069 8B4C2418 mov ecx, dword ptr [esp+18] //你输入的注册码了

:0040F06D 83E802 sub eax, 00000002 //eax-=2

:0040F070 23E9 and ebp, ecx //ebp=ebp & ecx

:0040F072 B910000000 mov ecx, 00000010 //ecx=0x10

:0040F077 2BCB sub ecx, ebx //ecx=ecx-ebx

:0040F079 D3ED shr ebp, cl //右移cl位

:0040F07B 0BD5 or edx, ebp //edx=edx | ebp

:0040F07D 43 inc ebx //ebx++

:0040F07E 83F8FF cmp eax, FFFFFFFF //循环比较

:0040F081 7FDD jg 0040F060

:0040F083 3B542424 cmp edx, dword ptr [esp+24] //计算结果edx与低位值比较

:0040F087 743D je 0040F0C6 //ok的继续计算下一个注册码

:0040F089 8B442418 mov eax, dword ptr [esp+18] //否则,将注册码与0x80000000

:0040F08D 0D00000080 or eax, 80000000 //取或运算,将上述的运算再来一边

:0040F092 33DB xor ebx, ebx

:0040F094 89442418 mov dword ptr [esp+18], eax

:0040F098 B81F000000 mov eax, 0000001F

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

|:0040F0BE(C)

|

:0040F09D BD01000000 mov ebp, 00000001

:0040F0A2 8BC8 mov ecx, eax

:0040F0A4 D3E5 shl ebp, cl

:0040F0A6 8B4C2418 mov ecx, dword ptr [esp+18]

:0040F0AA 83E802 sub eax, 00000002

:0040F0AD 23E9 and ebp, ecx

:0040F0AF B910000000 mov ecx, 00000010

:0040F0B4 2BCB sub ecx, ebx

:0040F0B6 D3ED shr ebp, cl

:0040F0B8 0BD5 or edx, ebp

:0040F0BA 43 inc ebx

:0040F0BB 83F8FF cmp eax, FFFFFFFF

:0040F0BE 7FDD jg 0040F09D

:0040F0C0 3B542424 cmp edx, dword ptr [esp+24] //重复上面的运算,过程相同

:0040F0C4 756B jne 0040F131 //要是还是不相同的话,呵呵,886

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

|:0040F087(C)

|

:0040F0C6 8B6C2428 mov ebp, dword ptr [esp+28]

:0040F0CA 33D2 xor edx, edx

:0040F0CC C1EF10 shr edi, 10 //右移操作,获得右边注册码的校验码

:0040F0CF 897C2424 mov dword ptr [esp+24], edi

:0040F0D3 33DB xor ebx, ebx

:0040F0D5 B81F000000 mov eax, 0000001F //同样的操作,这种事情当然有计算机干了

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

|:0040F0F7(C)

|

:0040F0DA BF01000000 mov edi, 00000001

:0040F0DF 8BC8 mov ecx, eax

:0040F0E1 D3E7 shl edi, cl

:0040F0E3 B910000000 mov ecx, 00000010

:0040F0E8 83E802 sub eax, 00000002

:0040F0EB 2BCB sub ecx, ebx

:0040F0ED 23FD and edi, ebp

:0040F0EF D3EF shr edi, cl

:0040F0F1 0BD7 or edx, edi

:0040F0F3 43 inc ebx

:0040F0F4 83F8FF cmp eax, FFFFFFFF

:0040F0F7 7FE1 jg 0040F0DA

:0040F0F9 3B542424 cmp edx, dword ptr [esp+24] //再次比较

:0040F0FD 745B je 0040F15A

:0040F0FF 81CD00000080 or ebp, 80000000 //不等的 注册码 OR 0x80000000

:0040F105 33DB xor ebx, ebx

:0040F107 B81F000000 mov eax, 0000001F

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

|:0040F129(C)

|

:0040F10C BF01000000 mov edi, 00000001

:0040F111 8BC8 mov ecx, eax

:0040F113 D3E7 shl edi, cl

:0040F115 B910000000 mov ecx, 00000010

:0040F11A 83E802 sub eax, 00000002

:0040F11D 2BCB sub ecx, ebx

:0040F11F 23FD and edi, ebp

:0040F121 D3EF shr edi, cl

:0040F123 0BD7 or edx, edi

:0040F125 43 inc ebx

:0040F126 83F8FF cmp eax, FFFFFFFF

:0040F129 7FE1 jg 0040F10C

:0040F12B 3B542424 cmp edx, dword ptr [esp+24] //再次重复,不等的886

:0040F12F 7429 je 0040F15A //相等了,有你美的!呵呵!

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

|:0040F0C4(C)

|

:0040F131 51 push ecx

:0040F132 8BCC mov ecx, esp

:0040F134 8964242C mov dword ptr [esp+2C], esp

* Possible StringData Ref from Data Obj ->"您还没有注册,无法使用该功能删除笔记本内容。"

|

:0040F138 6804F64200 push 0042F604

分析至此,可见最主要的就是那段校验码的可逆分析了,呵呵,有smartsl算好了

抄吧,不要告我抄袭哦!

以下是smartsl的算法分析:

算法说明

入口参数是dword ptr [esp+18]

从上面的程序看出这段就是输入的第一个框的数(10->16进制转换)|0x80000000的结果

注意:0x80000000=10000000000000000000000000000000B

下面举例说明,假如你输入的数字是1234,十六进制就是4D2H,二进制是10011010010B

跟0x80000000或运算得到800004D2H

Y Y Y

1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 B=1000000000001001B=8009H

10000000000000000000010011010010B=800004D2H

11111111111111111111111111111111B=FFFFFFFFH

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 B=1111111111111111B=FFFFH

10 F E D C B A 9 8 7 6 5 4 3 2 1

最后得到结果8009H

注意上面的eax跟edi都是偏移量,但是eax每次减2,edi每次加1

其实就是把这个入口参数的右数偶数位全部取出组成新的数

逆算法的C语言实现

注意因为我是把2段算法结合考虑的,所以最高位为0时跟为1时是有区别的!

以下内容为程序代码:

unsigned long sub2(unsigned long x)//用于解密一个长整型数

{

int i;

unsigned long y,z;

y=0;

for(i=0;i<32;i++)

{

y<<=1;

z=x>>(30-i)/2;

if(i%2==0&&i!=0)//不考虑第一位

{

y+=z&1;

}else

{

if(i==0&&z==0)

{

//如果待解密数最高位是0,只有1种情况

}else

{

y+=rand()%2;//其余无用位或最高位为1均可加入随机数

}

}

}

return y;

}

文章分析完了,下面是算号器的制作.

有了上述的算法,我就开始写VBS的算号器了

本来我只是想直接把代码写入HTML的模版里的,但是为了完整的一篇文章,就都写了

不想看的直接跳过哦

首先用vbs脚本来作简易的注册机,方便编写啦

NAME=InputBox("Input your Register Name:" & vbCRLF & _

"Then Name Length BETWEEN 6 AND 12!", _

"KeyGen By DarkNess0ut[FCG]","DarkNess0ut" )

输入注册用户名称

////////////////////////////

Table="hDorai%O>x[{PuvwKtC]X!7;F5''""}4W@#klfQq$gR68zA/?yHITUV&*G)`SZm3<.:Bb0=+\JepnjE^McLsd|9,-_~Y12N("

///////////////////////////这个就是那张字符表了

ECX=0

FOR I=1 To Len(NAME)

EAX=INSTR(TABLE,MID(NAME,I,1))-1

ECX=ECX*100+5+EAX

DO WHILE ECX>4294967296

ECX=ECX-4294967296

LOOP

''溢出的处理

''4294967296=&H100000000

''因为VB对无符号数不感冒,所以只能这样处理了

NEXT

''下面的是算法的翻译而已

EAX=ECX

EAX=NOTOP(EAX) AND 65535

''not 的操作也要考虑溢出,哎!

EDX=EAX

IF ECX > 2147483648 THEN

ECX=(ECX-2147483648) \ 2^16 + 32768

ELSE

ECX=ECX \65536

END IF

''还有取得高位的数值,也要考虑溢出

EDX=NOTOP(EDX) AND ECX

ECX=NOTOP(ECX) AND EAX

ESI_L=EAX AND &HFFFF

''低位数据

ESI_H=(EDX+ECX) OR (EAX \ &H100000)

''高位数据

LeftCode=ESI_L

RightCode=ESI_H

InputBox "Left SN =","Box Title",GetLRSN(LeftCode)

InputBox "Right SN=","Box Title",GetLRSN(RightCode)

''用InputBox 可以显示可拷贝的数据,方便copy

Wscript.quit

Function NOTOP(EEE) ''not 操作函数

if (4294967295 - EEE)>&H7FFFFFFF then

NOTOP=4294967295 - EEE - &H7FFFFFFF-1

Else

NOTOP=4294967295 - EEE

END IF

End Function

''由于VB不支持位的操作,smartsl的算法无法直接使用了

''所以要变通一下了.

''我的做法是,比如校验码是1234,那么1234D=10011010010B

''将1234分解成二进制码010011010010十六位,前面不足的补0

''将每一位十六位数的后面随机的插入0或1,组成32位的二进制数

''0 1 0 0 1 1 0 1 0 0 1 0

'' 1 0 1 1 1 0 1 0 0 0 1 0 <-随机数

''011001011110011000001100 <-转成10进制就是注册码了

''最后重新算成10进制数,那就是我们所要的注册码啦!

''GetLRSN函数就是操作的过程

Function GETLRSN(CorCode) ''可逆算法的实现

CODE=CorCode

GETLRSN=0

RANDOMIZE

b8=INT(RND+0.5)

''随机选定是否需要与&H8000或运算

IF b8 THEN

CODE=CODE OR 32768

END IF

FOR I=1 TO 16

BIN=BIN & (CODE MOD 2)

CODE=CODE \2

NEXT

BIN=STRREVERSE(BIN)

''获得二进制码的字符串BIN

FOR I=1 TO 16

RANDOMIZE

BINSN=BINSN & MID(BIN,I,1) & INT(RND+0.5)

NEXT

''组成32位的随机数

FOR I=1 TO 32

GETLRSN=GETLRSN+MID(BINSN,I,1)*(2^(32-I))

NEXT

''最后的组装成注册码啦

IF b8 THEN GETLRSN=GETLRSN-2147483648

''不要忘记溢出哦

End Function

把上述代码copy到一个文件里,改成VBS扩展名,就是脚本文件了

如果装了什么超级解霸的话,我就不知道怎么处理,呵呵!

再验证了上述的结果可以得出注册码以后

我们开始作HTML的注册机了

(好像要讲的才刚刚开始啊,哦,啊,不要扔鸡蛋哦,鸡妈妈生蛋很辛苦的,哈哈)

首先是制作模版啦

我没有艺术的天分啊,做出来的东西,太难看了,多多包涵啊,如果认为"羞辱"了你的眼睛

请自行修改哦.

我用FrontPage做的模版,呵呵,这东西,产生的垃圾代码比较多,还要自己删除哦,我讲讲重点的

最主要的就是看看需要哪些输入框了,自己添加吧

以这个软件为例,需要一个用户名输入(name=ProName)和两个注册码输出(name=ProLeft and name=ProRight),

OK,都是文本框啦,排好位置

再加一个按钮,作为注册码生成按钮吧(name=GetSerialNum) 显示为"赐予我密码吧!FCG",呵呵!

基本的代码框架如下:

GRERAM v2.12 Bulid 020620注册机

KeyGen by DarkNess0ut[FCG]

用户名: 注册码: -

上述显示比较乱,在网页上显示,不知会怎么样:P

其他的HTML代码我就不写了

最后的拼装工作了(将上述的代码放在一起,让网页可以工作)

其实,很简单,讲输入与输出的方向改成由文本框来就行了

以下是完整的代码内容

Keygen.htm

=========================================

我显示了脚本

Sub GetSN()

NAME=ProNAME.value ''由ProName.value来提供用户名

IF NAME="" THEN EXIT SUB

IF LEN(NAME)<6 OR LEN(NAME)>12 Then

MSGBOX "名字太长或太短(要6-12之间的英文可印刷字符)", _

vbokonly,"Name Length Error!"

Exit Sub

END IF

Table="hDorai%O>x[{PuvwKtC]X!7;F5''""}4W@#klfQq$gR68zA/?yHITUV&*G)`SZm3<.:Bb0=+\JepnjE^McLsd|9,-_~Y12N("

ECX=0

FOR I=1 To Len(NAME)

EAX=INSTR(TABLE,MID(NAME,I,1))-1

ECX=ECX*100+5+EAX

DO WHILE ECX>4294967296

ECX=ECX-4294967296

LOOP

NEXT

EAX=ECX

EAX=NOTOP(EAX) AND 65535

EDX=EAX

IF ECX > 2147483648 THEN

ECX=(ECX-2147483648) \ 2^16 + 32768

ELSE

ECX=ECX \65536

END IF

EDX=NOTOP(EDX) AND ECX

ECX=NOTOP(ECX) AND EAX

ESI_L=EAX AND &HFFFF

ESI_H=(EDX+ECX) OR (EAX \ &H100000)

LeftCode=ESI_L

RightCode=ESI_H

ProLeftSN.value=GETLRSN(LeftCode)

ProRightSN.value=GETLRSN(RightCode)

''输出两个注册码

End Sub

Function NOTOP(EEE)

if (4294967295 - EEE)>&H7FFFFFFF then

NOTOP=4294967295 - EEE - &H7FFFFFFF-1

Else

NOTOP=4294967295 - EEE

END IF

End Function

Function GETLRSN(CorCode)

CODE=CorCode

GETLRSN=0

RANDOMIZE

b8=INT(RND+0.5)

IF b8 THEN

CODE=CODE OR 32768

ELSE

END IF

FOR I=1 TO 16

BIN=BIN & (CODE MOD 2)

CODE=CODE \2

NEXT

BIN=STRREVERSE(BIN)

FOR I=1 TO 16

RANDOMIZE

BINSN=BINSN & MID(BIN,I,1) & INT(RND+0.5)

NEXT

FOR I=1 TO 32

GETLRSN=GETLRSN+MID(BINSN,I,1)*(2^(32-I))

NEXT

IF b8 THEN GETLRSN=GETLRSN-2147483648

End Function

''脚本结束

GRERAM v2.12 Bulid 020620注册机

KeyGen by DarkNess0ut[FCG]

用户名: 注册码: -

<>

感谢Smartsl[FCG]的算法提示

=======================================================================

至此,好像结束了,哦哦,忘了,要是发布的话,最好保存为mht格式,这样的话,你的精美图片就可以保留了哦.

后记:

终于写完了,回头看看又是一堆废话,呵呵,要是看了不爽,请告诉我哦,下次精简一点!

*******####@%@#$@%#^$%&*飞来一块砖击中我,"嘿嘿嘿,还有下次吗?叫你灌水!"

其实这个东西很简单,没有什么技术可以探讨的,写这些主要是谈谈自己的做法,当然如果要是想操作操作注册表的话,到是可以聊聊.

不过不要被杀掉就行了,呵呵,现在的杀毒软件,狠着呢!!

peterchen老大,我是完成了我的元旦文章了哦,呵呵,提前完成任务啦!哈哈!

要扔鸡蛋的,要记得母鸡的辛苦;扔番茄的,要记得农民伯伯的辛苦哦,欢迎配套赠送!哈哈!

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

相关文章:

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

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

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

·ClockWise 3.22e注册码算法分析

·CoolClock V1.02注册算法分析

·Directory Scanner v1.5 注册算法分析

·Disk Chief 1.2 简单注册算法分析

·EffeTech HTTP Sniffer 3.2注册算法分析

·eLib2.01算法分析

·EZ MP3 Recorder 1.15 注册算法分析

相关软件:

→ 特别推荐

→ 热点TOP10

关于我们 |

帮助(?)

| 广告服务 |

版权声明 |

商业合作 |

发展历程 |

加盟我们 |

联系我们

Copyright © 1999-2003

winzheng.com All Rights Reserved.

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

Powered

by:MeSky.Net

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

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

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