ReadProcessMemory

04/29/2011 22:15 Evilkingg#1
Habe ein gutes beispiel für pointer und offsets um internet gefunden doch leider klappt es nur bei dem programm
was auch im video war ich wollte es jetzt mal bei 4story ausprobieren nur leider geht es nicht ( private server )

hier mal das programm
PHP Code:
#include <iostream>
#include <windows.h>
 
using namespace std;
 
//---------------------------------
//Offsets
#define BASE          0x07056A8
#define OFF1       0x42B
#define OFF2           0xAC0
//---------------------------------
 
 
//Andere Sachen die wir noch brauchen
HWND hwnd;
HANDLE handle;
DWORD ID;
LPCTSTR lpWindowName =  L"4Story_GSP";
 
 
bool SetDebugPrivileges();
 
int main(){
 
        
int puffer 0;
        
DWORD rw=0;
 
 
        
//--------- Injection ------------
 
        // Suche Prozess (Runes of Magic)
        
while(!hwnd){
                
cout << "Suche nach dem Prozess und injecte..." << endl;
                
hwnd FindWindow(NULLlpWindowName);
                if(!
hwnd)
                        
printf("\r");
                
Sleep(100);
        }
 
 
 
        
// Prozess-ID besorgen
        
GetWindowThreadProcessId(hwnd, &ID);
        
//Rechte zum auslesen besorgen
        
SetDebugPrivileges();
        
// Prozess ?ffnen mit allen Rechten
        
handle OpenProcess(PROCESS_ALL_ACCESSfalseID);
 
        
//---------------------------------
 
        /*
        An diesem Punkt beginnen wir nun mit dem eigentlichem auslesen aus dem Hauptspeicher
        Ich demonstriere das jetzt mal an der jeweiligen aktuellen HP Zahl
        */
 
        // Struct erstellen
        
int hp;

 
        
int hp_puff 0;
        
int mana_puff 0;
 
        
DWORD baseptr;
        
DWORD pptr;
 
        while(
hwnd)
        {
                
//Hier haben wir nun eine Schleife, die jede Sekunde die HP Zahl ?berpr?ft
                
                // Adresse auslesen
                
ReadProcessMemory(handle, (void*)BASE, &baseptrsizeof(baseptr), &rw);
                
// Player Addy auslesen
                
ReadProcessMemory(handle, (void*)(baseptr+OFF1), &pptrsizeof(pptr), &rw);
                
// Aktuelle und max. HP auslesen auslesen
                
ReadProcessMemory(handle, (void*)(pptr+OFF2), &hpsizeof(hp), &rw);
                
                
// HP ausgeben
                
if(hp != hp_puff)
                {
                        
cout << "Punkte: " << hp <<  endl;
                        
hp_puff hp;
                }
 
                
Sleep(1000);
 
        }
        
        
// Anhalten f?r ?berpr?fung
        
system("pause");
 
        
CloseHandle(handle);
        return 
0;
}
 
bool SetDebugPrivileges()
{
        
HANDLE hToken;
        
TOKEN_PRIVILEGES tokenPriv;
        
tokenPriv.PrivilegeCount 1;
 
        if(!
OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken))
                return 
false;
 
        if(!
LookupPrivilegeValue(NULLSE_DEBUG_NAME, &tokenPriv.Privileges[0].Luid))
                return 
false;
        
tokenPriv.Privileges[0].Attributes SE_PRIVILEGE_ENABLED;
 
        if(!
AdjustTokenPrivileges(hTokenfalse, &tokenPrivsizeof(TOKEN_PRIVILEGES), NULLNULL))
                return 
false;
        return 
true;

das problem ist , das er zwar injectet aber immer ne -8xxxxx zahl rauskomm anstat die 16230 wie in cheat engine :

[Only registered and activated users can see links. Click Here To Register...]
04/29/2011 23:03 schnewin#2
Quote:
Originally Posted by Evilkingg View Post
Habe ein gutes beispiel für pointer und offsets um internet gefunden doch leider klappt es nur bei dem programm
was auch im video war ich wollte es jetzt mal bei 4story ausprobieren nur leider geht es nicht ( private server )

