2009-09-18 7 views
8

Eine sehr einfache Situation. Ich arbeite an einer Anwendung in Delphi 2007, die oft als "Release" kompiliert wird, aber immer noch unter einem Debugger läuft. Gelegentlich wird es auch unter SilkTest für Regressionstests ausgeführt. Während das ziemlich lustig ist, möchte ich etwas Besonderes machen ...Wie kann ich einen Debugger oder ein anderes Tool erkennen, das meine Software analysieren könnte?

Ich möchte feststellen, ob meine Anwendung innerhalb eines Debuggers/Regressionstester läuft und wenn das der Fall ist, möchte ich, dass die Anwendung weiß, welches Tool verwendet wird ! (Wenn also die Anwendung abstürzt, könnte ich diese Informationen im Fehlerbericht melden.)

Irgendwelche Vorschläge, Lösungen?

+0

Sie sind nicht von Malware zu schreiben, nicht wahr ...? – Mick

Antwort

10

Sie können den übergeordneten Prozess überprüfen, die Ihre Anwendung gestartet. Mit CreateToolhelp32Snapshot/Process32First/Process32Next erhalten Sie die übergeordnete PID (PROCESSENTRY32.th32ParentProcessID oder TProcessEntry32.th32ParentProcessID) für Ihre Anwendung PID. Rufen Sie dann den Dateinamen für die übergeordnete PID ab, um sie mit den Anwendungen zu vergleichen, nach denen Sie suchen möchten, z. B. SilkTest.

Überprüfen Sie this article für Code-Verwendung.

Neben IsDebuggerPresent und CheckRemoteDebuggerPresent, können Sie auch abfragen PEB.BeingDebugged (PEB Prozessumgebungsblock ist PEB erhalten Sie TEB abfragen müssen, die das Thema Enviroment-Block ist).

3

Sie suchen wahrscheinlich nach der IsDebuggerPresent Funktion.

+0

Aber erkennt es auch SilkTest und andere Testsoftware? Oder Remote Debugger? –

+1

Es gibt auch die Funktion 'CheckRemoteDebuggerPresent', die klingt, als ob sie entfernte Debugger identifizieren könnte.Ich bin nicht mit SilkTest vertraut, so dass ich nicht weiß, ob es als Debugger oder nicht. Wenn dies der Fall ist, wird das obige funktionieren. Wenn nicht, dann müssen Sie eine andere Technik finden. –

0

können Sie tun auch

if DebugHook <> 0 then ... 
+0

Das funktioniert nur aus der Delphi-IDE, nicht andere Debugger.Auch sollte man daran denken, dass die Anwendung debuggt wird "Release" -Modus, nicht "Debug" -Modus. –

1

Um SilkTest zu erkennen, könnten Sie versuchen, eine DLL anzuhängen, die nur von SilkTest verwendet wird, um deren Vorhandensein zu erkennen. wenn die Open-Agent zum Beispiel ein Verfahren angebracht ist, Win32HookDll_x86.dll oder Win32HookDll_amd64.dll wird anwesend sein (die Namen können leicht mit einem Tool wie Process Explorer gefunden werden.

Verwandte Themen