Hiho,
brauche etwas Hilfe bei meinem Problem. Habe versuch den Basepointer von Solitär herauszufinden und bin dabei leider gescheitert.
Ohne Pointer, sprich dynamisch, kann ich mit diesem Code prima den Punktestand verändern. Sobald ich jedoch dem vermeintlichen Basepointer die Offsets hinzufüge, hörts dann auf.
Alles anzeigen
Auf dem Screenshot unten kann man sehen, wie ich auf die Punktestand-Adresse komme. Soweit klappts auch. Nur wie ich das solitaire.exe+BAFA8 in Programmiersprache umsetze, hab ich noch nicht so ganz geschnallt.. irgendwer eine Erklärung?

mfg
brauche etwas Hilfe bei meinem Problem. Habe versuch den Basepointer von Solitär herauszufinden und bin dabei leider gescheitert.
Ohne Pointer, sprich dynamisch, kann ich mit diesem Code prima den Punktestand verändern. Sobald ich jedoch dem vermeintlichen Basepointer die Offsets hinzufüge, hörts dann auf.
C-Quellcode
- #include <iostream>
- #include <Windows.h>
- #define DEBUG
- int main() {
- HWND solitaire;
- DWORD basepointer, id, offset[2], score, value;
- HANDLE processHandle;
- basepointer = 0x000BAFA8;
- offset[1] = 0x50;
- offset[2] = 0x14;
- while (1) {
- solitaire = FindWindow(0, L"Solitär");
- if (solitaire) {
- std::cout << "Ein aktiver Solitaer Prozess konnte gefunden werden!" << std::endl;
- GetWindowThreadProcessId(solitaire, &id);
- std::cout << "Process ID: " << id << std::endl;
- processHandle = OpenProcess(PROCESS_VM_WRITE | PROCESS_VM_OPERATION | PROCESS_VM_READ, false, id);
- ReadProcessMemory(processHandle, (LPVOID)basepointer, &value, sizeof(int), NULL);
- #if defined(DEBUG)
- std::cout << value << std::endl;
- #endif
- value += offset[0];
- #if defined(DEBUG)
- std::cout << value << std::endl;
- #endif
- ReadProcessMemory(processHandle, (LPVOID)value, &value, sizeof(int), NULL);
- #if defined(DEBUG)
- std::cout << value << std::endl;
- #endif
- value += offset[1];
- #if defined(DEBUG)
- std::cout << value << std::endl;
- #endif
- ReadProcessMemory(processHandle, (LPVOID)value, &value, sizeof(int), NULL);
- std::cout << "Aktueller Punktestand: " << value << std::endl;
- std::cout << "Neuer Punktestand: ";
- std::cin >> score;
- WriteProcessMemory(processHandle, (LPVOID)value, &score, sizeof(int), NULL);
- std::cout << "Der Punktestand wurde veraendert." << std::endl << std::endl << "--------------------------" << std::endl << std::endl;
- std::cin.get();
- } else {
- std::cout << "Es konnte kein Solitaer Prozess gefunden werden." << std::endl
- << "Druecke Enter um es erneut zu versuchen." << std::endl;
- std::cin.get();
- }
- }
- }
Auf dem Screenshot unten kann man sehen, wie ich auf die Punktestand-Adresse komme. Soweit klappts auch. Nur wie ich das solitaire.exe+BAFA8 in Programmiersprache umsetze, hab ich noch nicht so ganz geschnallt.. irgendwer eine Erklärung?

mfg