Assembler

04/18/2010 01:01 -Raptor-#1
Hallo und guten Morgen|Tag|Abend,


ich schreibe gerade an einen TeleportHack in CS:S.
So nun hab ich die Addressen die mithilfe von
WriteProcessMemory geändert werden.

Das Problem ist, das das spiel so schnell die werte ändert,
dass ich mich nur ca. 10ingame Meter bewege und dan sofort wieder zurück.

Nun kann ich mich cheatengine Ja die verantwortlichen codestellen
mit nop ersetzen und danach wieder die alten befehle zurücksetzen
aber wie mache ich das jetzt in C++ oder au3/ahk??

Also::
1. Codestellen mit nop
2. WriteProcessMemory
3. Codestellen wiederherstellen


thx im vorraus
04/18/2010 01:22 Akorn#2
Quote:
Originally Posted by -Raptor- View Post
Hallo und guten Morgen|Tag|Abend,


ich schreibe gerade an einen TeleportHack in CS:S.
So nun hab ich die Addressen die mithilfe von
WriteProcessMemory geändert werden.

Das Problem ist, das das spiel so schnell die werte ändert,
dass ich mich nur ca. 10ingame Meter bewege und dan sofort wieder zurück.

Nun kann ich mich cheatengine Ja die verantwortlichen codestellen
mit nop ersetzen und danach wieder die alten befehle zurücksetzen
aber wie mache ich das jetzt in C++ oder au3/ahk??

Also::
1. Codestellen mit nop
2. WriteProcessMemory
3. Codestellen wiederherstellen


thx im vorraus
Wie meinste das mi dem wieder zurück? Etwa das wen du dich Teleportierst das du dan kurz darauf wieder zurück an deiner alten position bist? Das würd bedeuten das der Server die positionen der Spieler gena kotrolliert um solche hacks zu verhindern.

Und den alten code wieder her zu stellen ist recht simpel du musst einfach nur mit einen Disassembler den opcode der an der stelle steht den du mit nop´s füllst notieren (natürlich vor dem ändern).
Und Später wen du den code wieder herstellen willst überschreibst du mittels Writeprocessmemory einfach wieder die nop´s mit den original opcode.
04/18/2010 08:53 rEdoX#3
ReadProcessMemory(Addr, buf, Size);
WriteProcessMemory(Addr, NOP, Size);
//teleport
WriteProcessMemory(Adr, buf, Size);
04/18/2010 11:20 -Raptor-#4
danke rEdoX
werde ich gleich mal ausprobieren
04/18/2010 14:56 MrSm!th#5
ähm

das symbol nop gibts nicht, noch dazu verlangt WriteProcessMemory einen pointer;

du musst den opcode 0x90 in jedes bypte schreiben, damit alles genoppt wird.
also mit ner for schleife
mach doch lieber nen jump rüber, ist einfach ;)
04/18/2010 17:32 Akorn#6
Quote:
Originally Posted by MrSm!th View Post
ähm
du musst den opcode 0x90 in jedes bypte schreiben, damit alles genoppt wird.
also mit ner for schleife
mach doch lieber nen jump rüber, ist einfach ;)
Wieso mit einer schleife man kann auch einfach ein array von mehreren 0x90 nehmen und das dann mit nur einem Writeprocessmemory aufruf in den speicher schreiben.
04/18/2010 17:40 MrSm!th#7
Quote:
Originally Posted by Akorn View Post
Wieso mit einer schleife man kann auch einfach ein array von mehreren 0x90 nehmen und das dann mit nur einem Writeprocessmemory aufruf in den speicher schreiben.
hm stimmt o.o
wow mega denkfehler.

naja ich würd trotzdem lieber jumpen
04/19/2010 09:41 buFFy!#8
DLL oder Trainer?

Btw ist nopen nicht so günstig. Ich würd lieber drüberspringen.
Bei nop kriegst manchmal ohne grund exception
04/19/2010 12:36 bloodx#9
Wenn man richtig NOP benutzt funktioniert das auch.
Gibt aber auch schönere Wege als NOP.
04/19/2010 14:50 buFFy!#10
Quote:
Originally Posted by bloodx View Post
Gibt aber auch schönere Wege als NOP.
Darauf wollte ich eigentlich hinaus.
Aber wenn du denkst es hat die selbe Wirkung.. stimmt nicht ganz.
Die stelle zu Hooken und den Wert zu ändern ist ein riesen Unterschied zu
Wert_ändern einfach rausnehmen ;>

Natürlich nur wenn der Wert großartig relevant für irgendwelche Enginespezifischen Dinge ist.