Code:
#include <windows.h>
#include <iostream>
#include <stdio.h>
int read_memory(unsigned adress, HANDLE handle);
using namespace std;
int main()
{
HWND hwnd = FindWindow(0, "Warhammer: Age of Reckoning, Version 1.3.6, Copyright 2001-2010 Electronic Arts, Inc."); // Das Fenster wird gesucht...
DWORD proc_id;
GetWindowThreadProcessId(hwnd, &proc_id); //... und die Proc_ID wird ermittelt.
DWORD wtr=0;
int buffer_current = 0;
int buffer_maximum = 0;
int buffer_ap_maximum = 0;
int buffer_ap_current = 0;
int speedhack_littlefoot = 1075353216; // Eine Auswahl an Werten, die gesetzt werden können.
int speedhack = 1080353216;
int speedhack_ultra = 1100353216;
int speed_normal = 1065353216;
int ninja_on = 3322716160;
int ninja_off = 1065353216;
unsigned adress_base_player = 0x00FE1684; // Die Basis-Adresse für die Spielerdaten. Wird anhand der Adresse des Lebens zurückberechnet.
unsigned adress_base_player_offset = 0;
HANDLE handle = OpenProcess(PROCESS_ALL_ACCESS, false, proc_id);
adress_base_player_offset = read_memory(adress_base_player, handle); // Wir lesen das Basis-Offset für die Spieler-Daten aus.
unsigned offset_superjump = 0xaC; // Die Offsets, mit denen auf bestimmte Daten zugegriffen werden kann.
unsigned offset_current = 0x18C;
unsigned offset_maximum = 0x188;
unsigned offset_ap_maximum = 0x198;
unsigned offset_ap_current = 0x19C;
unsigned offset_speed = 0x9c;
unsigned ninja_test = read_memory(0x00FC5F60, handle); ninja_test = ninja_test + 0x5C;
unsigned speed_fix = adress_base_player_offset+offset_speed;
while(true) {
system("cls");
buffer_maximum = read_memory(adress_base_player_offset+offset_maximum, handle); // Das Leben und die AP's werden aktualisiert.
buffer_current = read_memory(adress_base_player_offset+offset_current, handle);
buffer_ap_maximum = read_memory(adress_base_player_offset+offset_ap_maximum, handle);
buffer_ap_current = read_memory(adress_base_player_offset+offset_ap_current, handle);
printf(" +++++++++++++++++++++++++++++++++++++++++++++++++++++\n"); // Kleiner Header + Anzeige.
printf(" + Warhammer Online - Memory Manipulation +\n");
printf(" +++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
printf(" + Base-Adress: 0x%X +\n", adress_base_player);
printf(" +++++++++++++++++++++++++++++++++++++++++++++++++++++\n\n ");
printf(" Players Life: %i / %i \n", buffer_maximum, buffer_current);
printf(" Players AP's: %i / %i \n\n", buffer_ap_maximum, buffer_ap_current);
printf("0. Speedhack - Ultra\n1. Speedhack - Super\n2. Speedhack - Littlefoot\n3. Disable Speedhacks\n4. No Clipping!\n5. Clipping!\n6. Exit\n");
printf("Choice: "); // Das Menü...
int option = 0;
cin >> option;
if(option == 0) { WriteProcessMemory(handle, (LPVOID) speed_fix, &speedhack_ultra, sizeof(speedhack_ultra), NULL); } // Hier schreiben wir die Werte in den Speicher.
if(option == 1) { WriteProcessMemory(handle, (LPVOID) speed_fix, &speedhack, sizeof(speedhack), NULL); }
if(option == 2) { WriteProcessMemory(handle, (LPVOID) speed_fix, &speedhack_littlefoot, sizeof(speedhack_littlefoot), NULL); }
if(option == 3) { WriteProcessMemory(handle, (LPVOID) speed_fix, &speed_normal, sizeof(speed_normal), NULL); }
if(option == 6) { exit(0); }
if(option == 4) { WriteProcessMemory(handle, (LPVOID) ninja_test, &ninja_on, sizeof(ninja_on), NULL); }
if(option == 5) { WriteProcessMemory(handle, (LPVOID) ninja_test, &ninja_off, sizeof(ninja_off), NULL); }
option = NULL;
}
CloseHandle(handle);
return 0;
}
int read_memory(unsigned adress, HANDLE handle) {
int buffer = 0;
ReadProcessMemory(handle, (LPCVOID)adress, &buffer, sizeof(buffer), NULL);
return buffer;
}