Log.i53

Themidaのアンパックを目指すブログ改め使い物になるえんじにゃを目指すブログ

デバッガ検出技術:Parent Process

 一般的に、プロセスはその親(ダブルクリックで実行するなどが要因)としてexplorer.exeを持っています。explorer.exe以外の親プロセスはを持っている場合、そのアプリケーションは別のアプリケーションによって生成されていることを示唆しているため、それがデバッグされている可能性があることも示唆しています。

 このチェックを実装する方法を以下に示します:

  1. TEB(TEB.ClientId)またはGetCurrentProcessId()を介してターゲットプロセスのPIDを取得する
  2. Process32First/Next()を使用して全てのプロセスを列挙し、(PROCESSENTRY32.szExeFileを介して)explorer.exeのPIDと(PROCESSENTRY32.th32ParentProcessIDを介して)ターゲットプロセスの親プロセスのPIDを取得する
  3. 親プロセスのPIDがexplorer.exeのPIDと一致しなかった場合、ターゲットプロセスはデバッグされている可能性がある

しかし、このデバッガチェックはターゲットプロセスがコマンドプロンプトやその他のデフォルトシェルを利用して実行された場合に誤検知を引き起こすことに注意して下さい。

解決策

 OllyAdvancedプラグインはProcess32Next()を常に失敗させるように設定する手段を提供しています。これによって、パッカーのプロセス列挙コードが失敗することで、プロセス列挙によるPIDのチェックがスキップされます。これはkernel32!Process32NextW()のエントリをEAXの値を0に設定してすぐにリターンするコードでパッチすることによって行われます。
f:id:i53:20150609040159p:plain