C++:
#include <Windows.h>
#include <TlHelp32.h>
#include <string>
#include <conio.h>
#include <iostream>
using namespace std;
DWORD FindProcessId(string processName);
DWORD GetBaseAddress(DWORD pid);
int main() {
HANDLE _hProc = NULL;
DWORD _pID = NULL;
_pID = FindProcessId("ac_client.exe");
cout << _pID << endl;
_hProc = OpenProcess(PROCESS_ALL_ACCESS, NULL, _pID);
DWORD baseAddress = GetBaseAddress(_pID);
cout << hex << baseAddress << endl;
DWORD HEALTH = baseAddress + 0x17E0A8 + 0xEC;
cout << HEALTH << endl;
int read;
ReadProcessMemory(_hProc, (PBYTE*)HEALTH, &read, sizeof(int), 0);
std::cout << read;
CloseHandle(_hProc);
return 0;
}
DWORD FindProcessId(std::string processName)
{
PROCESSENTRY32 peInfo;
peInfo.dwSize = sizeof(peInfo);
HANDLE _hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
if (_hSnap== INVALID_HANDLE_VALUE)
return 0;
Process32First(_hSnap, &peInfo);
if (!processName.compare(peInfo.szExeFile))
{
CloseHandle(_hSnap);
return peInfo.th32ProcessID;
}
while (Process32Next(_hSnap, &peInfo))
{
if (!processName.compare(peInfo.szExeFile))
{
CloseHandle(_hSnap);
return peInfo.th32ProcessID;
}
}
CloseHandle(_hSnap);
return 0;
}
DWORD GetBaseAddress(DWORD pid) {
HANDLE hModule = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pid);
MODULEENTRY32 ModuleEntry;
ModuleEntry.dwSize = sizeof(ModuleEntry);
do {
if (!strcmp(ModuleEntry.szModule, "ac_client.exe"))
{
CloseHandle(hModule);
return (DWORD)ModuleEntry.hModule;
}
} while (Module32Next(hModule, &ModuleEntry));
return 0;
}
По логике базовый адрес процесса = 71C460, но функция в моем коде постоянно пишет что 0x400000. Что не так?