2009-09-18 22 views
8

Una situación muy simple. Estoy trabajando en una aplicación en Delphi 2007 que a menudo se compila como 'Release' pero aún se ejecuta bajo un depurador. Y de vez en cuando se ejecutará también bajo SilkTest, para pruebas de regresión. Si bien esto es bastante divertido, quiero hacer algo especial ...¿Cómo puedo detectar un depurador u otra herramienta que pueda estar analizando mi software?

Quiero detectar si mi aplicación se ejecuta dentro de un depurador/regression-tester y si ese es el caso, quiero que la aplicación sepa qué herramienta se utiliza ! (Por lo tanto, cuando la aplicación falla, podría informar esta información en su informe de errores.)

¿Alguna sugerencia, soluciones?

+0

Usted no está escribiendo malware, ¿verdad ...? Pero – Mick

Respuesta

10

puede comprobar el proceso principal que se inició su aplicación. Con CreateToolhelp32Snapshot/Process32First/Process32Next obtenga el PID principal (PROCESSENTRY32.th32ParentProcessID o TProcessEntry32.th32ParentProcessID) para su aplicación PID. Luego, obtenga el nombre de archivo del PID principal para compararlo con las aplicaciones que desea verificar, como SilkTest.

Compruebe this article para el uso del código.

Además de IsDebuggerPresent y CheckRemoteDebuggerPresent, también se pueden consultar PEB.BeingDebugged (PEB es Proceso bloque de entorno, para conseguir PEB se debe consultar TEB, que es el hilo Ambiente Bloque).

3

Probablemente esté buscando la función IsDebuggerPresent.

+0

¿También detectará SilkTest y otro software de prueba? O depuradores remotos? –

+1

También existe la función 'CheckRemoteDebuggerPresent', que parece que podría identificar depuradores remotos. No estoy familiarizado con SilkTest, así que no sé si actúa como un depurador o no. Si lo hace, entonces lo anterior funcionará. De lo contrario, tendrá que encontrar otra técnica. –

0

También se puede hacer

if DebugHook <> 0 then ... 
+0

Eso solo funciona desde dentro del Delphi IDE, no con otros depuradores. Además, tenga en cuenta que la aplicación se depura en Modo "Release", no modo "Debug". –

1

Para detectar SilkTest, podría intentar adjuntar a una DLL que solo utiliza SilkTest para detectar su presencia. Por ejemplo, si el Agente abierto está unido a un proceso, o Win32HookDll_x86.dllWin32HookDll_amd64.dll estarán presentes (los nombres se pueden encontrar fácilmente con una herramienta como Process Explorer.

Cuestiones relacionadas