找回密码
 注册
搜索
热搜: 超星 读书 找书
查看: 1480|回复: 1

全面、深入认识XP激活及最新算号器

[复制链接]
发表于 2004-4-7 00:00:00 | 显示全部楼层 |阅读模式
关于XP激活问题,我搜索了论坛上所有的文章,发现论坛上有很多的模糊观点和误解,即使有很多已经N次激活的朋友,对激活的了解还不是很准确、全面,例如有的人认为反正都是D版,激活与否无所谓,有的人认为激活后,硬件不能换了,想升级也不敢,还有的人认为现在激活了,重装后就不一定还能激活了等等。其实激活技术只是在XP启动时或者其它相关软件行前时进行的一个小小的检查,以证明我们是合法拥有的,仅此而已。不过有各种误解也是可以理解,毕竟对于大部分的用户来说,要完整地理解激活的原理及运行机制是很困难的,所以这里我把激活方面的知识系统地整理了一下,便于大家有一个全面、准确的了解。

    无论我们安装的是联想OEM版、上海****VLK版,或是英文VOL版,还是原版,其实都是在和激活打交道,当然我们选择XP后就有三种选择:一是找到免激活的版本,二是通过修改BIOS中的字串安装OEM版本,三就是安装原版+算号激活。我的机器是联想昭阳的本本,最初是联想的OEM版,接着为了巩固计算机英语,我又装了英文的VOL版,但有点遗憾,我的序列号无安装SP2的测试版,加上英文版对中文的兼容性还是不理想,所以我换了上海****版的VLK版,免激活,在线升级等都没有问题,但SP2出来后VLK版还能不能用,我想老盖在梦里都会想这个问题的!于是我现在改用原版+算号激活了,这里还要感谢大番茄提供的算号器!

    大家都知道微软对于Windows操作系统的使用许可一直都有一个限制:一套经过合法授权的Windows操作系统副本只能被安装在一台电脑上,但是事实上很多人都没有遵守这种限制,而激活技术也就是用来保证一个授权只能被安装在一台电脑上的一种手段。因此,我们安装了Windows XP的30天之内,如果想继续使用Windows XP就必须激活它。在激活的过程中,系统会结合硬件的详细配置和安装操作系统后生成的PID(Product ID,产品ID)号码,然后根据哈西算法(不可逆)生成一串代码,而我们需要通过把这个代码通过互联网或者电话告诉微软,微软会返回给我们另一个新的号码,用这个号码就可以成功激活windows XP。如果不及时激活,过期后Windows XP将无法使用。在以后启动电脑时,Windows就会把当前正在使用的硬件设备跟激活时所用的硬件设备进行比对,如果硬件设备有很大的变化,我们就不能继续使用我们的Windows XP了,除非我们能跟微软联系,并重新激活。而对于购买的品牌机情况就不同了。一般品牌机在出厂前都预装了OEM版的Windows XP操作系统,并且已经成功激活。这种版本的系统激活则是根据BIOS决定的。我们可以更换任意的硬件(主板除外,其实就BIOS里面的字串),而都不需要再次激活。
  
  那大家都想知道激活技术将会检查哪几种硬件呢?共有10种:显卡,SCSI适配器,IDE控制器(可以说就是主板),网卡及其MAC地址,内存范围(例如0-64MB,64-128MB 等),处理器类型,处理器序列号,硬盘,卷序号(VSN,Volume Serial Number),光盘驱动器。在安装操作系统过程中,安装程序就会检查以上的硬件,并记录下相应的数据,并保存在硬盘上,其实就是WPA.dbl文件。在以后激活过程中,这个号码和PID 会被用来生成一个25位的字符串,并发送出去。而如果我们安装的是集成了SP1的Windows XP,或者在装好XP后先装了SP1再激活,那么在激活过程中还需要发送产品密钥(就是在安装操作系统过程中输入的一串字母和数字组合)给微软,这将会屏蔽掉一些网络上流传广泛的泄漏出来的产品密钥,使得用这些序列号安装的产品无法被激活。在以后Windows每次启动时,都会重复检查这些硬件,以确保Windows是在同一台电脑上运行。同样的,如果我们格式化了硬盘并重新安装Windows XP,我们就需要再次激活,因为之前保存在硬盘上的激活号码已经没有了(也就是Windows\\system32\\WPA.dbl文件没有了),我们要重新取得。

    那么“同一台电脑”是什么的准确概念?如果激活技术检查这十类设备都在,那么计算机就可以正常启动且不需要重新激活,其实只要能有七个以上(含七个)都没变,那激活技术都会认为这还是“同一台电脑”。不过网卡比较特殊,网卡设备在这十类设备中占两个。还有一点需要注意,在前面我说的是“只要能够有七个以上(含七个)都没改变”,而不是“有三个设备改变了”,这是因为激活技术判断是否同一台电脑是看还没有改变的设备有多少,而不是看已经有多少设备改变。因此如果我们在已有光驱的情况下再添加进一个光驱,这并不会影响激活技术的判断,相反,如果我们用一个新的光驱替换了已有的光驱,这就会被激活技术认为是有一个设备发生了改变。因此,如果我们只是想往电脑中装入更多的设备,那并不用担心激活,相反,如果想把装进去的设备拿出来就要注意了。如果我们替换了以上十类中的某一设备,不过以后激活技术就不会再次询问该类型的设备了。所以如果我们喜欢,我们可以每周换一次新光驱,而不用担心换的次数太多会导致重新激活。

    如果有朋友的硬件改动太多会怎么办?在Windows启动的时候已经变动了大部分硬件,我们可以分两种情况来看:

    1、对于没有装SP1 的计算机,我们只能启动系统到安全模式下,然后激活技术会要我们通过电话激活Windows。首先我们要抄下一串50位的数字,然后打免费电话到微软的激活中心,把我们抄下的数字告诉接线员,并从接线员那里获得一串42位的数字,我们把获得的数字输入电脑,然后就可以成功激活我们的Windows。

    2、如果我们的Windows XP已经安装了SP1 ,情况就简单多了,系统仍然可以正常启动,并且我们有三天的时间通过网络重新激活。

    还有我们重装系统,暂时不考虑用GHOST作备份,我们这里要深入了解如果硬盘被格式化了会怎样?其实在硬盘上会纪录两样数据:硬盘自己的序列号,还有硬盘上分区的卷序号(VSN)。 VSN数据保存在每个分区的第一个扇区,因此每当我们格式化过这个分区后,分区的VSN纪录就会有变化。如果我们能在格式化分区前记住该分区的ID,那么以后可以用软件修改新的分区ID为以前纪录的,这样当激活技术询问设备改变的时候我们就可以多一个肯定回答了。首先在命令行模式下进入我们要格式化的分区,例如D盘,然后直接输入“VOL”并按回车,记下屏幕上显示的VSN(例如:F8AA-63DE),然后格式化硬盘。格式化好之后在这里下载一个免费的,用于修改硬盘分区VSN的软件:Volume ID,然后在命令行下运行它,比如我们要把D盘新的VSN修改成我们之前纪录的F8AA-63DE,那么我们就可以在命令行状态下输入“volumeid d:F8AA-63DE”并回车,接着马上重启动,VSN就修改好了(记得要在激活系统之前进行啊)。还有一件事会使得分区的VSN改变,那就是分区文件系统的转换,不管是用系统自带的convert.exe把FAT文件系统转换为NTFS还是用分区魔术师把NTFS转换为FAT,都会使得分区的VSN发生改变。因此如果我们的Windows XP安装在FAT文件系统的分区上,但我们又想把文件系统转换为NTFS,那这个操作最好能在激活系统前完成,这样激活技术检查系统的时候我们硬件就没有一个变动了。如果我们已经激活了系统,那也可以考虑使用前面提到的Volume Id软件来修改VSN。接下来备份Windows\\System32文件夹中的WPA.DBL 和WPA.BAK两个文件也是很有用的。这两个文件记录了关于产品激活的相关信息,而备份后,一旦该文件被损坏,或者我们覆盖安装了系统,就可以重启动到命令行模式下把这两个备份文件恢复回去,避免了再次激活。然而这种方法只在小范围内有效,这个文件中记录的信息只能满足于特定的Windows 安装,而一旦电脑上硬件有变动,则根本无法达到效果。 还有很多朋友现在用移动硬盘,像我现在有一个20G的IBM移动硬盘,由于我们使用移动硬盘最多还是为了存储和交换数据,同时操作系统都安装在固定的非移动硬盘上,因此移动硬盘的插拔并不会影响激活技术的运作。

    还有的朋友更换了主板,这就等于更换了IDE控制器,并且通常换主板的朋于或许会换一个更快更新的处理器。如果我们的处理器内建有一个序列号(例如奔腾3 CPU),这就意味着我们变动了三个硬件(就算我们更换的处理器部包括内建的序列号,例如Athlon,这也是一样的)。如果我们同时还添加了内存,或者主板带有SCSI适配器,我们就会有四到五个硬件变动了,因此我们一定要尽量保证网卡没有更换,这样能为我们多争取两个硬件不变。如果我们的新主板集成了显卡(通常肯定也会集成网卡),那么基本上我们的硬件就全部发生了变化了。在这种情况下,我们并不是不能更换太多硬件或者无法继续使用Windows XP,电话激活就是为这种情况准备的,当然,这也是一个比较极端的例子。

    如果我们添加了新的硬件设备,并且这设备是在上面的十种类别中提到的,例如硬盘,那么启动时激活技术还能检测到原来的旧硬盘的情况下(哪怕旧硬盘被接到从盘的位置),这是允许的。但是如果我们格式化了作为从盘的旧硬盘,并把新硬盘作为主盘进行一次全新安装,计算硬件Hash并且发送到微软的就是我们现在作为主盘的新硬盘ID了。这意味着这种类型的设备已经不匹配,并且我们将多一个硬件改变。如果这个改变积累到一定程度,我们就不能通过网络重新激活了,而是要通过电话。因此,从激活技术的角度看来,添加硬件的最好方法是把新硬件作为“附属”来添加。举例来说,如果我们想要添加一个光盘驱动器,那么我们最好在保留原光驱的前提下把新的光驱作为从盘,甚至如果有必要的话,要把旧的光驱移动到主盘的位置。XPInfo 是一个很有用的程序,可以用图形界面的方式告诉我们哪些类型的硬件设备已经在系统启动时激活技术的询问中得到了肯定。

      这个问题大家以前都不肯定,这里让我给一个明确的答案:Windows XP 零售版的授权是永久有效的,这就是说,如果愿意,我们可以把该产品一直用下去。但是微软也承认,电脑是需要升级的。在我们第一次激活Windows 后的120天里,如果我们的硬件设备没有任何改变,或者改变也都在可接受的范围内的话,我们不用重复联络激活中心,120天后,所有的记录都会被清空,我们可以使用此时的硬件配置作为基准(baseline)重新开始统计硬件的变化。如果我们购买了一台新的电脑,我们可以把Windows XP从我们原来的电脑上删除,然后安装到新的电脑上,但是我们需要通过电话重新激活它,并且解释一下我们的原因,除非像前面我们提到的,从我们第一次激活算起已经过了120天。对于一些特殊许可的Windows 产品,可能会有比上述更多的限制。例如OEM版的Windows XP 是跟我们购买的计算机捆绑在一起的,作为一个整体,因此该版本的Windows XP不能在其他电脑商安装。其他的一些许可制度(例如教育版)也以其他不同的方式授权。这些就不是激活技术的问题了,而是许可证制度的问题,不属于激活技术的讨论范围。

      如果我们的Windows XP是用非常“著名”的盗版序列号之一安装的,就是只能安装不能激活的序列号,那么我们将装不上SP1 ,并且很大一部分盗版序列号安装的产品将不再允许访问Windows Update网站。安装的 SP1会检测我们的系统是否经过破解而绕过了激活,这样的系统在安装SP1 后会需要重新激活,或者根本安装不上,对于大部分用户来说,可能很多人在所谓的简体中文免激活XP上安装简体中文版SP1的时候会因为语言不符而无法安装,这就是一种破解版的典型。 通常,合法的Windows 产品在安装SP1 后并不会要求重新激活。

       另外我们要知道激活技术不会向微软发送任何我们的私人信息,虽然在激活时有注册的相关选项,但是这跟激活技术没有任何联系,并且完全是自愿的。如果我们使用电话激活,我们也不用提供任何私人信息。激活技术也不会每天都通过电话或者互联网联络激活中心,验证系统是否还是原来的硬件配置是在系统启动的时候由Windows 自己进行的。如果硬件的配置变化太大,我们就需要通过电话重新激活,Windows 本身绝对不会自己联系微软,除非我们选择通过网络激活我们的产品。激活技术的采用并不意味着微软可以关闭我们的电脑甚至损毁我们的数据(他们甚至根本碰不到我们的任何数据)。如果系统需要我们通过电话重新激活,我们同样可以启动到安全模式下去备份我们的数据。使用激活技术的Windows 产品并不是一种“租借”的使用,我们不需要每使用两年就向微软交一次钱,相反,在得到许可的情况下我们可以把Windows XP一直使用下去。


    我正在写微软序列号生成和验证方面的论文,恰好新版算号器的出现,大家对新版算号器的高效和准确感到吃惊,为此,我和试着大家分析一
