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
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...]
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(NULL, lpWindowName);
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_ACCESS, false, ID);
//---------------------------------
/*
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, &baseptr, sizeof(baseptr), &rw);
// Player Addy auslesen
ReadProcessMemory(handle, (void*)(baseptr+OFF1), &pptr, sizeof(pptr), &rw);
// Aktuelle und max. HP auslesen auslesen
ReadProcessMemory(handle, (void*)(pptr+OFF2), &hp, sizeof(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(NULL, SE_DEBUG_NAME, &tokenPriv.Privileges[0].Luid))
return false;
tokenPriv.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
if(!AdjustTokenPrivileges(hToken, false, &tokenPriv, sizeof(TOKEN_PRIVILEGES), NULL, NULL))
return false;
return true;
}
[Only registered and activated users can see links. Click Here To Register...]