hier mal das programm
PHP Code:
#include <iostream>
#include <windows.h>
 
using namespace std;
 
//---------------------------------
//Offsets
#define BASE          0x07056A8
#define OFF1       0x42B
#define OFF2           0xAC0
//---------------------------------
 
 
//Andere Sachen die wir noch brauchen
HWND hwnd;
HANDLE handle;
DWORD ID;
LPCTSTR lpWindowName =  L"4Story_GSP";
 
 
bool SetDebugPrivileges();
 
int main(){
 
        
int puffer 0;
        
DWORD rw=0;
 
 
        
//--------- Injection ------------
 
        // Suche Prozess (Runes of Magic)
        
while(!hwnd){
                
cout << "Suche nach dem Prozess und injecte..." << endl;
                
hwnd FindWindow(NULLlpWindowName);
                if(!
hwnd)
                        
printf("\r");
                
Sleep(100);
        }
 
 
 
        
// Prozess-ID besorgen
        
GetWindowThreadProcessId(hwnd, &ID);
        
//Rechte zum auslesen besorgen
        
SetDebugPrivileges();
        
// Prozess ?ffnen mit allen Rechten
        
handle OpenProcess(PROCESS_ALL_ACCESSfalseID);
 
        
//---------------------------------
 
        /*
        An diesem Punkt beginnen wir nun mit dem eigentlichem auslesen aus dem Hauptspeicher
        Ich demonstriere das jetzt mal an der jeweiligen aktuellen HP Zahl
        */
 
        // Struct erstellen
        
int hp;

 
        
int hp_puff 0;
        
int mana_puff 0;
 
        
DWORD baseptr;
        
DWORD pptr;
 
        while(
hwnd)
        {
                
//Hier haben wir nun eine Schleife, die jede Sekunde die HP Zahl ?berpr?ft
                
                // Adresse auslesen
                
ReadProcessMemory(handle, (void*)BASE, &baseptrsizeof(baseptr), &rw);
                
// Player Addy auslesen
                
ReadProcessMemory(handle, (void*)(baseptr+OFF1), &pptrsizeof(pptr), &rw);
                
// Aktuelle und max. HP auslesen auslesen
                
ReadProcessMemory(handle, (void*)(pptr+OFF2), &hpsizeof(hp), &rw);
                
                
// HP ausgeben
                
if(hp != hp_puff)
                {
                        
cout << "Punkte: " << hp <<  endl;
                        
hp_puff hp;
                }
 
                
Sleep(1000);
 
        }
        
        
// Anhalten f?r ?berpr?fung
        
system("pause");
 
        
CloseHandle(handle);
        return 
0;
}
 
bool SetDebugPrivileges()
{
        
HANDLE hToken;
        
TOKEN_PRIVILEGES tokenPriv;
        
tokenPriv.PrivilegeCount 1;
 
        if(!
OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken))
                return 
false;
 
        if(!
LookupPrivilegeValue(NULLSE_DEBUG_NAME, &tokenPriv.Privileges[0].Luid))
                return 
false;
        
tokenPriv.Privileges[0].Attributes SE_PRIVILEGE_ENABLED;
 
        if(!
AdjustTokenPrivileges(hTokenfalse, &tokenPrivsizeof(TOKEN_PRIVILEGES), NULLNULL))
                return 
false;
        return 
true;

das problem ist , das er zwar injectet aber immer ne -8xxxxx zahl rauskomm anstat die 16230 wie in cheat engine :

[Only registered and activated users can see links. Click Here To Register...]
Falsche Offsets.
Auf deinem Bild ist Base = 0x7056A8, Offset1 = 0xAC0 und Offset2 = 0x9C6.

Aber lerne die Sprache doch erst mal anständig, bevor du dich mit Hacks beschaffst, weil durch C&P bringt dir es nicht viel.
MFG
04/29/2011 23:22 Evilkingg#3
hmm danke ersmal für die antworte geh aber immer noch nicht :D

hast ja recht das ich das ersmal lernen sollten ur ich wei nich wo ich anfangen soll ich guck mir einfach mal ein paar sachen an und versuch dann damit zureck zukommen so das ich es zumlaufne kriege wenn ich 1 sache fertig hab mach ich die nächste :D