Also ich habe ein sehr gutes Tutoral gefunden womit man die Speicheraddressen mittels Cheat engine auslesen kann und dann ein Programm schreiben kann welches auf diese Adresse zugreift und das Value ändern kann das hat auch alles einwandfrei funktioniert hier mal der code :
// Gamehack.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
//
#include "stdafx.h"
#include <windows.h> // Hier sind die Funktionen die wir später noch brauchen
#include <iostream> // Sollte klar sein
using namespace std; // Sollte auch klar sein ...
int main() // Unsere Main Funktion...
{
HWND hwnd; // Unsere Variable die das Fensterhandle speichert.
hwnd = FindWindow(0,L"Solitär");
// Der Fenstertitel vom Solitärfenster ist "Solitär". Das erste Parameter ist der "ClassName" den wir aber getrost ignorieren können. Das zweite Parameter ist unser Fenstername. Das "L" steht für eine Typkonvertierung..
DWORD Id; // Die ID wird in einer Variable des Typ's DWORD gespeichert.
HANDLE ProcessHandle;
int value; // Der Wert den wir schreiben wollen.
unsigned adress = 0x000BB038; // Unsere Adresse
if(!hwnd) // Also das Fenster nicht vorhanden ist...
{
cout << "Solitär nicht gefunden!" << endl; // Gebe das aus
}
else // ansonsten...
{
cout << "Solitär gefunden!" << endl; // gebe das aus
cout << "Fensterhandle: " << hwnd << endl; // Wir können uns das Handle auch nochmal angucken ...
GetWindowThreadProcessId(hwnd,&Id); // Mit GetWindowThreadProcessId kann man die ID herausfinden. Das erste Parameter ist unser Fensterhandle. Das zweite gibt an, wo die ID gespeichert werden soll.
cout << Id << endl;
ProcessHandle = OpenProcess(PROCESS_VM_WRITE |PROCESS_VM_OPERATION ,false,Id);
cout << "ProcessHandle: " << ProcessHandle << endl;
cout << "How much points to add? "; // Wieviel Punkte sollen geschrieben werden ???
cin >> value; // Den Wert übernehmen
fflush(stdin);
WriteProcessMemory(ProcessHandle,(LPVOID)adress,&v alue,sizeof(int),NULL); // Den Wert schreiben !
cout << "Wert geschrieben" << endl;
}
cin.get(); //Damit sich unser Programm nicht sofort schließt...
}
So mein Problem ist nun das sich diese Adresse ja natürlich bei jedem neustart von Solitär ändert und ich somit erstmal den BasePointer + die Offsets mit Cheat Engine suchen muss was auch funktioniert.
Allerdings weiß ich nun nicht genau wie ich die Offsets in meinen Code einbringen kann.
Ich habe i-wo gelsen das i-wie mit ReadProcessmemory dann die Base Addresse und die Offsets zusammenaddieren muss ,die Endaddresse dann in einer Variablen speichern muss und mit dieser Variablen dann z.b. auch das Value verändern kann.
Hätte da jmd ein Code beispiel ( am besten natürlich eins zu dem Code den ich gepostet habe) wie ich das ganze nun lösen kann?