なにこれ…やばい… Windows NT 5.xの 隠し機能を発見した

NNN
なんとなく、 Windows 2000 の NTDLL.DLL 眺めてたんですけどね

_COMPAT_VER_NNN って文字列が気になったんで調べてみたところ


http://os-design.googlecode.com/svn/trunk/ntos/dll/ldrinit.c
あれ… これ、Microsoft で流出した Windows 2000 SP1 のコードのような・ω・

    //
// Only look at the ENV stuff if haven't already gotten new version info from the registry
//
if ( FALSE == fNewCSDVersionBuffer )
{
//
// The format of this string is:
// _COMPAT_VER_NNN = MajOSVer, MinOSVer, OSBldNum, MajCSD, MinCSD, PlatformID, CSDString
//  eg:  _COMPAT_VER_NNN=4,0,1381,3,0,2,Service Pack 3
//   (for NT 4 SP3)
RtlInitUnicodeString(&EnvName, L"_COMPAT_VER_NNN");
EnvValue.Buffer = TempString;
EnvValue.Length = 0;
EnvValue.MaximumLength = sizeof(TempString);
st = RtlQueryEnvironmentVariable_U(
NULL,
&EnvName,
&EnvValue
);

どうやら、環境変数を使って、システム全体のOSバージョンを偽装する機能の模様

これはすごい!
何ができるかっていうと、ファイル名がころころ変わって、偽装できなかった実行ファイルをすべて特定バージョンのOSとして実行できるんです

優先順位は ApplicationGoo > _COMPAT_VER_NNN

C:\Documents and Settings\Administrator\デスクトップ>set _COMPAT_VER_NNN=4,0,138
1,5,0,2,Service Pack 5

C:\Documents and Settings\Administrator\デスクトップ>vertest
OS Ver=4.0 SP=5.0[Service Pack 5] PId=2 Build=1381 PrductType=1 Suite=0

C:\Documents and Settings\Administrator\デスクトップ>set _COMPAT_VER_NNN=3,0,528
,3,0,2,Service Pack 3

C:\Documents and Settings\Administrator\デスクトップ>vertest
OS Ver=3.0 SP=3.0[Service Pack 3] PId=2 Build=528 PrductType=1 Suite=0

C:\Documents and Settings\Administrator\デスクトップ>set _COMPAT_VER_NNN=3,11,0,
0,0,0,Service Pack 0

C:\Documents and Settings\Administrator\デスクトップ>vertest
OS Ver=3.11 SP=0.0[Service Pack 0] PId=0 Build=0 PrductType=1 Suite=0

なにこれ、面白いw ・ω・

アプリケーションの互換モードGUI ApplicationGoo _COMPAT_VER_NNN
Win2000RTM ×

×
Win2000SP1
WinXP
Server2003
Win7 × × ×

実装状況はこんな感じ

nnn2
こうなる・ω・

おすすめ

7件のフィードバック

  1. ka-chan より:

    表ではXP、2003に○が付いてますが、XPでは同様に設定しても機能しない様です。

  2. 黒翼猫 より:

    いま、XPSP3で確認してみましたが、ちゃんと機能しますよ・ω・?

  3. ka-chan より:

    環境変数を書き換えてからコマンドプロンプトを開いてvertestを実行すると結果が反映されました。
    先にコマンドプロンプトを開いてたから駄目だった?
    システムのプロパティ、コマンドプロンプト、Windowsのバージョン(winver)、システム情報(msinfo32)等は変わらず、Windows XP SP3 バージョン5.1.2600のままなんですけど、Windows 2000と違い固定値なんですかね?
    お騒がせしました。

  4. 黒翼猫 より:

    調べてみたら、システムプログラムはWin2000と違い、どうも影響を受けないようになってるみたいですね
    IEだとUAがXPのままでしたがFirefoxだと反映されます

  5. 名無し より:

    >今からWindows 2000をセットアップするなら(2016年度版)
    をやったあと、この記事にあるレジストリを登録しても、環境変数が変わりません・・・orz

  6. 黒翼猫 より:

    ええと、レジストリは登録するように指示していませんが?

  7. 名無し より:

    あ、失礼。
    こちらの勘違いでした。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です