免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!
本次游戏没法给
内容参考于:微尘网络安全
上一个内容:5.x86游戏实战-CE定位基地址
上一个内容找出了人物状态标志位的基址,接下来就通过写C++代码来去读人物状态标志位的值
效果图:
代码:
// ConsoleApplication4.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #include <iostream> #include "Windows.h" int main() { /* PROCESS_ALL_ACCESS表示全部权限 FALSE表示不继承,这个一般用不到,不用了解 14384进程的Pid,详情看文章中的图 h是进程句柄,句柄是用来代表一个进程的数字,由操作系统提供 HANDLE h = OpenProcess(PROCESS_ALL_ACCESS, FALSE, 14384); 这一句的意思是获取14384进程的所有权限,并把句柄放到h中 */ //HANDLE h = OpenProcess(PROCESS_ALL_ACCESS, FALSE, 14384); /* DWORD* 的意思是,* 表示当前的数据认定成内存地址,DWORD是4字节数字 DWORD* 的意思是把xxx认定成内存地址,内存地址里的值是一个4字节数字 (DWORD*)0xA107BC也就是把0xA107BC它当做内存地址来看待,0xA107BC内存地址里的值是一个4字节数字 */ //DWORD* buffer = (DWORD*)0xA107BC; //DWORD ret; /* h要读取谁的内存 buffer内存地址 ret内存地址的数据 4读取4个字节 NULL没用 &是取地址的意思,&ret的意思就是ret的内存地址 ReadProcessMemory(h, buffer, &ret, 4, NULL); 这一句的意思是,从h的内存中的0x60BAA6A0位置开始读取4字节,放到ret它里面,如果ret的大小没有4字节会显示有问题或程序崩溃 */ //ReadProcessMemory(h, buffer, &ret, 4, NULL); //printf("%d", ret); HANDLE h = OpenProcess(PROCESS_ALL_ACCESS, FALSE, 15052); DWORD* buffer = (DWORD*)0xA107BC; DWORD ret; ReadProcessMemory(h, buffer, &ret, 4, NULL); //printf("%d", ret); buffer = (DWORD*)(ret + 0x60); ReadProcessMemory(h, buffer, &ret, 4, NULL); buffer = (DWORD*)(ret + 0x14c); ReadProcessMemory(h, buffer, &ret, 4, NULL); printf("人物状态标志:%d\n", ret); }