Daten eines Prozesses zur Laufzeit manipulieren

Hallo Experten,

ich möchte die Daten eines Prozesses (Programm: Age of Empires 2) auslesen und verändern. Bei dem AoE2 will ich zum Beispiel den Goldstand erhöhen. Der Goldstand ist sicher unverschlüsselt in einer Variable zur Laufzeit des Programms/Prozesses gespeichert. Das Betriebssystem hat natürlich die virtuelle Speicherverwaltung, das heißt es wird schwerer an die Variable im physichen RAM ranzukommen. Wo genau ist die Variable gespiechert, im phyiskalischen Ram oder in einer Auslagerungsdatei? Wie kann ich das herausfinden? Kann mir jemand genau erklären wie ich die virtuelle Adresse des Goldstandes herausfinde (habe das schon mit dumpfile-Erstellern (vom Windows 8 Taskmanager…?ka) versucht). Gibt es dazu gute Dumpfile-Ersteller. Dann muss ich natürlich über die MMU (das Ding was die virtuellen Adressen in die physikalischen übersetzt) die physikalische Adresse herausfinden (hat jemand da ne Anleitung). In welcher Form wird die Variable gespeichert sein, int, float,…? Das müsste heißen die Variable ist über mehrere Bytes gespiechert? Wie komme ich genau an die Zahl?

Und… wenn ich in einem C-Programm per Modulo-Operation die Adresse einer variable auslese, wenn ich also bsp. den Wert der Adresse 0xf830000f haben will, ist diese Adresse eine virtuelle Adresse sodass diese erst per MMU in die physikalische umgewandelt wird und dann der wert von der physikalischen Adresse geholt wird, oder ist das direkt schon die physikalische Adresse???

Vielen Dank für alle Antworten, und kommt mir nicht mit
„Das geht nicht!“ an

mfg

Hallo,

wenn du hinter diese Problem steigen moechtest solltest du dir ein Tool wie SoftIce oder aehnliche installieren und das Programm darunter laufen lassen und die entsprechenden Teile im Assembler-Modus analysieren.

Ein Problem wird wohl werden,das die entsprechende Speicheradresse bei edem Programmstart eine andere sein wird, und u.U. waerhrend des Programmlaufs auch „wandern“ kann.

Tschau
Peter

Hi Martin

Theoretisch möglich, bentöigt aber spezielle Kernel-Software und sehr viel Fachwissen, da Programme nur auf den eigenen Speicher zugriff haben und jedes Programm einen eigenen virutellen Adresseraum hat, der eben abgeschottet ist von andern Programmen. Selbst wenn du die pyshikalische Speicheradresse herausfindest, einer Applikation ist der Zugriff nur auf die eigenen virtuellen Speicherseiten erlaubt. Beim Versuch wird dein Programm einfach beendet (Speicherschutzverletzung). Nach dieser Hürde, noch herauszufinden wo im phsikalischen Speicher deine Variabel liegt… z.B. 4byte in 200MB (verwendet vom Prozess) oder so… extremer Aufwand…

http://de.wikipedia.org/wiki/Virtuelle_Speicherverwa…

Was für eine Variabelntyp die Entwickler hier verwendet haben, kann man nur erraten…

In deinem konkreten Fall würde ich hier besser einen andern Weg wählen:

-Modifikation des gespeicherten Spielstandes. Die Datei kannst du ja einfach in einem HEX-Editor öffnen und bearbeiten bzw. vergelichen. Die Variabel mit dem Goldstand muss ja hier auch irgendwo vorhanden sein. Einfaches Speil starten, Speilstand speichern. Goldstand jeweils notieren. Gold ausgeheben und Spielstand wieder speichern untern anderem Namen. Die zwei Dateien vergelichen, dann hast du einen Anhaltspunkt wo die Variabel für den Goldstand sein könnte.

-Verwenden eines Spiel-Cheats:
http://www.gamefaqs.com/pc/924259-age-of-empires-ii-…

ROBIN HOOD: +1000 Gold

Gruss
Sam99

Hallo Martin,

das was du machen moechtest nennt man ‚Trainer‘. Diese Trainer fuer Computer-Spiele gibt es schon ziemlich lange. Fertige Trainer findet man auch ueber Google recht leicht wenn man einfach nach dem Spielnamen sucht und das Wort Trainer mit an die Suchanfrage stellt. (Beispiel)

Hier ist mal ein Google-Suchquery fuer eine Anleitung, wie man so etwas programmieren koennte: http://www.google.de/search?q="Create+Your+Own+Game+…"

Hoffe dir damit etwas weiter geholfen zu haben.

Gruss
Stefan

Wenn es dir darum geht, bestimmte Werte in einem Spiel (z.B.: Gold, Lebensenergie, usw.) zu verändern (Deiner Frage nach, wird’s das wohl sein.), Dann solltest du dir ggf. mal CheatEngine (http://www.cheatengine.org/) ansehen.

P.S.: Nur der Vollständigkeit halber: CheatEngine wenn’s um Windows geht, Scanmem (http://taviso.decsystem.org/scanmem.html) wenn’s um Linux geht.