読者です 読者をやめる 読者になる 読者になる

Log.i53

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

デバッガ検出技術:Device Drivers

Unpack Anti-Debug

 システムでカーネルデバッガがアクティブになっているかどうかをチェックする古典的な手法として、カーネルデバッガのデバイスドライバへのアクセスを試みるものがあります。このテクニックはとてもシンプルで、SoftICEのようなカーネルモードデバッガによって使用される、著名なデバイス名に対してkernel32!CreateFile()を単に呼び出すだけです。

 以下は、デバイスを検出する簡単なチェックのサンプルコードです:
f:id:i53:20150609040947p:plain

 SoftICEのバージョンによってはデバイス名に番号が追加されており、上記のチェックは常に失敗します。リバースエンジニアリングのフォーラムでは、正しいデバイス名が見つかるまで追加の番号をブルートフォースし続ける手法が回避策として挙げられていました。パッカーによってはRegmonやFilemonのようなシステムモニターを検出するためにこれらのデバイスドライバ検出を使用しています。

解決策

 簡単か対応策としては、kernel32!CreateFileW()内にブレークポイントを設定して、ブレークポイントがヒットしたらFileNameパラメータを操作するか、またはその戻り値をINVALID_HANDLE_VALUE(0xFFFFFFFF)に変更します。