Life: 200Code:#include "stdafx.h" #include <windows.h> #include <iostream> #include <stdio.h> #include <TlHelp32.h> __int64 GetModuleBaseAddress(LPCWSTR szProcessName, LPCWSTR szModuleName) { HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); PROCESSENTRY32 pe32; if (hSnap == INVALID_HANDLE_VALUE) { return 0; } pe32.dwSize = sizeof(PROCESSENTRY32); if (Process32First(hSnap, &pe32) == 0) { CloseHandle(hSnap); return 0; } do { if (lstrcmp(pe32.szExeFile, szProcessName) == 0) { int PID; PID = pe32.th32ProcessID; HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, PID); MODULEENTRY32 xModule; if (hSnap == INVALID_HANDLE_VALUE) { return 0; } xModule.dwSize = sizeof(MODULEENTRY32); if (Module32First(hSnap, &xModule) == 0) { CloseHandle(hSnap); return 0; } do { if (lstrcmp(xModule.szModule, szModuleName) == 0) { CloseHandle(hSnap); return (__int64)xModule.modBaseAddr; } } while (Module32Next(hSnap, &xModule)); CloseHandle(hSnap); return 0; } } while (Process32Next(hSnap, &pe32)); CloseHandle(hSnap); return 0; } int main() { wchar_t* wCharWindowName = L"Grand Theft Auto V"; wchar_t* GameTitle = L"GTA5.exe"; HWND WindowHandle = FindWindow(NULL, wCharWindowName); __int64 baseaddr = GetModuleBaseAddress(GameTitle, GameTitle); DWORD PlayerInfo = 0x1B29400; DWORD PlayerOffset = 0x280; float value = 0; DWORD pid; GetWindowThreadProcessId(WindowHandle, &pid); HANDLE phandle = OpenProcess(PROCESS_ALL_ACCESS, 0, pid); while (1) { float Life = 0; __int64 pLifeAddress = 0; ReadProcessMemory(phandle, (void*)(baseaddr + PlayerInfo), &pLifeAddress, sizeof(pLifeAddress), 0); ReadProcessMemory(phandle, (void*)(pLifeAddress + PlayerOffset), &Life, sizeof(Life), 0); std::cout << "Life: "<< Life << "\n"; Sleep(1000); } return 0; }
Life: 200
Life: 200
...