以前の雇用主では、基本的にDLLとヘッダーファイルだけのサードパーティコンポーネントを使用していました。その特定のモジュールはWin32で印刷を処理しました。しかし、コンポーネントを作成した会社が破産したため、見つけたバグを報告できませんでした。
そこで、自分でバグを修正してデバッガーを起動することにしました。いつものように、ほとんどどこにでもデバッグ防止コードを見つけて驚いたIsDebuggerPresent
が、私の注意を引いたのはこれだった。
; some twiddling with xor
; and data, result in eax
jmp eax
mov eax, 0x310fac09
; rest of code here
一見したところ、2回呼び出されたルーチンを踏んだだけで、その後はバナナになりました。しばらくして、ビットをいじる結果は常に同じであることに気付きました。つまり、jmpeaxは常に命令に直接ジャンプしましたmov eax, 0x310fac09
。バイトを分析すると、DLL内のいくつかの呼び出しの間に費やされた時間を測定するために使用され0f31
た命令がありました。rdtsc
だから私のSOへの質問は:あなたの好きなデバッグ防止のトリックは何ですか?