3-实现游戏人物属性显示

实现游戏人物属性显示

1.OpenProcess函数

获取某个进程的权限

HANDLE
WINAPI
OpenProcess(
_In_ DWORD dwDesiredAccess, //读取权限
_In_ BOOL bInheritHandle, //是否继承
_In_ DWORD dwProcessId //想要读取的PID
);

//example
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,Pid);

2.ReadProcessMemory函数

获取某个进程的内存

返回值:

TRUE 成功

FALSE 失败

BOOL
WINAPI
ReadProcessMemory(
_In_ HANDLE hProcess, //要读取的句柄
_In_ LPCVOID lpBaseAddress, //要读取的地址
_Out_writes_bytes_to_(nSize,*lpNumberOfBytesRead) LPVOID lpBuffer, //指向接收数据的缓冲区
_In_ SIZE_T nSize, //读取大小
_Out_opt_ SIZE_T* lpNumberOfBytesRead //接收到的数据大小(不需要就置NULL)
);

3.实际应用

#include<iostream>
#include<Windows.h>
using namespace std;
int main()
{
DWORD Pid;
SIZE_T readByte;
linput:
cout << "Please input the game ID:";
cin >> Pid;
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,Pid);
long hp{};
if (hProcess == NULL)
{
cout << "打开失败";
goto linput;
}
BOOL bRet = ReadProcessMemory(hProcess, (LPCVOID)0x4CEF18, (LPVOID)&hp, sizeof(hp), &readByte);
if (bRet)
{
cout << "HP:" << hp << endl;
}
else
{
cout << "游戏内存读取失败" << endl;
}

}