ええっ!?ドメイン内に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 構成:                     メンバー ワークステーション
OS バージョン:               6.1.7601
サイト名:                    N/A
移動プロファイル:             N/A
ローカル プロファイル        C:\Users\MOFUSER
低速リンクで接続: いいえ

ユーザー設定
-------------
    CN=MOFUSER,OU=MOFMOF,DC=mofmof,DC=local
    前回のグループ ポリシーの適用時: 2017/07/04 (12:49:56)
    グループ ポリシーの適用元:       MOFSERVER.mofmof.local
    グループ ポリシーの低速リンクのしきい値:   500 kbps
    ドメイン名:                        mofmof
    ドメインの種類:                        Windows 2000

|。・ω・) 。o ( !? )

dc
改めて確認してみたら、 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 構成:                     メンバー ワークステーション
OS バージョン:               6.1.7601
サイト名:                    N/A
移動プロファイル:             N/A
ローカル プロファイル        C:\Users\MOFUSER
低速リンクで接続: いいえ

ユーザー設定
-------------
    CN=MOFUSER,OU=MOFMOF,DC=mofmof,DC=local
    前回のグループ ポリシーの適用時: 2017/07/04 (13:58:21)
    グループ ポリシーの適用元:       MOFSERVER2.mofmof.local
    グループ ポリシーの低速リンクのしきい値:   500 kbps
    ドメイン名:                        mofmof
    ドメインの種類:                        WindowsNT 4

|。・ω・) 。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 側に 文字列を実装して、挙動で判定してるのがそもそもの問題のような気がする  ・ω・ アホですか

おすすめ

コメントを残す

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