Wie kann ich einen Debugger oder ein anderes Werkzeug erkennen, die meine Software werden die Analyse könnte?
-
22-07-2019 - |
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?
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 ...