Home of Gamehacking - Archiv
Dark Messiah Pointer.. nicht auffindbar - 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: Dark Messiah Pointer.. nicht auffindbar (/showthread.php?tid=819)

Seiten: 1 2 3 4


RE: Dark Messiah Pointer.. nicht auffindbar - iNvIcTUs oRCuS - 01.01.2012

(01.01.2012, 17:20)Sheek schrieb: Super zu wissen was es ist, aber wie ich damit umgehe also wie ich damit eine Injection mache weis ich immer noch nicht, gibt es nachschlage werk?

Das kommt drauf an welchen Wert das Spiel erwartet oder erwarten würde. Nehmen wir als Beispiel das Spiel speichert die Health als Float ab. Nehmen wir weiter an das dass Spiel einen Health Wert von minimal 0 bis maximal 100 erwartet. Normalerweise würde es reichen z.b. die volle Gesundheit von 100 schreiben zu lassen, aber die Fließkommazahlen sehen Hexadezimal geschrieben allesamt anders aus. Normalerweise würde man bei einem Wert von 100 dez, den Wert 0x64h schreiben. Z.b. so...
[code=ASM]mov eax, 64
mov [eax+FD], 64 (oder so)
mov al, 64 (oder auch so)[/code]
Wie gesagt haben aber die Fließkommazahlen ihre eigene Hexadezimale Darstellung. Der Wert 100 wird z.b. als 0x42C80000h gespeichert. Eine Codecave könnte simplerweise z.b. dann so aussehen...
[code=ASM]fstp dword ptr [ecx+000029BC] (Spiel schreibt die Health)
mov [ecx+000029BC], 42C80000 (Wir schreiben die volle Health zurück)
jmp 'raus aus Codcave'[/code]
Bei vielen Rollenspielen und auch anderen natürlich speichert das Spiel aber auch die maximal mögliche Health des Charakters ab. Nehmen wir mal als Beispiel ein Rollenspiel. Man kann ja seinen Charakter in der Regel durch Erfahrungspunkte z.b. einen höheren Healthwert oder auch Manawert zuweisen. Wie gesagt gibt es jetzt viele Spiele die diesen maximal möglichen Wert des Charakters auch abspeichern. Meistens liegt dieser Wert garnicht weit entfernt vom tatsächlich angezeigten Wert, bzw. vom vom gerade vorhandenen Wert. Eine Codecave könnte dann folgendermaßen aussehen...
[code=ASM]fstp dword ptr [ecx+000029BC] (Spiel schreibt die Health)
push eax (Backup des EAX Registers auf den Stack)
mov eax, [ecx+29C0] (maximale Health auslesen)
mov [ecx+29BC], eax (maximalen Healthwert zurückschreiben)
pop eax (EAX Register wiederherstellen)
jmp 'raus aus Codecave'[/code]

In jedem Falle solltest Du aber, wenn Du an dieser Stelle eine Codeinjection machst innerhalb deiner Codecave diesen Befehl als erstes ausführen lassen und danach mit deinem gewünschten Wert überschreiben lassen. Denn wie ich schon sagte räumt dieser Befehl den Wert vom FPU Stack ab was ansonsten zu unerwünschten Nebeneffekten oder gar zum Crash eines Spiels führen kann wenn mans nicht macht.