Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding
You last visited: Today at 13:50

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Write/Read ProcessMemory() - Multilevel pointer

Discussion on Write/Read ProcessMemory() - Multilevel pointer within the General Coding forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Mar 2013
Posts: 11
Received Thanks: 0
Write/Read ProcessMemory() - Multilevel pointer

Hallo!

Ich habe für ein Spiel den BasePointer gefunden.
Sein Adresse ist: FF96AFA8, das erste Offset ist:14, das Zweite ist 50!
PHP Code:
DWORD BasePointer 0xFF96AFA8
WORD offset 0x0014;
WORD offset2 0x0050;
ReadProcessMemory(solHandle,(LPCVOID)(BasePointer+offset2+offset),&pointed4NULL); 
Wie muss es richtig sein. Die Funk. Readp... gibt eine NULL aus. Alles andere bis auf die Pointer - Offset Geschichte ist in Ordnung.
H4rtzer is offline  
Old 04/07/2013, 17:19   #2

 
snow's Avatar
 
elite*gold: 724
Join Date: Mar 2011
Posts: 10,479
Received Thanks: 3,318
Das ist nicht zufällig ein Spiel mit der CryEngine, oder?

Hier ein Beispiel für die Position mit Multi-Level-Pointern: (extra für dich kommentiert und der Code geht bestimmt besser, aber egal)

Code:
	DWORD *baseAddress = (DWORD *)((DWORD)hCryAction + baseCoordOffset); // äquivalent zum BasePointer
	DWORD *offset1	   = (DWORD *)(*baseAddress  + COORD_1); // Adresse, die in baseAddress ist + 1. Offset
	DWORD *offset2     = (DWORD *)(*offset1 + COORD_2); // Adresse, die in offset1 ist + 2. Offset
	DWORD *content= (DWORD *)(*offset2 + COORD_3); // Adresse, die in offset2 ist + 3. Offset

        struct coordinates *st = (coordinates *)(*content + COORD_X); // und hier die Verwendung: Einen Struct-Pointer auf den Inhalt von content + COORD_X (das ist bei mir 0x0 und ist nur zur Übersichtlichkeit da)
Genauso musst du es auch mit ReadProcessMemory machen. BasePointer auslesen und den Wert + offset auslesen usw.
snow is offline  
Thanks
1 User
Old 04/07/2013, 17:39   #3
 
elite*gold: 0
Join Date: Mar 2013
Posts: 11
Received Thanks: 0
Danke für deine Antwort. Ist nur Solitär. Aber das hilft mir nur bedingt weiter. Es wäre nett, wenn du dich direkt aus Solität beziehen könntest. ...Ich bin nämlich gerade am Verzweifeln!
H4rtzer is offline  
Old 04/07/2013, 17:46   #4

 
snow's Avatar
 
elite*gold: 724
Join Date: Mar 2011
Posts: 10,479
Received Thanks: 3,318
Bei Solitär ist das der selbe Weg, mal auf meinen Code umgeschrieben (ich habe eine DLL, weshalb ich kein ReadProcessMemory() benötige, du musst natürlich immer den Weg über ReadProcessMemory() gehen)

Code:
DWORD *baseAddress = (DWORD)*0xFF96AFA8; // nicht sicher, ob man auch die Base Address des Programms braucht 
	DWORD *offset1	   = (DWORD *)(*baseAddress  + 0x14); // Adresse, die in baseAddress ist + 1. Offset
	DWORD *content     = (DWORD *)(*offset1 + 0x50); // Adresse, die in offset1 ist + 2. Offset -> da drinnen ist der Content.
Das Prinzip von Multilevelpointern ist halt, dass in einer Adresse & einem Offset eine neue Adresse hinterlegt ist, die + ein weiteres Offset ergibt eine Adresse, in der eine Adresse ist (= ein Pointer) usw.
snow is offline  
Thanks
2 Users
Old 04/07/2013, 17:52   #5
 
elite*gold: 0
Join Date: Mar 2013
Posts: 11
Received Thanks: 0
Danke, das erscheint mir schon logischer.
(DWORD)*0xFF96AFA8 ...Hier gibt es die Fehlermeldung: Der Operand muss ein Zeiger sein.

