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

Log.i53

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

デバッガ検出技術:Debugger Window

Unpack Anti-Debug

 デバッガウィンドウの存在は、システムでデバッガが動作していることを判別するための標識となります。デバッガは特定のクラス名(OllyDbgであればOLLYDBG, WinDbgであればWinDbgFrameClass)でウィンドウを作成ししているため、これらのデバッガウィンドウの存在をuser32!FindWindow()またはuser32!FindWindowEx()を用いて簡単に調査することができます。

 以下は、FindWindow()を用いてシステムでOllyDbgまたはWinDbgが動作しているかどうかを判別するサンプルコードです:
f:id:i53:20150609040729p:plain

解決策

 解決策の1つは、FindWindow()/FindWindowEx()のエントリにブレークポイントを設定する方法です。ブレークポイントがヒットしたら、lpClassNameの文字列パラメータの内容を書き換えてAPIを失敗させます。その他に、上記APIの戻り値をNULLに設定する方法もあります。