学习目标:
认识进程句柄HANDLE
了解进程权限
FindWindowA
OpenProcess
GetWindowThreadProcessId //返回线程TID和进程PID
ReadProcessMemory //读取指定进程的内存数据
封接读内存接口函数 int R4(void* 地址)
通过接口函数读取基址偏移公式里的数据
[[PlantsVsZombie.exe+2A9EC0]+768]+5560
[[6A9EC0]+768]+5560
#include <iostream>
#include<Windows.h>
//unsigned
int R4(UINT_PTR 内存地址)
{
HWND 窗口句柄 = FindWindowA("MainWindow", "植物大战僵尸中文版");
DWORD pid = 0, tid = 0;
tid = GetWindowThreadProcessId(窗口句柄, &pid); // a&b
HANDLE 进程句柄 = OpenProcess(PROCESS_ALL_ACCESS, 0, pid);//HWND
unsigned int 返回值 = 0;
ReadProcessMemory(进程句柄, (LPCVOID)内存地址/*要读取的地址*/, &返回值/*存放数据的地址*/, 4, 0);
return 返回值;
}
int main()
{
//[[lantsVsZombies.exe+2A9EC0]+768]+5560
// [[[6A9EC0]+768]+5560]
int 阳光值=R4(R4(R4(0x6A9EC0) + 0x768) + 0x5560);
printf("阳光值=%d 行号=%d\r\n", 阳光值, __LINE__);// __FILE__ 表示所有源文件
// [[[6A9EC0]+768]+5560]+111]+222]+333]+AAA]+BBB
// int 阳光值=R4(R4(R4(R4(R4(R4(R4(R4(0x6A9EC0) + 0x768) + 0x5560)+111)+222)+333)+AAA)+BBB);
}