【黑翼猫】Windows NT 5.x 系的隐藏机能发现

原文:http://blog.livedoor.jp/blackwingcat/archives/1925950.html#more

在NTD.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的版本 「Windows」

这个真厉害!

那么,利用这个机制能做什么呢?只要修改文件名,就能使不能在系统上运行的文件,在特定的OS版本上运行!「这里应该只是修改OS VERSION,骗过运行的系统版本验证。」

优先顺序是: 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 × × ×

实施情况是这样的:

コメントを残す

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください