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

Wim*_*ink 10 delphi testing debugging delphi-2007

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

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

任何建议,解决方案?

pan*_*ani 11

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

查看此文章以了解代码用法.

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