ええっ!?ドメイン内にWin2000が残ってる?いいえ、互換性の為です
Windows に適用されたグループポリシーを見るコマンドとして GPRESULT があるのですが、これを実行した所…。
C:\Users>gpresult /r Microsoft (R) Windows (R) Operating System グループ ポリシーの結果ツール v2.0 Copyright (C) Microsoft Corp. 1981-2001 作成日 2017/07/03 時刻 13:39:58 RSOP のデータ MOFMOF\MOFUSER - MOFPC : ログ モード OS 構成: メンバー ワークステーション ユーザー設定 |
|。・ω・) 。o ( !? )
改めて確認してみたら、 Windows Server 2012R2 のようだ
きっと、OSが古いのが悪いのだ・ω・
というわけで、 Windows Server 2016 で鯖立ててやってみた
C:\Users>gpresult /r Microsoft (R) Windows (R) Operating System グループ ポリシーの結果ツール v2.0 Copyright (C) Microsoft Corp. 1981-2001 作成日 2017/07/04 時刻 14:11:21 RSOP のデータ MOFMOF\MOFUSER - MOFPC : ログ モード OS 構成: メンバー ワークステーション ユーザー設定 |
|。・ω・) 。o ( !?!?!?!?!?!?!? )
こりゃ、何やってるか見た方が早い…。
という訳で実コード
L0100A421: lea eax,[ebp-0000022Ch] push eax lea eax,[ebp-00000228h] push eax lea eax,[ebp-00000210h] push eax call SUB_L01006891 push L01001EF4 call esi add eax,ebx push eax call SUB_L01016D99 push 00000176h call SUB_L01017157 push eax call esi add eax,ebx push eax call SUB_L01016D99 lea eax,[ebp-00000210h] push eax call esi add eax,ebx push eax call SUB_L01016D99 push 00000037h call SUB_L01017157 push eax call esi add eax,ebx push eax call SUB_L01016D99 push 00000177h call SUB_L01017157 push eax call esi add eax,ebx push eax call SUB_L01016D99 cmp dword ptr [ebp-00000228h],00000000h jz L0100A4A7 push 00000125h // "Windows 2000" jmp L0100A4BC L0100A4A7: cmp dword ptr [ebp-0000022Ch],00000000h jz L0100A4B7 push 00000126h // "<ローカル コンピューター>" jmp L0100A4BC L0100A4B7: push 00000127h // "WindowsNT 4" L0100A4BC: call SUB_L01017157 |
こんな感じ
lea eax,[ebp-00000214h] push eax push 00000020h push esi push esi push edi push esi call [NETAPI32.dll!DsGetDcNameW] test eax,eax jnz L010068FC mov eax,[ebp-00000214h] inc esi test byte ptr [eax+24h],10h jz L010068F2 mov [ebx],esi L010068F2: push eax call jmp_NETAPI32.dll!NetApiBufferFree L010068F8: mov eax,esi jmp L01006940 L010068FC: lea eax,[ebp-00000210h] push eax lea eax,[ebp-0000020Ch] push eax mov dword ptr [ebp-00000210h],00000104h call [KERNEL32.dll!GetComputerNameW] test eax,eax jz L0100693E push esi xor esi,esi inc esi push esi push edi lea eax,[ebp-0000020Ch] push eax call SUB_L01014F64 test eax,eax jnz L0100693E mov eax,[ebp-00000218h] mov [eax],esi jmp L010068F8 |
どうやら、GetDcName 実行して、エラーまたは、DOMAIN_CONTROLLER_INFO の構造体の文字列が取得できなかった場合、
GetThreadLocal で取得した言語LCID をチェックして、一致した場合は「<ローカルコンピュータ>」 一致しなかった場合 「WindowsNT 4」 に、それ以外の正常なドメインの場合は 「Windows 2000」 になる感じ
なんで、Windows 2000のままなのかは謎なんだけど、実行する gpresult 側に 文字列を実装して、挙動で判定してるのがそもそもの問題のような気がする ・ω・ アホですか
Comments