WinAPI의 ReadProcessMemory()
을 사용하여 게임에서 "숨겨진"정보를 읽습니다.".exe"+ 오프셋에서 메모리를 읽으시겠습니까?
나는 치트 엔진을 사용하여 정적 포인터를 찾았지만 그것들을 읽는 법을 모르겠습니다. 내가 ReadProcessMemory()
읽을 수있는 주소로 "mygame.exe"+1C50
변환 어떻게 내가 WinAPI를 정말 새로운 해요 "mygame.exe"+1C50
: 치트 엔진은 나에게 이런 일에 대한 포인터를 제공?
편집 : 문제를 단순화하려고 시도했지만 처음부터 전체 코드를 입력해야했습니다. 정적 주소와 다중 레벨 포인터를 사용하고 있지만 기본 주소 나 w/e를 얻는 데 여전히 어려움이 있습니다.
이 여기에 전체 코드와 a picture of my cheat engine address입니다 :
#include <iostream>
#include <windows.h>
#include <tlhelp32.h>
using namespace std;
HANDLE GetProcessHandle(const char *procName);
int main()
{
const char *procName = "prism3d.exe";
HANDLE hProc = GetProcessHandle(procName);
if (hProc) {
/* This works if I use the dynamic address (f.e. 0x02C2C4DC),
but it changes every time I restart the game.
I need to use the static address (prism3d.exe+A1C) to get
the dynamic address for my "nuke".
*/
float nuke;
ReadProcessMemory(hProc, (void*)0x02C2C4DC, &nuke, 4, 0);
cout << nuke;
}
CloseHandle(hProc);
return 0;
}
HANDLE GetProcessHandle(const char *procName)
{
HANDLE hProc = NULL;
PROCESSENTRY32 pe32;
pe32.dwSize = sizeof(PROCESSENTRY32);
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (Process32First(hSnapshot, &pe32)) {
do {
if (!strcmp(pe32.szExeFile, procName)) {
hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID);
break;
}
} while (Process32Next(hSnapshot, &pe32));
}
CloseHandle(hSnapshot);
return hProc;
}
편집 2 : 여기 내 핵의 값을 읽는 시도하는 방법은, 그러나, 임의의 숫자 나는 게임을 다시 시작 다른 모든 시간을 나에게 준다 (때때로) ... 등, 때로는 0
, 324324324
입니다 :
if (hProc) [
DWORD baseAddr = (DWORD)GetModuleHandle(procName) + 0xA1C50; // also tried this with GetModuleHandle(NULL)
DWORD mainAddr;
ReadProcessMemory(hProc, (void*)(baseAddr + 0x111C), &mainAddr, 4, 0);
// Nuke
float nuke;
DWORD nukeAddr;
ReadProcessMemory(hProc, (void*)(mainAddr + 0x48), &nukeAddr, 4, 0);
ReadProcessMemory(hProc, (void*)nukeAddr, &nuke, 4, 0);
cout << nuke;
}
"game.dll"의 기본 주소를 찾은 다음 1C50을 추가해야합니다. –