微軟序號產生和驗證的技術原理!

來源:互聯網
上載者:User

1.產品ID(ProductID)
  產品ID是由五組十進位數組成,如下:
AAAAA        BBB        CCCCCCC        DD        EEE
52273        005        6861993        09        146

  如果你用“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’,則該產品序號為有效。----【注意1】

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(2^168)才行,但微軟公司設計中存在一個嚴重缺陷,使實際工作量降低到只O(2^28)就可以了。為什麼相差這麼遠?回頭看看2.(3)中的式子:Sign = r - Hash * k ( mod q )通常情況下q可以是很大的值,因此Sign應該也很大,但微軟公司為了減少使用者輸入的產品序號的數量,把Sign的值限死在55 bits,因此,自然也限定了q最多也不能超過56 bits。依此類推,由於k
結論:

我估計所有微軟公司產品的序號產生演算法是一樣的.只是公有密鑰和私人密鑰不同而已,只要我們求出私人密鑰q和k,要產生序號,就容易得多了.新版算號器的作者就是把各個版本的私人密鑰q和k求出來了.

新版算號器的工作流程:
在新版算號器中輸入初級產品ID的範圍,就可以隨機確定產品ID.初級產品ID中的前三位,根據算號啟用成功經驗和統計正版序號的結果,每個版本都有特定數字.例在PRO版中010,011啟用成功機率很高,在HOME版中005,006啟用機率很高.後7位中有一位是效驗位,其它6位隨機指定即可,所以只需輸入6位.接著程式會自動產生一個隨機數,也就是演算法中的r.最後根據上面的演算法,得出產品序號.使用不同的隨機數,對同一個產品ID運算,所得到的序號是不相同的!學過數學的朋友可以看出,這個演算法的複雜度並不高,用現在的電腦,很快就可以算出來,這就是新版算號器速度驚人,準確率高的根本原因!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.