Ich meine, wenn ich auf meine statische Basisadresse die Offsets addiere, dann müsste ich auf die (dynamische)Adresse kommen in der der gewünschte bzw. der auszulesende Wert steht. Oder?
H4rtzer is offline  
Old 04/07/2013, 18:01   #6

 
snow's Avatar
 
elite*gold: 724
Join Date: Mar 2011
Posts: 10,479
Received Thanks: 3,318
Hoppla, Tippfehler. Natürlich muss der Pointer-Cast das Asteriks-Dings (*) beinhalten. (DWORD*) statt (DWORD)* löst das ganze.

Ne, du hast in der statischen Basisadresse eine (wahrscheinlich) variable Basisadresse. Diese + das Offset ergibt wieder eine variable Adresse (die über die variable Adresse in der statischen Adresse + das immer gleich bleibende Offset bekommt), mit der + dem 2. Offset kommt man wieder auf eine variable Adresse, in der der Wert liegt.
Bisschen kompliziert, aber wenn man mal das Prinzip der Pointer verstanden hat, ist es eigentlich relativ leicht.
snow is offline  
Thanks
1 User
Old 04/07/2013, 18:20   #7
 
elite*gold: 0
Join Date: Mar 2013
Posts: 11
Received Thanks: 0
PHP Code:
#include <iostream>
#include <windows.h>

