ich stehe gerade vor folgendem Problem:
ich habe eine DLL und einen Loader gecoded, jedoch will ich anstelle des Loader einen Injecter haben, sprich: das spiel, in das injected werden soll, soll schon laufen. Natürlich hab ich das ganze schon probiert, jedoch werden die D3D-funktionen nicht wirklich gehookt, da die DLL auf ein Direct3DCreate9 wartet. Da diese Funktion aber wahrscheinlich direkt beim Starten des "Opfer-Spiels" ausgeführt wird, werden deswegen die anderen funktionen nicht gehookt..
Hab schon diverse tutorials ausprobiert, ohne Erfolg jedoch...
EDIT: ich hooke Direct3DCreate9 mithilfe der Detour-library von microsoft
Du kannst Direct3DCreate9() ja in deinem eigenen Loader aufrufen und dann die Adresse der Funktion, die du hooken willst, aus der VTable des daraus entstehendem IDirect3D9-Objektes nehmen. Dann ziehst du von dieser Adresse die ImageBase der d3d9.dll ab und schon hast du das Offset der Funktion.
Dieses Offset kannst du dann anschließend zu der ImageBase der d3d9.dll in dem Zielprozesses addieren und schon hast du die Adresse, an der sich diese Funktion im Zielprozess befindet.
Du kannst Direct3DCreate9() ja in deinem eigenen Loader aufrufen und dann die Adresse der Funktion, die du hooken willst, aus der VTable des daraus entstehendem IDirect3D9-Objektes nehmen. Dann ziehst du von dieser Adresse die ImageBase der d3d9.dll ab und schon hast du das Offset der Funktion.
Dieses Offset kannst du dann anschließend zu der ImageBase der d3d9.dll in dem Zielprozesses addieren und schon hast du die Adresse, an der sich diese Funktion im Zielprozess befindet.
Sorry, da steig ich nicht ganz durch. Könntest du mich eventuell mit etwas beispielcode versorgen? Und was meinst du mit VTables?
Ich sollte noch dazu erwähnen, bin erst kürzlich in den Bereich des D3D Hooking eingestiegen
Zuerst wird ein verstecktes Fenster erzeugt, worauf anschließend IDirect3D8::CreateDevice() benutzt wird. Aus der VTable des IDirect3DDevice8-Objektes wird dann die Adresse von IDirect3DDevice8::EndScene() ausgelesen und dann das Offset davon berechnet.
Das sollte in Direct3D9 genauso gehen, du musst nur alle 8er durch 9er ersetzen.
Der Teil, in dem diese Adresse aus der VTable ausgelesen wird habe ich ehrlich gesagt nicht selbst geschrieben, sondern aus einem anderen Forum genommen.
Du kannst den Loader ja das Offset beispielsweise in eine .ini-Datei speichern lassen und dieses dann in der DLL wieder auslesen.
Sorry, jetzt hast du mich total durcheinander gebracht.
Das Offset hab ich doch jetzt, wozu muss ich das dann in einer datei speichern und dann von der dll lesen lassen?
Mein Ziel ist es einfach, dass ich a) einen injecter hab und b) eine dll und wenn ich den injecter ausführe soll die dll den ganzen kram den ich in EndScene hab ins game rendern...
Weil das Offset von EndScene() von System zu System unterschiedlich ist. Wenn du das Offset in deine DLL hardcodest, dann funktioniert sie zwar auf deinem System und wahrscheinlich teilweise auch auf anderen System, doch bei sehr vielen anderen wird sie nicht funktionieren.
Wenn du deinen Loader aber so erweiterst, dass er nicht nur die DLL injiziert, sondern sich auch die Offsets holt, dann sollte es überall funktionieren.
Weil das Offset von EndScene() von System zu System unterschiedlich ist. Wenn du das Offset in deine DLL hardcodest, dann funktioniert sie zwar auf deinem System und wahrscheinlich teilweise auch auf anderen System, doch bei sehr vielen anderen wird sie nicht funktionieren.
Wenn du deinen Loader aber so erweiterst, dass er nicht nur die DLL injiziert, sondern sich auch die Offsets holt, dann sollte es überall funktionieren.
Wieso muss der loader das denn erledigen, die DLL müsste das doch auch können?
und wie führe ich jetzt eigentlich Direct3DCreate9 aus?
Ich hab heute mal etwas rumgesucht und eine eventuelle einfachere möglichkeit gefunden..
Ich habe das offset des IDirect3DDevice9 pointers des spiels gefunden, könnte ich nicht einfach EndScene aus dem hooken?
Ich hab heute mal etwas rumgesucht und eine eventuelle einfachere möglichkeit gefunden..
Ich habe das offset des IDirect3DDevice9 pointers des spiels gefunden, könnte ich nicht einfach EndScene aus dem hooken?
Die Frage solltest du dir selbst beantworten können, sonst wirst du nicht weit kommen.
Hier kannst du die Adresse der Funktionstabelle auslesen und anhand der Offsets der Funktionsdeklarationen gelangst du dann zu den Adressen der Funktionen (s. d3d9.h)
Um das ganze revisionsunabhängiger zu machen, kannst du auch zur Laufzeit nach den Opcodes suchen und die hardgecodete Adresse auslesen.
d3d Hooking WarRock 07/11/2010 - General Coding - 12 Replies hi liebe com,
kann mir jemand vllt d3d oer no menue hack tut empfehlen geht auch aus diesen forum ich hab mich ein bisschen mit olly und ida pro auseinander gesetzt und möchte jetzt meinen ersten hack mit Visual c++ erstellen
gebe thx!
PS: C++ lerne ich grad
Text Hooking 07/09/2010 - General Coding - 5 Replies Hallo Leute,
ich wollte mal fragen ob jemand erfahrungen mit Texthooking hat?
Ich und ein Team wollen eine Visual Novel übersetzen
Das Problem:
Wenn wir das mit den bisher herrausgefundenen Methoden machen müssen wir erst jedes Spiel 100% Durchspiel und das kostet einfach zu viel Zeit
Mit OllyDbg hab ich es auch versucht nur leider ohne erfolg :/
Kann uns evtl. jemand helfen?
Account Hooking 03/30/2010 - AutoIt - 4 Replies Hi,
I would like to know how to hook an account with my bot,
Example i play conquer online.I open my bot and it show my char name and i click hook,and then bot is connected to my account,how to hook the bot to the character,
Thank you
[BIETE] API Hooking 06/18/2006 - Tutorials - 2 Replies http://xalonsspace.xa.funpic.de/api-hooking.html
Viel Spaß,würde mich über Feedback freuen ;)