Interesowałem się tym tematem jakiś czasu temu. Z tej mojej zajawki wyniknął aimbot oraz triggerbot do gry Assault Cube - Czyli chyba najłatwiejszej do zcheatowania gry. Wszystko skupia się na pobieraniu wartości z ramu (Przynajmniej w przypadku assault cube).
Tutaj masz offsety i base addressy do tejże właśnie gry: https://www.unknowncheats.me/forum/other-fps-games/140127-assault-cube-some-offsets.html
Ale na czym to polega? Otóż, każda komórka w pamięci (Bajt) ma własny adres. Adres ten zapisywany jest w systemie szesnastkowym.
Base Address: To taki adres, który zawsze jest taki sam (Normalnie się zmienia po zrestartowaniu aplikacji). W przypadku Assault Cube jest to: 0x400000;
Offset: Wartość którą należy dodać do base addressu żeby dostać się do danej zmiennej zapisanej w ramie.
Żeby dostać się do klasy Player (Czyli klasy która ma w sobie wszystkie parametry gracza jak pozycja, amunicja, życie itp.) należy do Base Addressu dodać: 0x10F4F4. (Można powiedzieć że BasePlayerAddress = BaseAddress + OffsetPlayer. )
Potem to już czysta matematyka. Znając pozycje obu graczy (W Assault Cube w klasie Player jest pozycja głowy) wystarczy funkcją atan2() obliczyć kąt pod jakim ma patrzeć gracz, żeby celować na głowę przeciwnika.
Znając tą wartość zmieniamy ją w ramie (Albo symulujemy ruch myszki).
Dwie funkcje do odczytu i zapisu w ramie:
ReadProcessMemory oraz WriteProcessMemory
Do tablicy przechowującej graczy też jest offset podany na tej stronie. :)