using namespace std;
int a;
int main ()
{
DWORD *baseAddress = (DWORD*) 0xFF96AFA8// nicht sicher, ob man auch die Base Address des Programms braucht 
DWORD *offset1       = (DWORD *)(*baseAddress  0x14); // Adresse, die in baseAddress ist + 1. Offset
DWORD *content     = (DWORD *)(*offset1 0x50); // Adresse, die in offset1 ist + 2. Offset -> da drinnen ist der Content.

cout << *content << content << endl;
cin >> a;

return 
0;

Ich habe das mal kompiliert und erhalte nun einen neuen seltsamen Fehler.

"Unbehandelte Ausnahme bei 0x76f815de in test5.exe: 0xC0000005: Zugriffsverletzung beim Lesen an Position 0xff96afa8."
H4rtzer is offline  
Old 04/07/2013, 18:27   #8


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
Beschäftige dich nochmal mit der Sprache und lerne, wie Pointer funktionieren.
Kleiner Tipp nebenbei: Dein Programm und Solitair teilen sich nicht denselben Adressraum, du kannst Pointer nicht direkt dereferenzieren.
MrSm!th is offline  
Thanks
1 User
Old 04/07/2013, 18:36   #9
 
elite*gold: 0
Join Date: Mar 2013
Posts: 11
Received Thanks: 0
Quote:
Originally Posted by MrSm!th View Post
Beschäftige dich nochmal mit der Sprache und lerne, wie Pointer funktionieren.
Kleiner Tipp nebenbei: Dein Programm und Solitair teilen sich nicht denselben Adressraum, du kannst Pointer nicht direkt dereferenzieren.
Danke für den Tipp. Wie kann ich also in den anderen Adressraum "übergreifen"? Bei der Funktion:
PHP Code:
OpenProcess (PROCESS_ALL_ACCESS PROCESS_VM_READ PROCESS_VM_WRITEfalseProcessID); 
muss ich die ja die Rechte in den Parametern übergeben. Muss ich bei diesem Problem ähnlich heran gehen?
H4rtzer is offline  
Old 04/07/2013, 18:38   #10


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
ReadProcessMemory
MrSm!th is offline  
Old 04/07/2013, 18:58   #11

 
snow's Avatar
 
elite*gold: 724
Join Date: Mar 2011
Posts: 10,479
Received Thanks: 3,318
"du musst natürlich immer den Weg über ReadProcessMemory() gehen"

und lass das mit "4" bei der size & nutze sizeof(type), sonst hast du ein Problem, wenn das Programm auf einem System läuft, das eine andere Größe für DWORD hat.
snow is offline  
Old 04/07/2013, 19:19   #12
 
elite*gold: 5
Join Date: Sep 2006
Posts: 385
Received Thanks: 218
Quote:
Originally Posted by snow911 View Post
"du musst natürlich immer den Weg über ReadProcessMemory() gehen"

und lass das mit "4" bei der size & nutze sizeof(type), sonst hast du ein Problem, wenn das Programm auf einem System läuft, das eine andere Größe für DWORD hat.
Da er hier mit Windows arbeitet, ist das egal ob er "4" nimmt oder "sizeof(DWORD)", da DWORD auf allen Windows Systemen eine größe von 4 Bytes hat. Und sobald er auf einen Unixoiden wechselt kann er ReadProcessMemory eh nicht mehr verwenden.
Problematisch ist eher, dass er DWORD zum Auslesen von Pointern benutzt. Das geht nur so lange gut, wie er sich in einer 32 bit Umgebung befindet. Erstellt er sein Programm für x64, sind die Pointer plätzlich 8 Bytes groß und er ließt dann Müll aus, weshalb er lieber DWORD_PTR nehmen sollte. Dann greift auch wieder das Argument, dass er nicht sizeof(4) sondern sizeof(DWORD_PTR) machen soll, weil das hier einen wirklichen Unterschied macht.

Siehe:

Nightblizard is offline  
Old 04/08/2013, 18:06   #13
 
elite*gold: 0
Join Date: Mar 2013
Posts: 11
Received Thanks: 0
In meinem BasePointer (solitaire.exe+BAFA8) steht solitaire.exe. Wie komme ich an die Adresse für solitaire.exe! Ich dachte gehört zu haben, dass solitaire.exe dem Prozesshandle entspricht. Ist das richtig?
H4rtzer is offline  
Old 04/08/2013, 18:17   #14
 
Master674b's Avatar
 
elite*gold: 0
Join Date: Dec 2012
Posts: 255
Received Thanks: 110
Quote:
Originally Posted by H4rtzer View Post
In meinem BasePointer (solitaire.exe+BAFA8) steht solitaire.exe. Wie komme ich an die Adresse für solitaire.exe! Ich dachte gehört zu haben, dass solitaire.exe dem Prozesshandle entspricht. Ist das richtig?
Nö ists nicht. Schau dir mal an.
Master674b is offline  
Old 04/08/2013, 18:22   #15
 
elite*gold: 0
Join Date: Mar 2013
Posts: 11
Received Thanks: 0
Das hilft mir leider nicht weiter, aber trotzdem Danke!
H4rtzer is offline  
Reply


Similar Threads Similar Threads
Multilevel Pointer hacken per Array [Fehlersuche]
05/06/2012 - AutoIt - 12 Replies
Hi Den Wert folgendes Level4-Pointers möchte ich mit einem Autoit-Script hacken: Base: 1073EF88 Offset1: 1C Offset2: 10 Offset3: 4 Offset4: DE4 Dazu habe ich dieses Tutorial gefunden, was beschreibt, wie man den Pointer per Array verwendet:
[C++] Write to a Pointer
03/18/2012 - C/C++ - 26 Replies
Nabend liebe Epvp-Community, ich schreibe ja wie manche wissen einen Bot für Eden Eternal. Leider hat sich die Movement-Funktion seit dem Update geändert und lässt das direkte aufrufen nicht zu wegen dem Stack. Nun will ich den Wert auf die Addresse schreiben und dann in die Read->Check->Move-Function springen. ich habe mir eine Funktion erstellt um einen Pointer auszulesen DWORD ReadPointer(DWORD offsets) { DWORD Result = 0;
CE 13* multilevel pointer with some skills...
05/13/2011 - Kal Online - 2 Replies
Hi guys, i got a little problem, mby u can help me out. I used CE and created most of the pointer that able to ( speed, ug, F1 , charcount , setframe (well yeah r11 standart disabled it but anyway ) , Health(useless) , Mana(useless) , Otp(useless), Eva(useless) , Berserk , EmergencyEscape , Commander calls , Commander elastic shield. Skills are 13x multilevel pointers and also dont know how to get the pointer of skills that u attack monsters... (not like zerk,shields,EE) like...
Multilevel Pointer
12/03/2010 - General Coding - 3 Replies
Heyho ePvpers, since i'm learning c++, i developed an application with multilevel pointers and a tricky algo. i wanted to know if somebody could find the static pointer. btw its a console app Todo: Try to find the static pointer of the number and post your solution if you got it. VirusTotal Scan
Please write Pointer
08/27/2010 - 4Story - 9 Replies
Please write the table cheat in Cheat Engine for here this 4story Welcome to 4story Online



All times are GMT +1. The time now is 13:51.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.