Funktion in einer .dll hooken

Hi.

Ich will mir für das Spiel "Freelancer" einen Aimbot machen. Ich habe dafür bereits eine Anleitung gefunden:

1. Locate the function CEGun::Fire() with a disassembler of your choice in common.dll
2. Hook it
3. In the hook call CEGun::ComputeTgtLeadPosition() with the given thisptr to calculate the Target Vector
4. Overwrite the Vector given as Parameter to CEGun::Fire with the calculated one
5. Call the original function
6. if you want 360° fire, check the returnvalue and replace if necessary - you may do rapidfire etc. with this too.
Wie funktioniert das ganze ab Schritt 2?
Falls das was an der Vorgehensweise ändert: Ich verwende das Programm IDA.

Schritt 1 sieht bei mir so aus:
http://img29.imageshack.us/img29/1751/v6sg.jpg
 
Zuletzt bearbeitet:
CEGun::Fire()

hast du also gefunden ...


hooken bedeutet: du willst das bei einem aufruf dieser funktion nicht die originalfunktion aufgerufen wird, sondern eine die du nun hinterlegen musst (in dem du den eintrag in der sprungtabelle überschreibst, oder die funktion selbst so änderst, dass zu begin eine von dir zu schreibende funktion aufgerufen wird)

in dieser funktion willst du den übergebenen parameter ändern, und zwar in dem du ihn ersetzt durch den wert den dir CEGun::ComputeTgtLeadPosition() gibt, und dann ganz normal mit dem ablauf weiter machst und den original code von CEGun::Fire() aufrufst ... nur halt nicht mehr mit dem parameter der im original call war, sondern mit dem ausgetauschten ... das ergebnis: das programm verhällt sich so als hättest du beim klicken genau an die vorausberechnete stelle geklickt ...

wenn du allerdings jetzt auf fertig code aus der konserve gehofft hast, nur weil weihnachten ist ... vergiss es ;)
 
Ok danke. Einen Fertig-Code aus der Konserve hab ich nicht erwartet. Muss mir noch einen neuen Dosenöffner kaufen :p

Also das, was in den Klammern steht bei

CEGun::Fire(Vector const &)

durch das von

CEGun::ComputeTgtLeadPosition(Vector &)

ersetzen, damit es so aussieht:

CEGun::Fire(Vector &)

oder muss ich mit Variablen arbeiten?

Oder versteh ich das ganz falsch? Wenn ja dann bitte ne Hilfestellung für Nixblicker.^^
 
Nein.
Du hast irgendwo in der DLL (genaue Adresse => siehe IDA) den Code von
CEGun::Fire(Vector const &)
rumstehen.
Also Methode "Fire(vector)" des Objects CEGun.

Du möchtest den Aufruf von CEGun:Fire hooken
Hooking - Wikipedia, the free encyclopedia
oder
Windows API

so dass jedesmal, wenn irgendwo im Programm "CEGun:Fire" aufgerufen, zuerst Dein eigener Code angesprungen wird.
Im eigenen Code erstellst Du eine Vector-Variable und rufst ComputeTgtLeadPosition(Vector &) auf (zumindest wenn ich die Anzeige richtig deute).
Damit bekommst Du die Position des Ziels - und mit dem gleichen Parameter wird dann die orignale CEGun:Fire Methode aufgerufen (d.h mit den Koordinaten des Ziels).

Also das, was in den Klammern steht bei
...
oder muss ich mit Variablen arbeiten?
Oder versteh ich das ganz falsch?
Prinzipiell ja - es gibt nur ein kleines Problem(chen) - so einfach wäre es nur, wenn man den Code hätte (wobei: bei größeren Projekten kann schon das Einrichten der Toolchain, um den Code kompiliert zu bekommen, komplex genug sein ;) )
Du wirst also entweder eine eigene DLL erstellen und mittels DLL-Injection einbringen oder die Methode direkt in der "common.dll" patchen (Disassembler).
Und damit das ganze nicht zu eifach wird ;), gibt es bei C++ einen Hickhack bei ABI Application binary interface - Wikipedia, the free encyclopedia - sprich, es reicht nicht aus, den neuen Code in C++ zu schreiben, man muss es auch möglichst mit der gleichen Compilerversion und Einstellungen kompilieren.
Schreibt man den Hook in C/Asm, wird man die verwendete "Methodcallingconvention" rausbekommen müssen (ich kann mich z.B ganz dunkel daran erinnern, dass THIS Pointer in ECX übergeben wurde - in anderen Varianten die ersten 4 Argumente in Registern. D.h da müsste man nachschlagen bzw. schauen, ob IDA was genaueres dazu sagen kann).
Erstmal würde ich an einfacheren Sachen üben (z.B WinAPI Hooking), um sich damit vertraut zu machen.
Sonst müsste man bei der Erklärung/Anleitung für diesen konkreten Hook bei Adam und Eva anfangen - und darauf wird wohl kaum jemand Lust haben ;)
 
Zurück
Oben