DirectX 9 Hook
-
Hallo,
ich wollte spaßeshalber mal das Hooking angehen. Genauer gesagt das Hooking von DirectX 9-unterstützten Spielen. Nun, in den meisten Tutorials wie [url="diesen"]http://www.homeofgamehacking.de/attachment.php?aid=120[/url] steht, dass man "einfach" die Funktion "EndScene( )" aus der d3d9.dll sucht und mit dessen Offset in der DLL-Hook weiterarbeitet. Allerdings habe ich das Problem, dass IDA Pro diese Funktion nicht finden kann. Im Internet war dazu etwas über VTables zu finden, verstanden habe ich das jedoch nicht, da keine vernünftige Beschreibung/Anleitung/Referenz zu finden ist.- Wie komme ich an die EndScene( )-Funktion aus der d3d9.dll?
2.0) Verwenden Spiele die d3d9.dll aus dem system32-Ordner oder die (meistens genannte) d3dx9_30.dll?
2.1) Worin liegt dabei der Unterschied? - Welche Aufgabe hat die Detours-library genau in Sachen Hooking?
- Wo finde ich ansprechende Tutorials/Anleitungen?
- Warum ist zu diesem Thema zu wenig wertvolles, jedoch zu vieles uninformatives Material im Internet zu finden?
Danke im voraus! Bitte bedenken dass ich absoluter Grünschnabel auf dem Gebiet bin.
- Wie komme ich an die EndScene( )-Funktion aus der d3d9.dll?
-
Niemand eine Idee?
-
*auch Interesse anmeld*
-
Hab mich früher mal n bisschen damit beschäftigt.Hab das noch in meiner Kramkiste gefunden.
http://stackoverflow.com/questions/1994676/hooking-directx-endscene-from-an-injected-dll
-
Welche Aufgabe hat die Detours-library genau in Sachen Hooking?
Detours startet irgendeine Anwendung und ersetzt deren Aufrufe von Systemfunktionen durch Deine eigenen.
Die Funktionsweise ist hier eigentlich ganz gut beschrieben.
Ein konkretes Beispiel gibt es hier.Wie komme ich an die EndScene( )-Funktion aus der d3d9.dll?
Am Anfang des IDirect3DDevice9 Objekts (muss sich die gehookte Anwendung ja irgendwann mal erzeugen) steht ja die VTable.
Daraus kannst Du anhand der Interface-Definition in d3d9.h das Offset der Funktion abzaehlen (in diesem Fall wohl 42) und dir den entsprechenden Eintrag holen:IDirect3DDevice9 *dev; PBYTE **vtablePtr= (PBYTE **) dev; PBYTE *vtable = *vtablePtr; PBYTE functionPtr = vtable[ offset ];
Und das Ding kannst Du dann per Detours auf eine eigene Funktion umleiten:
DetourFunction(functionPtr, newFunctionPtr);