21.10.2012, 14:32
(21.10.2012, 12:40)Schnieker schrieb: Also muss ich auf die Adresse springen die nach dem Jump in die CodeCave kommt?Richtig erkannt...
(21.10.2012, 12:40)Schnieker schrieb: Und wie finde ich denn Platz der auf keinen Fall reserviert ist oder so? Ich hab das jetzt mit "Scan for Code Caves" gemacht...wie im Tutorial.Im Prinzip kannst Du jeden freien Speicher nutzen den dir Cheat Engine mittels "Scan for Codecaves" vorschlägt. Aber Cheat Engine macht eben in der Standardeinstellung keinen Unterschied zwichen Datei Kopf und den restlichen Sections. Ich nutze häufig für Codecaves den Speicher ab "Prozess.exe+0x400h". Dieser gehört zwar in der Praxis ebenfalls zum Datei Kopf da in den meisten Dateien die erste Sektion bei ...+0x1000h liegt, aber in der Praxis ist dieser Speicherbereich ab 0x400h in der Regel unkritisch.
(21.10.2012, 12:40)Schnieker schrieb: Und noch eine weitere Frage: Wenn man normal mit CE nach Adressen sucht sind diese ja nicht statisch, sie ändern sich also bei jedem Start des Spiels. Das kann man mit Pointern lösen. Aber wie ist das denn bei der Code Injection? Bleiben die Adressen innerhalb der exe immer gleich? Wäre ja anzunehmen.Jein... In erster Linie kann man davon ausgehen das diese in der Regel immer statisch sind, also wie Du schon sagst das die Adressen für die Codeinjection auch nach einem Neustart diesselben sind.
Allerdings gibt es auch ab Windows Vista die Möglichkeit das ein Prozess dynamisch in den Arbeitsspeicher gemappt wird. Wikipedia hält dazu auch einen Artikel bereit. Bei Interesse einfach mal nach ASLR oder einfach ASR suchen. Dabei handelt es sich um die sogenannte Address Space Randomization. Das heißt das nach jedem Neustart des Spiels die Basisadresse eine andere ist. folglich sind auch die expliziten Adressen woanders im Speicher. Da allerdings die EXE in ihrer Form nicht verändert wird kann man aber nachwievor ausgehend von der Basisadresse immer die exakte Position bestimmen weil diese ja immer gleich ist.
Beispiel...
Ein normales Spiel hat in der Regel eine Basisadresse von 0x400000h. Zur Veranschaulichung könnte ich auch schreiben "Prozess.exe+0x00h". Nehmen wir mal an das der Befehl, der z.B. eine Health Adresse manipuliert an Adresse 0042B5ECh. Da könnte ich auch schreiben "Prozess.exe+0x2B5ECh". Bei einem Spiel mit einer variablen Basisadresse ist folglich nach einem Neustart der Befehl nicht mehr an Adresse 0042B5ECh. Aber wie ich schon sagte ist ausgehend von der Basisadresse die Position immer gleich. Wenn man also zu der Basisadresse das Offset (0x2B5ECh) addiert komm ich immer an die Stelle wo der Befehl zu finden ist. Aber das, so scheint mir, weißt Du schon bei der Pointer Geschichte. Was anderes ist es eigentlich auch nicht.
Wenn Du schonmal mit Pointern zu tun hattest...?! Dann müsste dir auch aufgefallen sein das die erste Adresse des Pointerpfades, also die statische Adresse, keine absolut bezeichnete Adresse ist sondern Cheat Engine z.B. schreibt: "MassEffect3.exe+44BB4".
Irren ist menschlich. Aber wer richtigen Mist bauen will, braucht einen Computer !!!
Traineranfragen per PM werden prinzipiell gelöscht...
Traineranfragen per PM werden prinzipiell gelöscht...