2010-12-22 32 views
19

Ich bin neu bei Microsoft Detours. Ich habe es installiert, um die Systemaufrufe zu verfolgen, die ein Prozess macht. Ich führe die folgenden Befehle, die ich von der WebWie funktioniert Microsoft Detours und wie verwende ich es, um eine Stapelüberwachung zu erhalten?

habe Ich bekomme die Protokolldatei. Das Problem ist, ich verstehe nicht ganz, was hier passiert. Wie funktionieren Umwege? Wie verfolgt es die Systemaufrufe? Auch ich weiß nicht, wie man die Ausgabe in log.txt liest. Hier ist eine Zeile in log.txt

20101221060413329 2912 50.60: traceapi: 001 GetCurrentThreadId() 

Schließlich möchte ich den Stack-Trace des Prozesses zu bekommen. Wie kann ich das bekommen?

Antwort

22

Mit Umleitungen können Sie jede Funktion abfangen. Es platziert einen JMP in die Adresse, die Sie angeben, um ein Trampolin für Ihren Code zu erstellen. Schließlich rufen Sie die alte Funktion auf, wenn Sie es tun möchten. Um Umwege zu verwenden, müssen Sie Ihren Code in den Prozess injizieren, den Sie abfangen möchten.

Um diesen Prozess zu vereinfachen Sie Deviare API Hook können die tut das alle Injektions Personal und Sie können Intercept-Anwendungen von einer beliebigen Programmiersprache verwenden, die COM-Technologie unterstützt, einschließlich .NET, Delphi, C++, Python, etc .. Nach dem Download Paket finden Sie einige Beispiele darin. Es gibt eine Konsole namens DeviareCSharpConsole, mit der Sie jede API eines Prozesses abfangen können, die vollständige Stack-Trace-Informationen enthält.

Dies ist die Deviare API Hook Werke Art und Weise aber ist das, was Sie tun müssen, wenn Sie eine Anwendung erstellen möchten, die einen anderen Prozess hakt:

Deviare API Hook Design

Ein Agent sollte das abfangen in den Zielprozess erstellt werden APIs, die Sie möchten. Um diese APIs abzufangen, können Sie Umwege verwenden, aber Sie müssen IPC-Mitarbeiter kodieren, die nicht in dieser Bibliothek enthalten sind.

Wenn Sie innerhalb des Zielprozesses Code schreiben müssen, indem Sie Deviare API Hook verwenden, können Sie Deviare Custom Hooks verwenden. Mit dieser Funktion können Sie APIs abfangen und verarbeitete Parameter asynchron verarbeiten.

15

Zuerst würde ich sehr empfehlen, dass, wenn Sie API-Hooking durchführen möchten, würde ich mit easyhook gehen: http://easyhook.codeplex.com/ (Open Source). Es ist ein sehr gutes und einfaches API-Hooking-Framework.

Über, wie man die Stapelüberwachung erhält, ich erinnere mich nicht genau, wie man es macht, aber überprüfen Sie heraus, WinAPIOverride32: http://jacquelin.potier.free.fr/winapioverride32/ (Open Source). Er macht genau das, und es ist Open Source. Wenn Sie die Spuren für die Forschung benötigen, ist WinAPIOverride32 eine großartige Anwendung, um zu untersuchen, wie Anwendungen funktionieren.

EDIT: Nur eine weitere Anwendung hinzufügen. http://www.rohitab.com/ ist wie WinAPIOVerride32, aber es unterstützt 64bit und es hat sich wirklich verbessert, seit ich diese Antwort geschrieben habe. Ich muss darauf hinweisen, dass es in einigen Fällen API-Aufrufe verpasst hat, die ich in WinAPIOverride32 gefunden habe, aber es ist immer noch ziemlich gut. Leider ist die Quelle nicht veröffentlicht.

über wie api-Einhaken Arbeiten, Nun, es ist eine lange Erklärung, ich Sie auf diesen Artikel hinweisen würde: http://www.codeproject.com/KB/system/hooksys.aspx Es gibt eine ziemlich gute Erklärung, wie es unter der Haube getan wird (es gibt auch andere Methoden außer dem, was ist dort geschrieben, aber immer noch, es ist ein sehr guter Artikel).

Hoffe es hilft! :-)

20

Statt Umwege (die nur für 32-Bit-frei ist) oder easyhook (das ist, KHM, ein wenig bisschen chaotisch-Code) Sie können mhook 2.4 zu prüfen, welche ist sehr ordentlich Code und BSD-Lizenz. Funktioniert auf x86 und x64, behandelt IP-bezogenen Code usw.

Es gibt auch eine gründliche Beschreibung, wie es auf der Website funktioniert.

alt text

Wie für den Stapel Backtrace können Sie CaptureStackBackTrace() von kernel32 verwenden, oder wenn Sie Lust bekommen möchten, verwenden Sie StackWalk64() von dbghelp.