[Question] WriteProcessMemory With Pointer & Offset !?

02/19/2012 17:37 xBioK1ngz#1
Wie schreibe ich mit WriteProcessMemory zu einen Offset mit Pointer ?!
02/19/2012 17:46 Nightblizard#2
[Only registered and activated users can see links. Click Here To Register...]
02/19/2012 17:48 xBioK1ngz#3
Ahja, wie mach ich jetzt damit ein Offset mit Pointer ?
02/19/2012 18:20 Nightblizard#4
Quote:
Originally Posted by xBioK1ngz View Post
Ahja, wie mach ich jetzt damit ein Offset mit Pointer ?
Huh? Könntest du dich bitte ein wenig genauer ausdrücken? Unter "ein Offset mit Pointer machen" kann ich mir leider nichts vorstellen.


Edit:
Aber ich glaube du meinst das hier:
Code:
UINT_PTR ptr = 0xDEADBEEF;
UINT_PTR offset = 0xBOOB5
int value = 0;
SIZE_T numWritten = 0;
WriteProcessMemory(process, reinterpret_cast<LPVOID>(ptr + offset), reinterpret_cast<LPCVOID>(value), sizeof(value), &numWritten);
02/19/2012 18:23 xBioK1ngz#5
INT iValue = 999;
DWORD dwAmmoPtr = *(DWORD*)0x91A814;
DWORD dwAmmoOfs = *(DWORD*)(dwAmmoPtr+0xFFF12);
WriteProcessMemory(hProcessHandler,(LPVOID)dwAmmoO fs,&iValue,sizeof(iValue),0);

Habe in Cheat Engine eine Addresse gefunden, die den Pointer "0x91A814" hat und das Offset "0xFFF12".
Jetzt möchte ich es mit "WriteProcessMemory" auf INT "999" schreiben, aber es funktioniert nicht.
02/19/2012 18:29 Nightblizard#6
So schreibst du die Adresse von iValue in den Speicher. Du musst nach LPCVOID casten.
Außerdem solltest du Adressen nicht in int speichern, sondern in UINT_PTR. Der Typ garantiert dir immer groß genug zu sein, um einen Pointer beinhalten zu können.
Und du solltest C++-Casts nutzen, die sind sicherer als C-Casts.



Edit:
Nein, warte. Vergiss den ersten Satz. Ich schau nochmal nach dem Bearbeiten...
02/19/2012 18:34 xBioK1ngz#7
Wie funktioniert das jetzt genau :) ??
02/19/2012 18:41 Nightblizard#8
Okay, da du die Pointer direkt dereferenzierst scheinst du wohl im fremden Prozess zu arbeiten. Dann brauchst du WriteProcessMemory gar nicht.

Code:
UINT_PTR* ammoPtr = reinterpret_cast<UINT_PTR*>(*reinterpret_cast<UINT_PTR*>(0x91A814));
UINT_PTR* ammoOfs = (ammoPtr + 0xFFF12);
*ammoOfs = 999;
Ich denke so haut das hin.
02/19/2012 18:47 xBioK1ngz#9
Ich mache keine DLL Injektion, ich muss es über WriteProcessMemory machen ..
02/19/2012 18:51 Nightblizard#10
Dann kannst du die Pointer nicht direkt dereferenzieren, sondern musst deren Werte vorher über ReadProcessMemory auslesen.
02/19/2012 18:55 xBioK1ngz#11
Wie geht das :) ?
02/19/2012 19:00 Nightblizard#12
Ach komm schon, ein wenig Eigeninitiative wäre schon angebracht.
[Only registered and activated users can see links. Click Here To Register...]

Code:
TYPE buffer = 0;
UINT_PTR address = 0xDEADBEEF;
SIZE_T numRead = 0;

ReadProcessMemory(process, reinterpret_cast<LPCVOID>(address), &buffer, sizeof(buffer), &numRead);
Mehr spoonfeeding gibt es aber nicht von meiner Seite. :/
02/19/2012 19:22 MrSm!th#13
Quote:
Mehr spoonfeeding gibt es aber nicht von meiner Seite. :/
Und auch nicht von uns.

#closed