23.07.2012, 00:25
Hey,
schön das du nicht aufgibst und versuchst immer weiter zu lernen. Weiter so!
ESI beinhaltet die Struktur zum Spieler (also wo Daten über den Spieler "gespeichert" werden)
in ESI+4 befindet sich z.B der Name
in ESI+8 die Lebenspunkte
in ESI+12 die Erfahrungspunkte
u.s.w
in Pseudocode sehe das folgendermaßen aus:
schön das du nicht aufgibst und versuchst immer weiter zu lernen. Weiter so!
(22.07.2012, 21:33)FPS-Player schrieb:Das gilt theoretisch für jede .exe. Also jedes Spiel, in dem die Cheats in einer .exe lokalisiert sind, haben die Basisadresse von 0x400000h. Wenn das Spiel jedoch über eine Dynamic Link Library z.B den ganzen Timerkram steuert, dann musst du erst die BaseAdresse der dll ausfindig machen. Wie das Wort dynamic (dynamisch) schon sagt, werden diese Libraries immer an andere Orte geladen.Zitat:Bei diesem Code gibts nichts auseinanderzupflücken...Aha! Das habe ich verstanden. Gilt denn die Basisadresse 0x400000h nur für Just cause 2 oder generell für jedes Spiel?
[code=ASM]JustCause2.exe+4103F0 - F3 0F11 46 40 - movss [esi+40],xmm0[/code]
Der erste Teil beschreibt die Position wo diese Anweisung zu finden ist. Und da sehen wir das diese Anweisung in der "JustCause2.exe" an Adresse "JustCause2.exe+4103F0" zu finden ist. Und da die Basisadresse der EXE Datei im Speicher immer diesselbe ist, nämlich 0x400000h, so könnte ich auch statt "JustCause2.exe+4103F0" auch einfach nur "008103F0" schreiben. Weil, wenn ich zur Basisadresse von 0x400000h den Wert 0x4203F0h addiere ich eben den HEX Wert 008103F0 erhalte.
(22.07.2012, 21:33)FPS-Player schrieb:Nein, wir müssen den Originalcode überschreiben. Anders kommen wir ja nicht zur CodeCave. aus movss [esi+40], xmm0 wird Jmp AdresseCodecave. Deswegen müssen wir auch im Endeffekt den Originalcode wieder in die CodeCave schreiben, da sonst das Spiel nicht weiss was es machen soll.Zitat:Die Anweisung die unsere Timer Adresse beschreibt ist genau 5 Bytes groß bzw. lang. Und unser reiner Cheatcode ist im Endeffekt 10 Bytes lang...Halt! Überschreiben können wir den Code ja nicht, da sonst das Spiel abschmiert. Du meinst sicherlich, das wir sozusagen einen Bypass zu diesem Code legen - unsere Codecave...oder?
[code=ASM]F3 0F 10 46 44 - movss xmm0,[esi+44]
F3 0F 11 46 40 - movss [esi+40],xmm0[/code]
Also muss eben eine Codecave her. Und da wir durch den Sprung zu dieser Codecave den Originalcode "movss [esi+40],xmm0" überschreiben da können wir uns diesen auch gleich zu unseren Zwecken ausnutzen.
(22.07.2012, 21:33)FPS-Player schrieb:Nein, so einfach ist das leider nicht. Der sILeNt heLLsCrEAm hat sich die Struktur von der in ESI befindlichen Adresse angeguckt. Also folgendes Szenario:Zitat:Und wie ich da bereits sagte wird in [ESI+40], was unsere Timer Adresse ist, immer wieder der Wert des XMM0 Registers kopiert. Die Zeit nimmt also ab. Aber direkt neben der Adresse des tatsächlichen Zeitwertes befindet sich auch die Adresse mit dem maximalen Zeitwert bzw. dem Zeitwert bei vollem Balken.Ah, also wäre - nur zur Verdeutlichung - der Timer, bzw. die Adresse [ESI+30] --> sprich ablaufende Zeit, müsste ich, wenn ich den max. Zeitwert einstellen wollte immer (also in jedem Fall/Spiel) 4 Bytes dazurechnen, so das ich dann auf [ESI+30+4] käme, also [ESI+34], richtig?
Also...
[ESI+40] = Tatsächlicher Zeitwert
Timer Adresse + 4 Bytes = Maximaler Zeitwert
Man könnte das auch so schreiben
[ESI+40+4] aber [ESI+44] ist ja dasselbe
ESI beinhaltet die Struktur zum Spieler (also wo Daten über den Spieler "gespeichert" werden)
in ESI+4 befindet sich z.B der Name
in ESI+8 die Lebenspunkte
in ESI+12 die Erfahrungspunkte
u.s.w
in Pseudocode sehe das folgendermaßen aus:
Code:
1 |
|
Jedoch ist das vom Programmierer abhängig. Er hätte die Struktur auch folgendermaßen aufbauen können:
Code:
1 |
|
Dann wäre bei ESI+4 die HP zu finden.
(22.07.2012, 21:33)FPS-Player schrieb:Dazu guckst du dir einfach die Opcodes des Befehls (F3[1] 0F[2] 11[3] 46[4] 40[5]) an.Zitat:Der Sprung zur Codecave war an Adresse "JustCause2.exe+4103F0", oder anders geschrieben an Adresse "008103F0". Da der Sprung, genauso wie der Originalcode, 5 Bytes lang/groß ist addieren wir zu dieser Adresse 5 Bytes hinzu. Also müssen wir zu Adresse "JustCause2.exe+4103F5", oder anders geschrieben zu Adresse "008103F5" zurückspringen.
Ok, auch verstanden! Aber woher weiß ich, das der Originalcode 5 Bytes groß war/ist?
(22.07.2012, 21:33)FPS-Player schrieb: Hmm, trotz CE oder AM muß man ja tatsächlich ein bisschen Programmieren können (oder zumindest etwas davon verstehen)... Junge Junge...Es ist auf jeden Fall nicht kontraproduktiv

"Auf dieser Welt gibt es mehr Scheisse als auf Festivalklos"
![[Bild: hoglogo_smalpxga.jpg]](http://h-2.abload.de/img/hoglogo_smalpxga.jpg)