Registerwerte verändern
-
drakon schrieb:
Rechne den Offset halt dazu. Wo genau ist das Problem?
Das funktioniert bei mir nicht
-
Das heisst? - Wird der Wert nicht angepasst?
Im übrigen kannst du so (meist) nicht auf den nativen RAM zugreifen. Das klappt lediglich für den virtuellen von deinem Programm. Wenn du auf den wirklichen Speicher zugreifen willst, brauchst du Betriebssystemspezifsche Funktionen.
-
Ich habe ein kleines Programm mit ein paar WinApi funktionen geschrieben. Also ein eigenständiges exe. Habe aber erneut das Problem mit dem offset...
-
Wer doch einmal ein wenig konkreter. Du hast ein Problem. Schön, aber ohne irgendwelche Informationen bleibt das auch so..
-
ist schwierig...
will einen trainer schreiben.
habe mit cheatengine das register des programms durchsucht, nach der Addresse die die anzahl der verbleibenden Bälle enthielt. Danach habe ich den Pointer dieser addresse herausgefunden. Habe aber neben der pointeraddresse noch einen Offset herausbekommen. Jetzt weiß ich nicht wie ich auf die Addresse zugreifen kann.Ohne Offset währe das ein Kinderspiel.
Mit offset steh ich auf dem schlauch
-
cbacon93 schrieb:
ist schwierig...
will einen trainer schreiben.
habe mit cheatengine das register des programms durchsucht, nach der Addresse die die anzahl der verbleibenden Bälle enthielt. Danach habe ich den Pointer dieser addresse herausgefunden. Habe aber neben der pointeraddresse noch einen Offset herausbekommen. Jetzt weiß ich nicht wie ich auf die Addresse zugreifen kann.Ohne Offset währe das ein Kinderspiel.
Mit offset steh ich auf dem schlauchPoste doch bitte mal etwas ASM aus dem Disassembler.
Kleiner Tipp: Die einzige Möglichkeit den Wert eines Registers zu einer bestimmten Zeit zu verändern wäre via Breakpoint was wohl deutlich darüber hinausgeht.Lern etwas Assembler und über Compilerlogik beim Erzeugen von Assemblercode und finde ein statisches Offset bzw Pointer auf deine Addresse.
-
Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ in das Forum Rund um die Programmierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
cbacon93 schrieb:
ist schwierig...
will einen trainer schreiben.
habe mit cheatengine das register des programms durchsucht, nach der Addresse die die anzahl der verbleibenden Bälle enthielt. Danach habe ich den Pointer dieser addresse herausgefunden. Habe aber neben der pointeraddresse noch einen Offset herausbekommen. Jetzt weiß ich nicht wie ich auf die Addresse zugreifen kann.Ohne Offset währe das ein Kinderspiel.
Mit offset steh ich auf dem schlauchDu kannst bei den meisten Betriebssystemen nicht einfach in fremden Adressraum schreiben, da virtuelle Adressen benutzt werden. Dein Programm sieht gar nicht den Speicher des anderen Programm. Wenn du im Speicher des anderen Programm rumschreiben willst, musst du entsprechende Betriebssystem abhängige Tricks benutzen.
-
ach Leute, aber seinen Beitrag solltet ihr trotzdem lesen. Er schrieb im 1.Posting doch gleich, daß er eine DLL in den Zielprozess injiziert hat.
-
cbacon93 schrieb:
Ich habe ein kleines Programm mit ein paar WinApi funktionen geschrieben. Also ein eigenständiges exe. Habe aber erneut das Problem mit dem offset...
der offset zählt bei 'nem int-pointer immer sizeof(int) dazu. wenn du byte-offsets addieren willst, dann vielleicht so:
int *p = (int*)0x1234; // basisadresse p = p + n / sizeof(int); // n bytes dazu (int-aligned) p = (int*)((char*)p)+n; // n bytes dazu (mit byte-auflösung)
^^oder verwende gleich einen char*
-
rüdiger schrieb:
cbacon93 schrieb:
ist schwierig...
will einen trainer schreiben.
habe mit cheatengine das register des programms durchsucht, nach der Addresse die die anzahl der verbleibenden Bälle enthielt. Danach habe ich den Pointer dieser addresse herausgefunden. Habe aber neben der pointeraddresse noch einen Offset herausbekommen. Jetzt weiß ich nicht wie ich auf die Addresse zugreifen kann.Ohne Offset währe das ein Kinderspiel.
Mit offset steh ich auf dem schlauchDu kannst bei den meisten Betriebssystemen nicht einfach in fremden Adressraum schreiben, da virtuelle Adressen benutzt werden. Dein Programm sieht gar nicht den Speicher des anderen Programm. Wenn du im Speicher des anderen Programm rumschreiben willst, musst du entsprechende Betriebssystem abhängige Tricks benutzen.
Kann er schon, da im anderen Programm ist
"PS: Es wird eine DLL die in das entsprechende Programm injiziert wird "
-
cbacon93 schrieb:
Addresse: 01E51838 offset: 146 hat den Wert 3
wie zur Hölle hast du das herausgefunden ?