2008-09-18 9 views
7

Ich möchte API-Spionage/-Hijacking einsetzen, um einige Kernfunktionen eines Projekts zu implementieren, an dem ich gerade arbeite. Es wurde auch erwähnt in this question, aber das war nicht wirklich auf Thema, so dachte ich, es wäre besser mit einer eigenen Frage für diese.,Windows-API-Spionage-/Hijacking-Techniken

Ich möchte so viele Informationen wie möglich zu diesem Thema sammeln , verschiedene Techniken/Bibliotheken (MS Detours, IAT patching) oder andere Vorschläge.

Es wäre auch besonders interessant zu wissen, ob jemand eine echte Produktionserfahrung mit solchen Techniken hat - können sie für den Produktionscode stabil genug gemacht werden oder ist das eine reine Technik für die Forschung? Funktioniert es ordnungsgemäß über mehrere Versionen von Windows? Wie anfällig ist es?

Persönliche Erfahrungen und externe Links beide geschätzt.

Antwort

3

Ich implementierte syringe.dll (L-GPL) anstelle von MS Detours (wir haben nicht die Lizenzanforderungen oder riesige Zahlung für x64 Unterstützung gefallen) es funktioniert fantastisch gut, ich portierte es von Win32 zu Win64, die wir in unserem verwendet haben seit etwa 2 Jahren selbständige kommerzielle Anwendungen.

Wir verwenden es aus sehr einfachen Gründen wirklich seine Präsentation Frame-Arbeit für das Umpacken, Rebranding der gleichen kompilierten Anwendung wie viele verschiedene Produkte, machen wir allgemeine Filterung und Ersatz für String, allgemeine Ressource, Symbolleiste, und Menüs.

Als L-GPL liefern wir die Quelle, das Copyright usw. und verlinken nur dynamisch mit der Bibliothek.

2

Hooking-Standard WinAPI-Funktionen sind relativ sicher, da sie sich in naher Zukunft nicht viel ändern werden, da Microsoft es am besten macht, die WinAPI rückwärtskompatibel zwischen Versionen zu halten. Standard WinAPI Haken, würde ich sagen, ist im Allgemeinen stabil und sicher.

Alles andere, wie in den Interna des Zielprogramms, ist eine andere Geschichte. Unabhängig vom Zielprogramm ist das Hooking normalerweise eine solide Übung. Das schwächste Glied des Prozesses ist normalerweise, den richtigen Punkt zu finden, und daran zu hängen.

Die kleinste Änderung in der Anwendung kann und wird die Adressen von Funktionen ändern, ganz zu schweigen von dynamischen Bibliotheken und so weiter.

In Gamehacking, wo Hooking Standard ist, wurde dies bis zu einem gewissen Grad mit "sigscanning" besiegt, einer Technik, die zuerst von LanceVorgin auf den etwas berüchtigten MPC Boards entwickelt wurde. Es funktioniert, indem das ausführbare Bild nach den statischen Teilen einer Funktion gescannt wird, die tatsächlichen Befehlsbytes, die sich nur ändern, wenn die Aktion geändert wird. Sigscaning ist offensichtlich besser als statische Adresstabellen, aber es wird auch scheitern, wenn die Zielanwendung genug geändert wird.

Beispiel Implementierung von sigscaning in C++ kann here gefunden werden.

1

Ich habe seit einigen Jahren Standard-IAT-Hooking-Techniken verwendet und es funktioniert gut war schön und stabil und portiert auf x64 ohne Probleme. Die Hauptprobleme, die ich hatte, waren mehr mit der Art und Weise zu tun, wie ich die Haken an erster Stelle injiziere. Es hat eine Weile gedauert, um herauszufinden, wie man am besten verwaltete Prozesse am "richtigen" Punkt in der Startphase aussetzt, damit diese injiziert wird war zuverlässig und früh genug für mich.Mein Injektor verwendet die Win32-Debug-API. Während dies die Deaktivierung nicht verwalteter Prozesse leicht machte, brauchte es ein wenig Trial-and-Error, um verwaltete Prozesse zu einem geeigneten Zeitpunkt zu stoppen.

Meine Verwendungen für IAT haben meist zum Schreiben Prüfwerkzeuge gewesen, habe ich ein Deadlock-Erkennung Programm, das hier detailliert beschrieben wird: http://www.lenholgate.com/blog/2006/04/deadlock-detection-tool-updates.html, ein GetTickCount() Steuerprogramm, das zum Herunterladen von hier http://www.lenholgate.com/blog/2006/04/tickshifter-v02.html und eine Zeitverschiebung Anwendung verfügbar ist, die ist noch in Entwicklung.

1

Etwas, was viele Leute vergessen ist, dass Windows DLLs als hot-patchable images (MSDN) kompiliert werden.

Hot-Patching ist der beste Weg, um WinAPI Umleitungen zu tun, wie es sauber und einfach ist, und behält die ursprüngliche Funktion, dh keine Inline-Montage verwendet werden muss, nur leicht eingestellt Funktionszeiger.

Ein kleines Hot-Patching-Tutorial finden Sie here.