下新版算号器的技术原理!

1.产品ID(ProductID)
  产品ID是由五组十进制数组成,如下:
AAAAA-BBB-CCCCCCC-DDEEE
  如果你用“ProductID”搜索注册表,你会发现一个与你安装的软件有关的产品ID。在Windows的控制面板里的系统里,你可以找到Windows操作系统的产品ID。

每组数字所代表的意义如下表:
数字 | 意义
--------+-------------------------------------------------
AAAAA | 产品编号,例:55661为windows pro版 55660为HOME版
BBB | 初级产品序列号的最高有效三位数字
| (见下文)
CCCCCCC | 初级产品序列号的最低有效六位数字以及
| 校验数位的和 (见下文)
DD | 用来验证产品序列号的公开密匙索引.例RO版为22,VLK版为23
EEE | 随机值(用于电话激活时,产生不同的安装ID)
在上面的CCCCCCC部分中,由一个校验数位和六个数字组成。校验数位是这样计算得到的:将所有数位相加,包含一个检验数位,可以被七整除。

例:初级产品序列号的最低有效六位数字是728439
7 + 2 + 8 + 4 + 3 + 9 = 33
所以检验数位为2,因为
7 + 2 + 8 + 4 + 3 + 9 + 2 = 33 + 2 = 35
所得到的结果35可被七整除。所以产品ID中的CCCCCCC部分的结果为7284392。

