PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [C++] Problem beim Trainer erstellen



Megagamer
10.03.2010, 14:32
Moin,

ich versuche mich momentan an einem Trainer für Empire Earth (ist zwar nicht das neuste, aber ich finds lustig^^).
Das Spiel ist durch DMA geschützt also kann ich nicht einfach mittels "WriteProcessMemory" den wert ändern. Wenn ich in Cheat-Engine dann auf "Find out what writes to this address" klicke komm ich zum ASM code (denk ich ma^^). Dort steht : "sub [eax],ecx". In Cheat-Engine kann ich den Code zb. einfach auf "add [eax],ecx" ändern. jetzt die Frage : Wie kann ich das mittels C++ machen?
Geht das auch mit WriteProcessMemory?

Thx :D

aL1ien
10.03.2010, 14:36
Geht das auch mit WriteProcessMemory?

Warum probierst du es nicht einfach aus? Du wirst relativ schnell merken, dass dies nicht funktionieren sollte. Lese dich in "code" bzw "dll injection" ein und du wirst fündig werden.

Megagamer
10.03.2010, 14:54
Danke für die antwort :)
Werd mal nach ein paar tutorials suchen ...

EBFE
10.03.2010, 15:27
Du musst die sub [eax],ecx Anweisung überschreiben.

Den Patch selbst kannst du z.B mit InlineASM oder Ollydbg erstellen:


0108 ADD DWORD PTR DS:[EAX],ECX

das ist zum Beispiel Ollydbg Ergebnis für add [eax],ecx. Links der Opcode dafür und rechts die "menschenlesbare" Übersetzung. D.h um dein "sub [eax],ebx" (opcode 29 08) zu ändern brauchst du nur ein Byte zu patchen: 29 zu 01. Das macht man genauso wie "memorypatches" mit WriteProcessMemory ;)

PS:Normalerweise haben Code Bereiche eine "Execute,Read" Zugrifferlaubnis, so dass man nicht ohne weiteres etwas hineinschreiben kann. Kann man aber ändern mit VirtualProtectEx (http://msdn.microsoft.com/en-us/library/aa366899%28VS.85%29.aspx) - patchen und dann wieder mit VirtualProtectEx den alten Zugriff setzen.

G36KV
11.03.2010, 10:49
Das Spiel ist durch DMA geschützt also kann ich nicht einfach mittels "WriteProcessMemory" den wert ändern.
Was soll den dieser Satz bedeuten? DMA = Direct Memory Access? oder dynamic memory allocation?
Ganz egal was es ist, beides ist kein "Schutz" und an der Anwendbarkeit von WriteProcessMemory ändert sich auch nichts. Empire Earth ist nur mit einem System geschützt und das nennt sich SecuRom. SecuRom stört sich aber auch nicht an WriteProcessMemory.


Du wirst relativ schnell merken, dass dies nicht funktionieren sollte. Lese dich in "code" bzw "dll injection" ein und du wirst fündig werden.
So ein quatsch. Rate mal was nötig ist um eine DLL zu injekten... oh richtig WriteProcessMemory, es sei den man benutzt eine sehr unübliche und schlechte Variante.

PHRoZeNCReW
13.03.2010, 21:46
So ein quatsch. Rate mal was nötig ist um eine DLL zu injekten... oh richtig WriteProcessMemory, es sei den man benutzt eine sehr unübliche und schlechte Variante. An dieser Stelle sei mal erwähnt, dass es durchaus trotzdem möglich sein kann ein Spiel, welches mit Anti-Cheat-Software geschützt ist mit Hilfe von DLL-Injektion zu manipulieren auch wenn man dafür WriteProcessMemory benötigt. Meistens startet man nämlich zuerst das Spiel, welches dann wiederrum anschließend die Anti-Cheat-Software lädt. Genau dieses Laden der Software dauert meistens seine Zeit. Das heißt man kann einen Injector nutzen, welcher unmittelbar nachdem das Spiel gestartet ist eine Injektion durchführt. Kann sein, dass das nur in der Minderheit der Fälle funktioniert, jedoch hat es bisher bei allen Spielen funktioniert mit denen Ich experimentiert habe.

AlterHacker
13.03.2010, 22:35
Also DMA [Dynamic Memory Allocation oder wies geschrieben wird] heißt nichts anderes, als dass die Adressen von den Werten stets anders sein.
Also musst du einen Pointer zu den Adressen finden.
In etwa so
[0x00464010] = 0x00203040
[0x00203040 + 0x3A] = Gold
Also musst du erstmal 0x00464010 auslesen, dem wert 0x3A hinzufügen und dann ahst du die adresse, wo dein Gold steht ;-)

Das mit dem 0x3A (und alle andere Werte) sind erfunden.
Ich kann dir nur mal empfehlen, das CheatEngine-Tutorial durchzu-"zocken". Bis zu den Multi-Pointers soltlestes eg locker packen^^