2009-09-18 10 views
8

Una situazione molto semplice. Sto lavorando a un'applicazione in Delphi 2007 che viene spesso compilata come 'Release', ma viene comunque eseguita con un debugger. E occasionalmente funziona anche con SilkTest, per i test di regressione. Mentre questo è abbastanza divertente voglio fare qualcosa di speciale ...Come posso rilevare un debugger o un altro strumento che potrebbe analizzare il mio software?

Voglio rilevare se la mia applicazione è in esecuzione all'interno di un debugger/regression-tester e se questo è il caso, voglio che l'applicazione sappia quale strumento è usato ! (Così, quando l'applicazione si arresta, potrei riportare queste informazioni nel suo rapporto di errore.)

Qualche suggerimento, soluzione?

+0

non si sta scrivendo il malware, giusto ...? – Mick

risposta

10

È possibile controllare il processo padre che ha avviato l'applicazione. Con CreateToolhelp32Snapshot/Process32First/Process32Next ottenere il PID padre (PROCESSENTRY32.th32ParentProcessID o TProcessEntry32.th32ParentProcessID) per il PID dell'applicazione. Quindi ottenere il nome file per il PID padre da confrontare con le applicazioni che si desidera controllare, come SilkTest.

Controllare this article per l'utilizzo del codice.

Oltre a IsDebuggerPresent e CheckRemoteDebuggerPresent, si può anche interrogare PEB.BeingDebugged (PEB è Processo Environment Block, per ottenere PEB si deve interrogare TEB, che è il filo Ambiente Block).

3

Probabilmente stai cercando la funzione IsDebuggerPresent.

+0

Ma rileverà anche SilkTest e altri software di test o remoter remoti? –

+1

C'è anche la funzione 'CheckRemoteDebuggerPresent', che suona come se potesse identificare i debugger remoti.Non ho familiarità con SilkTest quindi non so se funge da debugger o no. Se lo fa, allora funzionerà sopra, altrimenti sarà necessario trovare un'altra tecnica –

0

Si può anche fare

if DebugHook <> 0 then ... 
+0

Che funziona solo all'interno dell'IDE di Delphi, non di altri debugger. Inoltre, tieni presente che l'applicazione è debugata Modalità "Rilascio", non modalità "Debug". –

1

Per rilevare SilkTest, è possibile provare a collegarsi a una DLL che viene utilizzata solo da SilkTest per rilevare la sua presenza. Ad esempio, se l'agente aperto è collegato a un processo, o Win32HookDll_x86.dllWin32HookDll_amd64.dll sarà presente (i nomi possono essere facilmente trovati con uno strumento come Process Explorer.

Problemi correlati