2、产品序列号组成
这25位的序列号,是用来区分每份微软产品的产品序列号。产品序列号由五组被“-”分隔开,由字母数字混合编制的字符串组成,每组字符串是由五个字符串组成。如下:

FFFFF-GGGGG-HHHHH-JJJJJ-KKKKK

每个字符是取自于以下24个字母及数字之中的一个:
B C E F G H J K M P Q R T V W X Y 2 3 4 6 7 8 9
采用这24个字符的原因是为了避免混淆相似的字母和数字,如I和1,O和0等,减少产生不必要的麻烦。
这25个字符的产品序列号是由长度为114bits用二进制表示的产品序列号用Base-24进行编码得到的。114bits的二进制产品序列号按高位在后排列,各bit定义如下:

[ X XXXXXXXX XXXXXXXX XXXXXXXXXXXXXXXXXX ] Total 114 Bits
| | | \\ 55 Bits Sign
| | \\ 28 Bits Hash
| \\ 30 Bits Serial \\ 31 Bits Data
\\ 1 Bits Flag

Flag: 不明标志,目前所见的各类Key中这一位总是为0。
Serial:产品ID的缩写,转成十进制表示为AAAABBBBBB,对应显示为:
零售版:xxxxx-AAA-BBBBBBx-xxxxx
OEM版: xxxxx-OEM-0AAAABx-BBBBB
以上31bits总称为Data,是产品序列号中的基本部分。
Hash:Data经特定处理得到的结果,见后文。
Sign:Hash值的椭圆曲线签名,见后文。

