Ich habe gerade mal einen meiner Beiträge bei drolle rausgesucht,
hier wird eine weitere Möglichkeit gezeigt.
Ich benutze eigentlich nur noch VirtualAlloc und habe mir eine Funktion (in VB)
geschrieben, die automatisch die richtigen Bytes berechnet und an die richtige
Stelle schreibt.
hier wird eine weitere Möglichkeit gezeigt.
Zitat:Die Bytes, die für einen JMP geschrieben werden müssen, sind abhängig von 2 Sachen ...
1. Die addi VON der gesprungen wird
2. Die addi ZU der gesprungen wird
Ich habe hier gerade ein Beispiel von GTA2 ...
Der Originalcode steht bei 433B70(JumpFrom) und der Codecave ist bei 2A0000(JumpTo)
Rechnerisch sieht das Folgendermaßen aus ...
Code:
Code:
JumpTo - JumpFrom -5 (und das ganze muss dann noch umgedreht werden) 2A0000 - 433B70 - 5 = FFFFFFFFFFE6C48B (umdrehen) 8B C4 E6 FF (den rest streichen wir, da wir nur die ersten 4 Bytes brauchen)
Für den JMP in meinem Fall müsste man folgende Bytes schreiben
E9 8B C4 E6 FF
Und wer jetzt denkt, dass das alles war, den muss ich enttäuschen ^^
Wir brauchen ja auch noch einen JMP zurück zum Originalcode ...
die Formel ist änlich wie die oben:
Code:
JumpTo - JumpFrom - 5 433B77 - 2A0020 - 5 = 193B52 (umdrehen) 52 3B 19 00 (da kein Taschenrechner vorne Nullen anzeigt, wir aber 4 Bytes brauchen, müssen wir uns die dazu denken)
CI würde so aussehen:
E9 52 3B 19 00
So, ich hoffe ich konnte irgendwem damit helfen
Ich benutze eigentlich nur noch VirtualAlloc und habe mir eine Funktion (in VB)
geschrieben, die automatisch die richtigen Bytes berechnet und an die richtige
Stelle schreibt.
ACHTUNG: Lesen gefährdet die Dummheit