-
您的位置:首页 → 精文荟萃 → 破解文章 → 谈谈用HTML作注册机
谈谈用HTML作注册机
时间:2004/10/15 0:56:00来源:本站整理作者:蓝点我要评论(0)
-
其实很简单的,高手们可以不屑一顾的,其实就是简单的脚本嘛!
最近几天,什么都搞不定,郁闷.....
写篇文章,换个心情吧:)
: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老大,我是完成了我的元旦文章了哦,呵呵,提前完成任务啦!哈哈!
要扔鸡蛋的,要记得母鸡的辛苦;扔番茄的,要记得农民伯伯的辛苦哦,欢迎配套赠送!哈哈!
|
相关阅读
Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么
-
热门文章
去除winrar注册框方法
最新文章
比特币病毒怎么破解 比去除winrar注册框方法
华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)通过Access破解MSSQL获得数据
人气排行
华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)qq相册密码破解方法去除winrar注册框方法(适应任何版本)怎么用手机破解收费游戏华为无线猫HG522破解如何给软件脱壳基础教程
查看所有0条评论>>