3、椭圆曲线签名算法
所谓的椭圆曲线是指这样一类曲线方程:
Y2 + a1XY + a3Y = X3 + a2X2 + a4X + a6
在密码学里用的是它的两个特例,而微软公司用的更是特例中的特例:
Y2 = X3 + aX +b (mod p)
当a、b、p选定后,就可以确定一个椭圆曲线,再选择一个生成点G(gx,gy),于是,存在一个最小的整数q使得q×G=0,然后,再任意选择一个整数k<q,求出点K(kx,ky)=k×G,这样椭圆曲线签名算法的Key就全生成了:
公开密钥为:a,b,p, G(gx,gy), K(kx,ky)
私有密钥为:q,k

要对Data签名时:
(1).先任意选择一个整数r<q,求点R(rx,ry)=r×G;
(2).将Data、rx、ry进行SHA-1(4)运算,取结果中的28位得到Hash;
(3).求Sign = r–Hash×k (mod q);
(4).把Data、Hash、Sign三个数组合编码后得到25位的产品序列号。

验证产品序列号时:
(1).把25位产品序列号译码后,拆分为Data、Hash、Sign;
(2).求点R(rx,ry)=Sign×G + Hash×K(mod p);
(3). 将Data、rx、ry进行SHA-1运算,取结果中的28位得到Hash’;
(4).如果Hash=Hash’,则该产品序列号为有效的。

4. 公开密钥
从前文可以看出,为了验证产品序列号,微软公司必须公开椭圆曲线签名算法中的公开密钥。我们可以从Windows XP安装光盘中的文件pidgen.dll的BINK资源里找到(其他产品如Office则被包在*.msi里)。而且一共有两组。从目前已知的Key组合来看,第一组公开密钥是用以零售版本的,第二组公开密钥则用于OEM版本。两个产品的Key能否通用就在于对应的公开密钥是否相同,比如中文版的Windows 2000的Pro/Srv/AdvSrv的第二组密钥也是相同的,即一个中文Windows 2000 Pro的OEM版的Key,可同时供 中文Windows 2000 Srv/Adv的OEM版使用。
  
