如何检测可能正在分析我的软件的调试器或其他工具?

时间:2009-09-18 08:37:07

标签: delphi debugging delphi-2007 testing

一个非常简单的情况。我正在研究Delphi 2007中的一个应用程序,它经常被编译为'Release',但仍然在调试器下运行。有时它也会在SilkTest下运行,用于回归测试。虽然这很有趣但我想做一些特别的事情......

我想检测我的应用程序是否在调试器/回归测试器中运行,如果是这种情况,我希望应用程序知道使用了哪个工具! (因此,当应用程序崩溃时,我可以在其错误报告中报告此信息。)

任何建议,解决方案?

4 个答案:

答案 0 :(得分:11)

您可以检查启动应用程序的父进程。 使用CreateToolhelp32Snapshot / Process32First / Process32Next获取应用PID的父PID(PROCESSENTRY32.th32ParentProcessIDTProcessEntry32.th32ParentProcessID)。然后获取父PID的文件名以与要检查的应用程序进行比较,如SilkTest。

检查this article代码使用情况。

除了IsDebuggerPresentCheckRemoteDebuggerPresent之外,您还可以查询PEB.BeingDebugged(PEB是流程环境块,要获得PEB,您必须查询TEB,即线程环境块)。

答案 1 :(得分:3)

您可能正在寻找IsDebuggerPresent功能。

答案 2 :(得分:1)

要检测SilkTest,您可以尝试附加到仅由SilkTest使用的DLL,以便检测其存在。例如,如果Open Agent附加到流程,则会出现Win32HookDll_x86.dllWin32HookDll_amd64.dll(可以使用Process Explorer等工具轻松找到这些名称。

答案 3 :(得分:0)

您也可以

if DebugHook <> 0 then ...