Einzelnen Beitrag anzeigen

sILeNt heLLsCrEAm

Registriert seit: 19. Dez 2012
13 Beiträge
 
Delphi 11 Alexandria
 
#1

Hilfe bei dynamischer Sprungberechnung

  Alt 19. Dez 2012, 23:55
Ein ganz herzliches Hallo an die Community und einen schönen guten Morgen.

Durch Google bin ich schon mehrmals auf dieses Forum gestoßen und erhoffe mir bei meinem derzeitigen Problem die Hilfe der Erfahrenen Nutzer/Programmierer unter euch.

Um mein Problem genauer zu beschreiben hol ich mal etwas weiter aus damit ihr seht um was es geht. Es dreht sich kurz gesagt da drum um einen Trainer für ein Spiel, bzw. für Spiele zu erstellen.
Das erstellen selbst ist kein Problem, habe auch schon etliche geschrieben. Die Daten die ich durch die Trainer in einen Spieleprozess schreibe sind allesamt in normalen Arrays abgelegt, beispielsweise so...
GeldJumpCodecave: array [0..4] of byte = ($E9,$55,$92,$70,$FF); Das wiederrum schreibe ich weiterhin so...
Delphi-Quellcode:
// Hier ist die Funktion um Adressen des Speichers zu beschreiben
// Das geschieht mittels WriteProcessMemory
Function WriteCheat (Adresse: PByte; ZuSchreiben: Array of Byte; WievielSchreiben: Integer): String;
Begin
  WriteProcessMemory(ProcOpen, Pointer(Adresse), @ZuSchreiben[0], WievielSchreiben, Write);
end;
...
...
WriteCheat(DLLBaseAddy+$8F7336, GeldJumpCodecave, 5);
Das Problem ist nun wenn ich z.B. einen Trainer mit sehr viel Optionen schreibe ich auch sehr viele Arrays ändern müsste. Das heißt mit klaren Worten das der Sprung zur Codecave (wo z.B. Geld ercheatet wird) und die Codecave selbst geändert werden müssen.

Nun zum eigentlichen Anliegen...
Meine Überlegung ist nun das ich die Sprünge von einer Adresse zur Codecave und von der Codecave zurück an die nächste Stelle im Code dynamisch, also durch den Trainer berrechnen lasse. Die Berechnung ist auch kein Problem. Diese sieht so aus...
Delphi-Quellcode:
NewWert:= Integer(DLLBaseAddy+$83D07C);
Merker:= Integer(DLLBaseAddy+$400) - NewWert - 5;
Um diese Bytes umzukehren nutze ich ganz simple "BSWAP". Davor dann noch das HEX Zeichen "E9" vorangestellt und der Sprung ist komplett berrechnet.
Problem ist aber nur das, wenn ich diesen Sprung (Integer) per "WriteProcessMemory" schreibe dann wird das im Speicher wieder komplett umgekehrt geschrieben.
Jetzt wäre meine Frage an euch ob es eine einfachere Möglichkeit gibt das Ganze zu realisieren? Oder gibt es eine Möglichkeit zu einer Integer Zahl eine weitere Zahl nicht hinzuzuaddieren sondern hinzuzufügen?

Ich hoffe ihr könnt mir folgen und verbleibe vorerst
Mit Freundlichen Grüßen
sILeNt heLLsCrEAm
  Mit Zitat antworten Zitat