Wie kann ich einen Debugger oder ein anderes Werkzeug erkennen, die meine Software werden die Analyse könnte?

StackOverflow https://stackoverflow.com/questions/1443268

Frage

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. Und gelegentlich wird es auch unter SilkTest laufen, für Regressionstests. Während dies ziemlich Spaß will ich etwas Besonderes tun ...

Ich möchte feststellen, ob meine Anwendung in einem Debugger / regression-Tester ausgeführt wird, und wenn das der Fall ist, möchte ich die Anwendung zu wissen, welches Werkzeug verwendet wird! (Wenn also die Anwendung abstürzt, könnte ich diese Informationen berichten darin Fehlerreport ist.)

Irgendwelche Vorschläge, Lösungen?

War es hilfreich?

Lösung

Sie können prüfen, den übergeordneten Prozess, die Ihre Anwendung gestartet. Mit CreateToolhelp32Snapshot / Process32First / Process32Next erhalten die Eltern PID (PROCESSENTRY32.th32ParentProcessID oder TProcessEntry32.th32ParentProcessID) für Ihre Anwendung PID. Dann Der Dateiname ist für die übergeordnete PID mit den Anwendungen vergleichen Sie überprüfen möchten, wie SilkTest.

Überprüfen Sie dieser Artikel für Code-Nutzung.

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

Andere Tipps

Sie suchen wahrscheinlich für den IsDebuggerPresent Funktion.

Um SilkTest zu erkennen, könnten Sie versuchen, eine DLL zu befestigen, die nur von SilkTest verwendet wird, um ihre Präsenz zu erkennen. wenn der Open-Agent zum Beispiel ist an einem Prozess, Win32HookDll_x86.dll oder Win32HookDll_amd64.dll wird anwesend sein (die Namen leicht mit einem Werkzeug werden können wie Process Explorer .

Sie können auch tun

if DebugHook <> 0 then ...
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top