2009-09-18 4 views
8

非常に単純な状況です。 Delphi 2007のアプリケーションでは、「リリース」としてコンパイルされることがよくありますが、まだデバッガで実行されています。また、回帰テストのためにSilkTestでも実行されることがあります。これはかなり面白いですが、私は何か特別なことをしたいと思っています...ソフトウェアを解析しているデバッガやその他のツールを検出するにはどうすればよいですか?

私のアプリケーションがデバッガ/リグレッションテスター内で動作しているかどうかを検出したいのですが、その場合は、 ! (したがって、アプリケーションがクラッシュすると、その情報をエラーレポートに報告できます)。

どのような提案、解決策ですか?

+0

あなたはマルウェアを作成していません、右...? – Mick

答えて

10

を行うことができます。 CreateToolhelp32Snapshot/Process32First/Process32NextアプリケーションPIDの親PID(PROCESSENTRY32.th32ParentProcessIDまたはTProcessEntry32.th32ParentProcessID)を取得します。次に、親PIDのファイル名を、SilkTestのようにチェックしたいアプリケーションと比較します。

コード使用についてはthis articleをチェックしてください。 IsDebuggerPresentCheckRemoteDebuggerPresentに加えて

、あなたも(PEBは、プロセスの環境ブロックであり、あなたがスレッド的環境のブロックであるTEBを照会しなければならないPEBを取得する)PEB.BeingDebuggedを照会することができます。

3

あなたはおそらくIsDebuggerPresent機能を探しています。

+0

また、SilkTestなどのテストソフトウェアやリモートデバッガを検出しますか? –

+1

'CheckRemoteDebuggerPresent'機能もあります。これはリモートデバッガを識別するように思えます。私はSilkTestに慣れていないので、デバッガであるかどうかを確認してください。もしそうであれば、上記のように動作しますが、そうでない場合には別のテクニックが必要になります。 –

0

また、あなたはアプリケーションを起動し親プロセスを確認することができます

if DebugHook <> 0 then ... 
+0

これはDelphi IDE内でのみ動作し、他のデバッガでは動作しません。 "リリース"モードで、 "デバッグ"モードではありません。 –

1

SilkTestを検出するには、その存在を検出するためにSilkTestでのみ使用されるDLLに接続しようとすることができます。たとえば、Open Agentがプロセスにアタッチされている場合は、またはWin32HookDll_amd64.dllが表示されます(名前はProcess Explorerのようなツールで簡単に見つけることができます)

関連する問題