christ/main.cpp
2025-03-24 18:56:00 +03:00

73 lines
No EOL
1.9 KiB
C++

#include <iostream>
#include <Windows.h>
#include <Psapi.h>
#include <vector>
#include <string>
#include <tchar.h>
#include <TlHelp32.h>
using namespace std;
// https://stackoverflow.com/questions/26572459/c-get-module-base-address-for-64bit-application
DWORD_PTR GetProcessBaseAddress(DWORD processID)
{
DWORD_PTR baseAddress = 0;
HANDLE processHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, processID);
HMODULE* moduleArray;
LPBYTE moduleArrayBytes;
DWORD bytesRequired;
if (processHandle)
{
if (EnumProcessModules(processHandle, NULL, 0, &bytesRequired))
{
if (bytesRequired)
{
moduleArrayBytes = (LPBYTE)LocalAlloc(LPTR, bytesRequired);
if (moduleArrayBytes)
{
unsigned int moduleCount;
moduleCount = bytesRequired / sizeof(HMODULE);
moduleArray = (HMODULE*)moduleArrayBytes;
if (EnumProcessModules(processHandle, moduleArray, bytesRequired, &bytesRequired))
{
baseAddress = (DWORD_PTR)moduleArray[0];
}
LocalFree(moduleArrayBytes);
}
}
}
CloseHandle(processHandle);
}
return baseAddress;
}
int main() {
DWORD pid = 0;
HWND hwnd = FindWindowA(NULL, "DevilutionX");
GetWindowThreadProcessId(hwnd, &pid);
HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, NULL, pid);
if (hProc == NULL) {
cout << "kys" << endl;
return 1;
}
uintptr_t base = (uintptr_t)GetProcessBaseAddress(pid);
uintptr_t plrA = base + 0x0058E470;
uintptr_t plr;
ReadProcessMemory(hProc, (LPCVOID)plrA, &plr, sizeof(plr), 0);
uintptr_t goldA = plr + 0x3FE4;
int gold = 0;
ReadProcessMemory(hProc, (LPCVOID)goldA, &gold, sizeof(gold), 0);
cout << gold;
return 0;
}