なにこれ…やばい… Windows NT 5.xの 隠し機能を発見した
なんとなく、 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 C:\Documents and Settings\Administrator\デスクトップ>set _COMPAT_VER_NNN=3,0,528 C:\Documents and Settings\Administrator\デスクトップ>vertest C:\Documents and Settings\Administrator\デスクトップ>set _COMPAT_VER_NNN=3,11,0, C:\Documents and Settings\Administrator\デスクトップ>vertest |
なにこれ、面白いw ・ω・
アプリケーションの互換モードGUI | ApplicationGoo | _COMPAT_VER_NNN | |
Win2000RTM | × |
○ |
× |
Win2000SP1 | ○ |
○ | ○ |
WinXP | ○ | ○ | ○ |
Server2003 | ○ | ○ | ○ |
Win7 | × | × | × |
実装状況はこんな感じ
こうなる・ω・
表ではXP、2003に○が付いてますが、XPでは同様に設定しても機能しない様です。
いま、XPSP3で確認してみましたが、ちゃんと機能しますよ・ω・?
環境変数を書き換えてからコマンドプロンプトを開いてvertestを実行すると結果が反映されました。
先にコマンドプロンプトを開いてたから駄目だった?
システムのプロパティ、コマンドプロンプト、Windowsのバージョン(winver)、システム情報(msinfo32)等は変わらず、Windows XP SP3 バージョン5.1.2600のままなんですけど、Windows 2000と違い固定値なんですかね?
お騒がせしました。
調べてみたら、システムプログラムはWin2000と違い、どうも影響を受けないようになってるみたいですね
IEだとUAがXPのままでしたがFirefoxだと反映されます
>今からWindows 2000をセットアップするなら(2016年度版)
をやったあと、この記事にあるレジストリを登録しても、環境変数が変わりません・・・orz
ええと、レジストリは登録するように指示していませんが?
あ、失礼。
こちらの勘違いでした。