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

每组数字所代表的意义如下表:
数字 | 意义
--------+-------------------------------------------------
AAAAA | 产品编号,例:55661为windows pro版 55660为HOME版
BBB | 初级产品序列号的最高有效三位数字
| (见下文)
CCCCCCC | 初级产品序列号的最低有效六位数字以及
| 校验数位的和 (见下文)
DD | 用来验证产品序列号的公开密匙索引.例:PRO版为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的算号器,这需要一定的数学知识和一定的编程功力!

Windows新版算号器技术原理相关推荐

  1. windows xp 算号原理

    windows xp 算号原理: 从Win95起,即Microsoft的产品安装Key从原来的10位数字改为25位字符,这一改动,代表着MS告别了简单的校验和,从此投入了椭圆曲线法的怀抱.从密码学的角 ...

  2. 为什么要有ID发号器、原理是什么以及如何实现?

    一.前言 上一篇文章<如何将一个长URL转换为一个短URL?>中谈到如何将长地址URL转换为短地址URL,其中谈到了一个比较理想的解决方案就是使用发号器生成一个唯一的整数ID,然后转换为6 ...

  3. SAP算号器 license key Developer Access Key 完美解决方案

    本文遵从 GNU GPL 版权协议,任何组织或个人在引用.转载或修改此文档时,敬请保留版权信息及注明出处. 警告:仅限IDES学习.研究使用.严禁商业使用.后果自负. 关健字:SAP license ...

  4. SAP算号器 license key Developer Access Key 完美解决方案(备用)

    Copyright@200803,陈武,chentaoyu@sohu.com,http://www.cnblogs.com/evan 本文遵从 GNU GPL 版权协议,任何组织或个人在引用.转载或修 ...

  5. 黑群晖找不到设备_黑群晖洗白算号器SN、MAC地址

    可算DX3615xs及DS3617xs SN号与MAC号 运行程序 每次执行生成20组SN号,选其中一个即可.祝你好运!!! 生成DS3615xs SN序列号: [1] 生成DS3617xs SN序列 ...

  6. ros路由器l5和l6的区别_routerOS所有正版算号器+l6KEY

    routerOS所有正版算号器+l6KEY 作者: scrappy   正式版本自己去下载.下载地址: http://www.mikrotik.com/download.html ROS算号器使用方法 ...

  7. Wing IDE 6.0 算号器注册机代码

    我开发Python时喜欢用Wing IDE, 然后最近发现Wing IDE升级到6.0版本了, 但是之前能在5.1上用的算号器代码不能用在6.0上了, 所以就上网搜搜是否有相关算号器, 果然, 找到了 ...

  8. 进销存系统单号算号器

    进销存系统单号算号器 1.       单号存储表 DLL 的 SQLCODE 2.       存储过程的 sybase/mssql2005 代码实现 3.       调用存储过程代码 // 单号 ...

  9. OFFICE 2007 序列号 算号器

    OFFICE2007 序列号算号器,已经用过,第一个号码就成功了. 转载于:https://blog.51cto.com/infosec/106370

  10. dell服务器开机账号破解,dell解密595B 2A7B开机密码算号器-BIOS维修网站www.biosrepair.com...

    DELL(戴尔)系列笔记本电脑,如果设置了开机密码或硬盘密码,在开机时,系统将提输入密码.如果忘记密码,将无法开机进入系统:唯一解决办法就是解密. DELL老机器,即以CPU来分类,迅驰CPU以前的机 ...

最新文章

  1. 解决main.o(.data) type RW incompatible with bsp.o(.ARM.__AT_0x24001000) type ZI in er RW_IRAM2.
  2. VTS工具测试指定的testcase函数(以VtsHalKeymasterV4_0TargetTest为例)
  3. AWT架构生成与设计Token
  4. ubantu实现linux命令的实验_C语言实现linux命令---ls
  5. Cell | 大规模多组织转录组学研究揭示长非编码RNA与人类复杂疾病的联系
  6. jsoup爬虫简书首页数据做个小Demo
  7. 优酷爱奇艺回应被处罚;拼多多主体公司法定代表人变更,黄峥退出董事席位;斗鱼发布开源框架Jupiter | 极客头条
  8. 2020 年帮你加薪的 7 个小习惯
  9. c语言作业统计字符,C语言统计字符数(示例代码)
  10. iOS Android 上传代码库+持续集成+单元测试
  11. Fiddler(Web/HTTP调试利器)
  12. 金蝶云php webapi,K/3 Cloud Web API销售出库单PHP完整示例【分享】
  13. Java Lambda 策略模式
  14. nds模拟器电脑版使用教程
  15. jQuery weui 时间选择器datetimepicker只用年月日
  16. 欧式二元期权的定价公式及实现
  17. 刷网课被告非法控制计算机信息系统罪,您好,请问一下网上代刷网课叫非法控制计算...
  18. 【目标检测】57、Dual Weighting Label Assignment | 专为目标检测设计的双权重标签分配
  19. 阿里云智能编码插件Cosy,让你的开发过程既高效又轻松
  20. bzoj2946 [Poi2000]公共串(后缀数组 || 后缀自动机)

热门文章

  1. 邹博机器学习代码分析(1)-线性回归
  2. Unity制作自适应透明背景(PC端)
  3. 阻抗匹配 及 SI9000 使用
  4. Hitool工具烧写程序(按分区烧写)
  5. mac地址对应的厂商
  6. java查看jar包依赖_java项目开发中如何查找到项目依赖的jar包?
  7. cad刷新快捷键_CAD快捷键命令
  8. 计算机系统大作业-程序人生
  9. 利用Python收发邮件
  10. Jsoup爬虫之Java爬虫工具类