5.破解及其难度
要破解产品序列号生成算法,必须从微软公司公开的密钥中求出对应的私有密钥,即只要求出q和k即可。从BINK中公开的密钥来看,p 是一个384 bits的质数,看起来计算量好像至少要O(2168)才行,但微软公司设计中存在一个严重缺陷,使实际工作量降低到只O(228)就可以了。为什么相差这么远?回头看看2.(3)中的式子:Sign = r - Hash * k ( mod q )通常情况下q可以是很大的值,因此Sign应该也很大,但微软公司为了减少用户输入的产品序列号的数量,把Sign的值限死在55 bits,因此,自然也限定了q最多也不能超过56 bits。依此类推,由于k<q,所以k也不能超过56 bits,也就是说我们面对的只是两个最多256的数据而已。把q和k求出来了,就可以根据上面所述的算法,编写出微软公司所有采用该技术产品的算号器!

结论:

我估计所有微软公司产品的序列号生成算法是一样的.只是公有密钥和私有密钥不同而已,只要我们求出私有密钥q和k,要生成序列号,就容易得多了.新版算号器的作者就是把各个版本的私有密钥q和k求出来了.

新版算号器的工作流程:
在新版算号器中输入初级产品ID的范围,就可以随机确定产品ID.初级产品ID中的前三位,根据算号激活成功经验和统计正版序列号的结果,每个版本都有特定数字.例在PRO版中010,011激活成功机率很高,在HOME版中005,006激活机率很高.后7位中有一位是效验位,其它6位随机指定即可,所以只需输入6位.接着程序会自动生成一个随机数,也就是算法中的r.最后根据上面的算法,得出产品序列号.使用不同的随机数,对同一个产品ID运算,所得到的序列号是不相同的!学过数学的朋友可以看出,这个算法的复杂度并不高,用现在的计算机,很快就可以算出来,这就是新版算号器速度惊人,准确率高的根本原因!

完美算号器!
关于算号激活的问题,大家一直争论不已,最主要就是XP的激活问题,XP在装了SP后是不可以激活的了,原因就是微软加了序列号检测机制,也就是在激活过程中,序列号本身也要发送到微软的激活服务器进行验证.我估计验证机制可能采用了这两种方法的其中一个:第一:微软有个序列号出厂数据库.对于要激活的系统所用的序列号没有出厂记录,就说明该序列号是由算号器生成的,不给予激活.我估计这个方法可能性不大!第二:对序列号本身存在一个检测机制!也就是说,算号器算出来的序列号,只有符合某一定规律的,才能够激活,而这个机制只有微软公司掌握,破解了这个机制就有可能制作出可以算出真正正版的序列号的算号器,换一句话就是可以制作出装了SPX都可以激活的最完美的算号器!!!破解这个检测机制的最大希望就是上面所说的r!采用特定的产品ID只有配合特定的r算出来的序列号,才是正版的序列号!要破解这个检测机制,方法就是收集大量的正版序列号,分析出产品ID和r的关系,就可以制作出最完美的算号器!所以我估计最完美的算号器,将在不久的将来面世!我希望这个完美算号器在我们龙卷风诞生!!

其实算号器的编写并不难的,只要求出各个版本的私有密钥q和k(这需要一点时间),利用上面的算法就可以制作出NIN1的算号器,这需要一定的数学知识和一定的编程功力!而我不怎么会编程.各位龙卷风的朋友一起努力制作出最完美的NIN1算号器吧!不要老是让老外走在我们前面.
本人很奇怪,关于算号原理的文章,网上一早就有了,但是刚出来的算号器,效率奇低,不知道它是采用什么算法的.而新版算号器直到最近一段时间才放出来.对本文有兴趣及一定见解的朋友请回帖留下你的联系方式,欢迎大家一起探讨.本人水平有限,如有错漏之外,敬请指出及原谅!

本文如要转贴,请注明原作者及出处!

Artex
From long-jf

下载新版算号器
回复

使用道具 举报

发表于 2004-5-13 00:00:00 | 显示全部楼层
请问:windows Xp的产品序列号好象是七位,根据你的算号器只有能够产生5位,望指点!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|网上读书园地

GMT+8, 2024-5-14 18:13 , Processed in 0.299483 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表