Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

29.06.2009, 13:14

[s] Hilfe zu WriteProcessMemory (Pointer, Offset)

Hi,

Ich würde gerne einen Trainer für ein Spiel schreiben, leider hab ich keine Ahnung, wie man den Wert der referenzierten Variable ändert.

Pointer: 0x0B0F65C8
Offset: 46c

Weiß jemand wie ich das mit der Funktion WriteProcessMemory hinbekomm?

Danke im Voraus.

Gotbread

Alter Hase

Beiträge: 421

Beruf: Student (Etechnik) + Hiwi

  • Private Nachricht senden

2

29.06.2009, 14:37

in der tutorialabteilung dieses forums gibt es dazu ein klasse beispiel:

https://www.spieleprogrammierer.de/phpBB2/viewtopic.php?t=9544

im großen und ganzen:

debugrechte holen (manchmal gehts auch ohne)
zielprozess anzapfen (OpenProcess)
wert reinschreiben (WriteProcessMemory)

wenn du den wert ändern willst, musst du erstmal per readprocessmemory
den wert an der stelle des zeigers auslesen (ihn dereferenzieren).

die erhaltene addresse kannst du dann beschreiben.

der offset, worauf bezieht der sich?
Mfg Goti
www.gotbread.bplaced.net
viele tolle spiele kostenlos, viele hardware-basteleien :)

"Es ist nicht undicht, es läuft über" - Homer Simpson

3

29.06.2009, 15:15

Zitat von »"Gotbread"«

in der tutorialabteilung dieses forums gibt es dazu ein klasse beispiel:

https://www.spieleprogrammierer.de/phpBB2/viewtopic.php?t=9544

im großen und ganzen:

debugrechte holen (manchmal gehts auch ohne)
zielprozess anzapfen (OpenProcess)
wert reinschreiben (WriteProcessMemory)

wenn du den wert ändern willst, musst du erstmal per readprocessmemory
den wert an der stelle des zeigers auslesen (ihn dereferenzieren).

die erhaltene addresse kannst du dann beschreiben.

der offset, worauf bezieht der sich?


Auf referenzierte Variable.
Das Tutorial hab ich erst schon ein wenig überflogen.
Leider bin ich eher noch am 'C' lernen, deshalb kann ich da noch nicht mithalten.
Ich hab irgendwo gelesen, dass ich den offset zum Pointer dazuaddieren muss. Wie funktioniert das?

Gruß

4

29.06.2009, 17:03

Zitat von »"Silent Storm"«


Auf den Pointer..
Das Tutorial hab ich erst schon ein wenig überflogen.
Leider bin ich eher noch am 'C' lernen, deshalb kann ich da noch nicht mithalten.
Ich hab irgendwo gelesen, dass ich den offset zum Pointer dazuaddieren muss. Wie funktioniert das?

Gruß

Ich befürchte, mit deinem aktuelle Wissenstand wirst du es nciht alleine schaffen, einen Trainer zu schreiben.
Lern erstmal richtig zu programmieren.
Lieber dumm fragen, als dumm bleiben!

5

29.06.2009, 17:04

Zitat von »"Jonathan_Klein"«

Zitat von »"Silent Storm"«


Auf den Pointer..
Das Tutorial hab ich erst schon ein wenig überflogen.
Leider bin ich eher noch am 'C' lernen, deshalb kann ich da noch nicht mithalten.
Ich hab irgendwo gelesen, dass ich den offset zum Pointer dazuaddieren muss. Wie funktioniert das?

Gruß

Ich befürchte, mit deinem aktuelle Wissenstand wirst du es nciht alleine schaffen, einen Trainer zu schreiben.
Lern erstmal richtig zu programmieren.


Ich hab schon welche geschrieben, aber ohne Pointer.

physX

Treue Seele

Beiträge: 119

Wohnort: Dresden

  • Private Nachricht senden

6

29.06.2009, 17:52

hallo, schau mal unter
http://www.developia.de/developia/viewarticle.php?cid=21464
ist ein tutorial zu pointern, dort findest du aber unter abschnitt 7 die antwort zu deiner frage wie man einen offset zu dem pointer addiert (glaub ich zumindest). falls ich jetzt voellig daneben liege, dann bitte ignorieren.
das tutorial ist auch insgesamt sehr gut geschrieben...
Gruss

Zitat von »"Silent Storm"«

Zitat von »"Gotbread"«

in der tutorialabteilung dieses forums gibt es dazu ein klasse beispiel:

https://www.spieleprogrammierer.de/phpBB2/viewtopic.php?t=9544

im großen und ganzen:

debugrechte holen (manchmal gehts auch ohne)
zielprozess anzapfen (OpenProcess)
wert reinschreiben (WriteProcessMemory)

wenn du den wert ändern willst, musst du erstmal per readprocessmemory
den wert an der stelle des zeigers auslesen (ihn dereferenzieren).

die erhaltene addresse kannst du dann beschreiben.

der offset, worauf bezieht der sich?


Auf den Pointer..
Das Tutorial hab ich erst schon ein wenig überflogen.
Leider bin ich eher noch am 'C' lernen, deshalb kann ich da noch nicht mithalten.
Ich hab irgendwo gelesen, dass ich den offset zum Pointer dazuaddieren muss. Wie funktioniert das?

Gruß

7

29.06.2009, 19:52

Ich seh da nur den Zusammenhang zwischen Arrays und Pointern.
Ich versuche gerade das Prob zu lösen und hoffe ihr sagt einfach wie geht :D.

Quellcode

1
2
3
4
5
6
7
8
9
10
while(1)
    {
    if(GetAsyncKeyState(VK_CONTROL) & 1) // Gold
          {
          ReadProcessMemory(hGame, (LPVOID) 0x0B0F65C8, &adress, sizeof(adress), 0);
            // Code ist noch falsch..       
          Sleep(100);
           value += 1;
           WriteProcessMemory(hGame, (LPVOID) adress, &value, sizeof(value), 0);
           }


Jedesmal wenn ich STRG drücke, soll der Wert einer Adresse geändert werden. Zurzeit lautet die Adresse 15DA3474, wie im Bild zu sehen ist.

(Link)

Mit ReadProcessMemory sollte ich die Adresse(15DA3008), die der Pointer(0xB0F65C8) beinhaltet in der variable 'adress' speichern, danach addiere ich den offset dazu.
Nur hab ich Probleme ReadProcessMemory zu verstehen. Es wird auch leider kaum beschrieben, wie sie funktioniert, sondern nur warum man sie verwendet.
Hoffe ihr könnt mich erleuchten und das Problem lösen.

Werbeanzeige