AntiDebug技術:ThreadHideFromDebugger
このテクニックは一般的にスレッドの優先度を設定するために使われるntdll!NtSetInformationThread() APIを利用します。このAPIはデバッガに送信されるデバッグイベントを妨害するためにも使用できるのです。
NtSetInformationThread()に渡されるパラメータは以下のとおりです。このテクニックでは、ThreadHideFromDebugger(0x11)がThreadInformationClassパラメータに渡され、ThreadHandleは現在のスレッドハンドル(0xfffffffe)に設定します:
内部的に、ThreadHideFromDebuggerはETHREADカーネル構造体のHideThreadFromDebuggerフィールドをセットします。これが一度セットされると、カーネル内部にあるデバッガにイベントを送信することを主目的とするDbgkpSendApiMessage()関数が呼び出されなくなります。
例
NtSetInformationThread()呼び出しの典型的な例を示します: