深くて暗いWindows10のプロダクトキーの海で溺れた話

事の起こり 

Windows8.1をWindows10にアップグレードしたので、アップグレードしたWindows10のプロダクトキーを控えておこうとして、深くて暗いWindowsのプロダクトキーの海で溺れてしまったという話です。

事の発端は、2020年の今さらながらWindows8.1(32bit)DSP版をWindows10にアップグレードしようとしたことでした。

インストールは、VirtualBoxの仮想マシンとしてインストールしました。色々トラブルはあったもののWindows8.1(32bit)をWindows10(32bit)にアップグレードすることができました。

このままでも使えるのですがせっかくならWindows10は64bitにしたかったので調べたところと、クリーンインストールなら64bitに出来るらしいとのことでした。そして、こちらもうまくいきました。

ここで、アップグレードしたWindows10を将来別のPC(仮想マシン)にクリーンインストールするには、Windows10のプロダクトキーがあったほうが便利そうなので、プロダクトキーを採取しておこう思ったので不幸の始まりでした。


コマンドラインで簡単取得

検索すると、

wmic path SoftwareLicensingService get OA3xOriginalProductKey

でプロダクトキーが取得できるとあったので、さっそく実行してみますが、何も表示されません。

さらに、調べるとこれはメーカー製のPCで、UEFI(BIOS)に格納されているDPK(デジタルプロダクトキー)を取得しているようです。

メーカー製のPCでは、DPKを使って自動的に認証しているようでした。

出荷される時にあらかじめ、マザーボードにDPK(Windows 8/8.1/10のデジタルプロダクトキー)が書き込まれており、またマザーボードのハードウェアハッシュも生成されています。

初回のインターネット接続時に、自動的にこれらDPKとハードウェアハッシュがマイクロソフト社に送信され、アクティベーション(ライセンス認証)されます。

 今回は仮想マシンにインストールしたWindows10ですから、当然取得できません。


スクリプトで簡単取得

さらに調べると、フリーのツールやVBScriptで調べられるようです。仮想マシン上とはいえ、素性のしれないツールは極力いれたくないのでVBScriptを使うことにします。こちらのスクリプトは出どころはMicrosoftのサイト(たぶん、コミュニティ)How to find all windows version serial keyのようです。英語が苦手な方は、「windows10 プロダクトキー vbscript」で検索すれば色々見つかると思います。ちなみに、結果表示されるプロダクトキーの先頭に'-'が余分についてます。

で、このVBScriptを動かしてます。成功です。

XXXXX-XXXXX-XXXXX-XXXXX-H8Q99
(実は後述の理由で隠す必要がないんですけどね)

仮想マシンのゲストOSだけでなく、ホストOSもWindows10です。念のためホストOSでもスクリプトを動かしてみます。

XXXXX-XXXXX-XXXXX-XXXXX-XXXX
(これは、仮想マシンではないので、秘密です)

こちらはPCにシールが貼ってあるので正しいプロダクトキーがわかっていますから、比べてみます。PCに貼ってあるシールの番号は

YYYYY-YYYYY-YYYYY-YYYYY-YYYYY
(これは、仮想マシンではないので、秘密です)

ち、違う。VBScriptで取り出したキーとシールの番号が違う。VBScriptで本当に正しいプロダクトキーは取り出せるのか?

レジストリから簡単取得

しかたがないので、さらにGoogleで検索します。レジストリに直接書いてあるという情報も見つかりました。こちらも試してみます。「BackupProductKeyDefault」で検索すれば簡単に見つかると思います。

で、今度は仮想マシンのゲストOSでREGEDITでごにょごにょ。成功です。

XXXXX-XXXXX-XXXXX-XXXXX-8HVX7
(実は後述の理由で隠す必要がないんですけどね)


あれ?VBScriptの結果とちがう。Backupだから?いや、むしろこちらが正しい?

というわけで、再びホストOSでも試してみます。


ZZZZZ-ZZZZZ-ZZZZZ-ZZZZZ-ZZZZZ
(これは、仮想マシンではないので、秘密です)


ある意味、予想通りまた違うプロダクトキーです。

いや、PCに貼ってあるシールのプロダクトキーは、本当に正しいのか?(すでに、混乱してて、意味のわからない疑惑を抱いています)

シールは本物?

さて、PCに貼ってあるシールは本物なのかをどうすればわかるんでしょう。またまたGoogleで検索です。しかし、スクリプトやレジストリから取得したプロダクトキーが正しいのか調べている時に、スクリプトやレジストリを使うわけにはいきません。さらに、別の方法でも裏技的な方法では結局よくわかりません。

よくやく信頼できそうな情報が見つかりました。Microsoftのサイトから。

Windows 10 (Windows 10 Creators Update で起動するすべてのバージョンを含む) は、適切な既定のプロダクト キーを使用してデバイスに展開されます。 slmgr /dli または slmgr /dlv を実行すると、ファームウェアの現在のライセンスとしての OA3 DPK の代わりに、部分的な既定のプロダクト キーを表示できます。 [設定]、[システム]、[詳細] ページに表示されるプロダクト IDは、使用される Windows 10 キーに対して一意ではありません。

さっそく、ホストOSのコマンドプロンプトで slmgr /dli を試します。プロダクトキーの一部(どうやら、最後の5文字のようです)が表示されました。

PCに貼ってあるシールと一致しました。どうやら、PCに貼ってあるシールは正しいようです。

同じプロダクトキーがネットで見つかる?

しかたがないので、さらにGoogleで検索します。そして、ここに行きつきました。

アップグレード前のWindows 7/8/8.1にヒモ付けられていた「プロダクトキー」は、Windows 10にアップグレード後には全て共通の「プロダクトキー」に置き換えられてしまいます。

どうやら、Windows8.1からWindows10にアップグレードしたゲストOSのプロダクトキーを採取しようとしても意味がなかったようです。

ゲストOSでスクリプトと取得した(XXXXX-XXXXX-XXXXX-XXXXX-H8Q99)とレジストリから取得した(XXXXX-XXXXX-XXXXX-XXXXX-8HVX7)のふたつとも、まったくそのままこのページに書いてある「共通のプロダクトキー(ジェネリックキー)」と一致しました。

結局、プロダクトキーはとれるのか?

アップグレードしたゲストOSでのプロダクトキーは意味がありませんでした。

では、アップグレードしていない最初からWindows10のホストOSならとれるはず?

さきほどの【図解】Windows 10とWindows 7のプロダクトキーの確認方法には、注記つきではありませすが「ProductKey」というフリーソフトなら確実にわかるとあるので、これを使えばわかるのかもしれません。

仮想マシン上でも、避けたいツールの実行をホストOSで行う気にはならなかったので、実行しませんでした。

結局、いきついた答えは

  • アップグレードしたWindows10のプロダクトキーを取り出そうとしても無駄
  • スクリプトやレジストリから正しいプロダクトキーが取り出せるかは謎
でした。

あと、一つ疑問が残りました。Windows10の新規インストールで「共通のプロダクトキー(ジェネリックキー)」を入れると入力すると正しく認証されるのでしょうか?

認証されるかもしれませんが、どう考えてもライセンス違反のような気がするので試しませんでした。