Einzelnen Beitrag anzeigen

Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#5

AW: Dynamische Memory Adressen - Startpunkt herausfinden

  Alt 19. Jul 2015, 22:00
Mein Wissen über die Win-API ist etwas rostig, aber an sich sollte es nicht so schwer sein.

Ich verstehe dein Problem so:
Du hast beispielsweise die Speicheradresse 15 wo sich die Variable befindet und die Basisadresse bei des Spiels bei 9. Beim nächsten Start ist die Speicheradresse bei 33 und die Basisadresse des Spiels bei 27.
Dh. die Adresse der Variable ist relativ zur Basisadresse + 6.

Die Basisadresse ist meistens konstant, kann sich aber ändern oder wenn es eine Maßnahme gegen cheating ist, wird es sich ändern.
Um die Basisadresse rauszufinden, muss im Speicherbereich des Spiels laut GetModuleHandle
Zitat:
If this parameter is NULL, GetModuleHandle returns a handle to the file used to create the calling process (.exe file).
folgender Code ausgeführt werden:
Delphi-Quellcode:
  //
  GetModuleHandle(NIL)
"handle to the file" ist die Startadresse / Basisadresse / "Eintrittspunkt" so wie du das fälschlicherweise nennst.

Weiters bieten sich zwei Methoden an, um Code in einem fremden Speicherbereich / Prozess auszuführen:
- Dll Injection: du injizierst eine Dll die den Code oben ausführt
- Code Injection: du injizierst direkt Code in den fremden Process, führst in aus und liest das Result aus

Dll Injection ist einfach - vorallem weil es sehr viele Quellen gibt, wo das genau beschrieben wird.

Code Injection ist angenehmer, aber dafür etwas komplizierter.
Für die Codeinjection musst Speicher im fremden Process allozieren, den Speicherbereich per MSDN-Library durchsuchenVirtualProtect() auf PAGE_READWRITE_EXECUTE setzen (also ausführbar machen), deinen Code dort reinschreiben, dann einen weiteren Speicherbereich allozieren, wo du deine Daten festhältst (Variablen, Rückgabewerte usw - in diesem Fall genau 4 Bytes).
Weiters musst du in der Bytefolge deines Codes die Adresse des Speicherbereichs, denn du gerade alloziert hast, reinschreiben.
Anschließend kannst du dein Code ausführen, da er nun alle Daten enthält.
Nachdem dein Code fertig ist (WaitForSingleEvent() mit dem Handle von CreateRemoteThread oder so ähnlich - recherchieren!), kannst du den Rückgabewert anschließend wieder auslesen.

Warnung: VAC.
Sobald du im Spielprozess rumpfuscht, wird VAC sich ein Profil von dir machen. Bei nem offiziellen Server wirst du direkt geebannt, offline tricksen die auch rum - die merken sich, wer gerade an Blödsinn Interesse hat bzw. nen "cheat" entwickelt. Ich würd das einfach sein lassen. Sofern du es nicht gepirated hast, ist es nicht Wert, die ~15€, die du für das Spiel investiert hast, zu verlieren.
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat