misc.log

日常茶飯事とお仕事と

プロダクトキーを紐解きたい

インストールされているアプリのプロダクトキーを調査したい、といった要望はあると思う。これに対しては、マイクロソフト製品であればProdukeyなどのツールである程度は対応可能だが、やはり出所が出所だけに、ちょっと社内ではなぁ、というのが実情かと。

出来れば作れないか?とおもってちょっと調べてみた。

マイクロソフト(オランダ)のページに記述があった。

Windows-activatiesleutels
http://www.microsoft.com/netherlands/ondernemers/techniek_techniek/activatiesleutels.aspx#7

オランダって何語だっけ?オランダ語?とりあえずWeb翻訳にかけて英語にしてみる。

RAW ProductID The public key or RAW ProductID plays a central role at composing the ProductID of Windows XP. This key - which is on the back of each Windows XP-cdhoes to retrieve - exists from five groups of alphanumeric signs, separated by a hyphen. 

An example: 

234BT - 456CD - 789EF - 234GH - 56JKM 

Signs which are used in the public key to be: 

B C D E F G H J K M.P Q R T V W X Y 2 3 4 5 6 7 8 9 

If we convert the public key into Little-Endian byte order then the result array of 15 bytes is. Of these 15 bytes a bit range of four bytes with the lowest value is removed. These forms a control number, whereupon on the highest values of the remaining eleven bytes a checking is together released with codes, which in Windows XP have built in. If the checking is correct InstallatieID are generated MSOOB.EXE. There becomes a chance value to added, which ensures that MSOOB.EXE every time generates new InstallatieID.

んん?ちょっとよく分からないけれど、このRAW ProductIDを元に、リトルエンディアンのバイト情報として読み直すと15バイトに?なんで15バイトに?

面倒なのでこの辺のキーワードを使って再度検索しなおすと

Microsoft Product Key Finder
http://www.codeproject.com/KB/system/Product_Key_Finder.aspx

いつもお世話になるThe Code Projectのサイトに行き当たった。

で、もうちょい探す。Base24エンコーディングって?と調べているとこんな所に。

噂のWindows XP最新情報 〜 Microsoft社のWindows Product Activationの内容(下)
http://ascii24.com/news/i/topi/article/2001/07/20/628087-006.html

2001年7月のascii24.comの情報。これってCode Projectの内容と同じだけど、何か同じところから転記しているのだろうか?

なにはともあれ、まずやってみた。


...できた。Base24エンコーディングについてきちんと調べないと完全に理解することは出来ないけれど、とりあえずレジストリ中のDigitalProductIDという項目の途中を抜き出し、そこに対して24で割ったり割った余りを使った処理をかけることで、あらかじめ用意しておいた「利用可能な文字テーブル」(上記)との対応でプロダクトキー文字列が生成される。DigitalProductIDの所在は、インストールされているソフトによって異なる。いくつか検証できたものは http://d.hatena.ne.jp/frontline/20081222/p1 に記載してあるのでそちらも参照されたい。

ここまでの情報を元に、サンプルにあったコードを、もう少し汎用的に使えるものに書き換えて使う事にした。