-
Автор темы
- #1
Не могу читать адресс в памяти данной игры, как я думаю это в связи с тем что не могу найти модуль и не понимаю где ошибка, буду благодарен если вы мне с этим поможете :)
C++:
#include <Windows.h>
#include <TlHelp32.h>
#include <iostream>
#include <vector>
#include <string>
#include "inc.h"
HANDLE hProc = NULL;
using namespace std;
DWORD attachProc(const char* procName)
{
DWORD procId = 0;
HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hSnap != INVALID_HANDLE_VALUE)
{
PROCESSENTRY32 pEntry;
pEntry.dwSize = sizeof(pEntry);
if (Process32First(hSnap, &pEntry))
{
do
{
if (!strcmp(pEntry.szExeFile, procName))
{
procId = pEntry.th32ProcessID;
break;
}
} while (Process32Next(hSnap, &pEntry));
}
}
CloseHandle(hSnap);
return procId;
}
DWORD GetModuleBaseAddress(DWORD procId, const char* lpszModuleName) {
DWORD modbaseaddr = 0;
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE | TH32CS_SNAPMODULE32, procId); // make snapshot of all modules within process
MODULEENTRY32 ModuleEntry32;
ModuleEntry32.dwSize = sizeof(MODULEENTRY32);
if (Module32First(hSnapshot, &ModuleEntry32))
{
do {
if (!strcmp(ModuleEntry32.szModule, lpszModuleName))
{
modbaseaddr = (DWORD)ModuleEntry32.modBaseAddr;
break;
}
} while (Module32Next(hSnapshot, &ModuleEntry32));
}
CloseHandle(hSnapshot);
return modbaseaddr;
}
uintptr_t ADDY(HANDLE hProc, uintptr_t ptr, vector <unsigned int > offsets)
{
uintptr_t addr = ptr;
for (unsigned int i = 0; i < offsets.size(); ++i)
{
ReadProcessMemory(hProc, (LPVOID*)addr, &addr, sizeof(addr), 0);
addr += offsets[i];
}
return addr;
}
int main()
{
DWORD pId = attachProc("League of Legends.exe");
cout << "PID: " << dec << pId << endl; //right pid
uintptr_t mBase = GetModuleBaseAddress(pId, "League of Legends.exe");
hProc = OpenProcess(PROCESS_ALL_ACCESS, NULL, pId);
cout << "mBase: " << hex << mBase << endl;
uintptr_t dpb = mBase + 0x30CD6E8;
cout << "DPB " << hex << dpb << endl;
vector <unsigned int> hpOffsets = { 0x24,0x0,0x110 };
DWORD HP = 0x3D233868;
int buffer=0;
ReadProcessMemory(hProc, (BYTE*)HP, &buffer, sizeof(buffer), 0);
cout << "read process buf " << dec << buffer << endl;
uintptr_t hpAddr = ADDY(hProc, dpb, hpOffsets);
cout << "hpaddr: " << hex << hpAddr << endl;
float hpval = 0;
ReadProcessMemory(hProc, (BYTE*)hpAddr, &hpval, sizeof(hpval), nullptr);
cout << "LOL Current hp: " << dec << hpval << endl;
}