Home of Gamehacking - Archiv
<script> in CheatEngine - Druckversion

+- Home of Gamehacking - Archiv (http://archiv-homeofgamehacking.de)
+-- Forum: Gamehacking (http://archiv-homeofgamehacking.de/forumdisplay.php?fid=3)
+--- Forum: Gamehacking (http://archiv-homeofgamehacking.de/forumdisplay.php?fid=6)
+--- Thema: <script> in CheatEngine (/showthread.php?tid=1231)

Seiten: 1 2


RE: <script> in CheatEngine - DNA - 20.10.2012

Vielleicht sollte das mal anhand eines Spiel gemacht werden, welches
du besitzt und silent, acubra oderich haben...
Dann ist die Erklärung leichter, da beide Parteien das selbe vor
sich haben und du verstehst es dann vielleicht besser und siehst, wo
eventuell dein Problem lag Wink
So teile uns bitte mit welche spiele du so hast.


RE: <script> in CheatEngine - Schnieker - 20.10.2012

Puh. In Steam hab ich üner 75 Spiele. Die schreibe ich jetzt aber nicht alle hier rein.
Ich hätte da sonst noch FarCry von GoG und Tony Hawk's: American Wasteland.


RE: <script> in CheatEngine - iNvIcTUs oRCuS - 20.10.2012

(20.10.2012, 17:13)Schnieker schrieb: Nachdem. Ich habe das Gefühl ich mache irgendwas falsch.

Deine Codecave wird definitiv falsch sein. Durch deine Codeinjection/cave wird versucht irgendwas im Speicher an Adresse 0x200h zu schreiben. Dieser ist bei so gut wie keiner Anwendung verfügbar. Das kann man z.B. bei Cheat Engine im Memory Fenster nachverfolgen. Da siehst Du nur "??" (Fragezeichen).

Den Vorschlag von DNA würd ich erstmal verwerfen. Denn wir, bzw. DNA, Acubra und alle anderen hier die helfen können und wollen haben auch die TrainMe.exe. Ich würde mal sagen ehe Du dich an ein echtes Spiel, ausgerechnet auch noch STEAM, rantraust was vielleicht noch irgendwelche Anti Cheat oder Anti Breakpoint Mechanismen hat sollten wir erstmal versuchen eine einfache Codecave hinzukriegen. Entweder die TrainMe oder was auch ganz gut geeignet ist, ist das mitgelieferte Tutorial von Cheat Engine.

Schreib doch ganz einfach mal hier rein, wie deine Codecave bei der TrainMe.exe ausschaut. Ich denke das Problem lässt sich ganz einfach lösen...


RE: <script> in CheatEngine - Schnieker - 21.10.2012

Okay, als Erstes habe ich den Jump in meine CodeCave. Das sieht so aus:
[code=ASM]TrainMe.exe+11CCCE - E9 4833EEFF - jmp TrainMe.exe+1B[/code]

Meine CodeCave Sieht dann so aus:
[code=ASM]TrainMe.exe+1B - C7 00 66000000 - mov [eax],00000066
TrainMe.exe+21 - 89 05 20B35700 - mov [TrainMe.exe+17B320],eax
TrainMe.exe+27 - E9 A2CC1100 - jmp TrainMe.exe+11CCCE[/code]

Was mir ausgefallen ist ist dass er bei dem oberen mov immer dieses 00000066 reinschreibt, obwohl ich das da nicht so hingeschrieben habe. Das macht er automatisch.


RE: <script> in CheatEngine - iNvIcTUs oRCuS - 21.10.2012

Und genau das ist falsch...
Mit deiner Codecave schreibst Du den Datei Header kaputt...
Du musst schon eine freie Stelle im Code des Prozesses suchen/finden.
Es ist zwar richtig das diese Stelle vermeintlich frei aussieht, aber dieser Bereich ist für den Datei Header reserviert... Um genau zu sein befinden wir un da am Ende des DOS Headers...

EXE Struktur...
[attachment=1223]

Und das Ganze mal in Olly nachgeschaut...
[attachment=1224]


//EDIT
Was mir noch aufgefallen ist... Du springst aus der Codecave an die Stelle zurück wo sich der Sprung zur Codecave befindet???
Damit hättest Du einen Infinite Loop der die TrainMe im Endeffekt zum Pausieren zwingt.
Oder mit anderen Worten - Windows meldet sich mit dem Text das die Anwendung nicht mehr reagiert...


RE: <script> in CheatEngine - Schnieker - 21.10.2012

Also muss ich auf die Adresse springen die nach dem Jump in die CodeCave kommt?
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.
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.


RE: <script> in CheatEngine - iNvIcTUs oRCuS - 21.10.2012

(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".


RE: <script> in CheatEngine - Schnieker - 21.10.2012

Ja ich hatte schonmal mit Pointern zu tun Wink Hab auch hier schon 2 Trainer von mir gepostet die auf Pointern basieren. Allerdings kann man so ja keine richtige Godmode Funktion machen. Weil wenn man einmal mehr als 100 HP abgezogen bekommt ist man auch tot. Durch Code Injection bekommt man garnicht erst Schaden.

EDIT: So, ich habe das jetzt mit den Scripts hinbekommen. Funzt auch super...bis ich das Spiel neu starte. Keine Ahnung woran das liegt. Ich habe Windows XP und die Basisadresse ändert sich auch nicht.