C 语言游戏外挂 (二):从基址读取数据

通过 C 语言编写一个外挂,通过 API 函数获取游戏数据,从而实现作弊功能

  • 对象分析
  • 要用的 API 函数简单介绍
  • 编写测试效果
  • 总体评价

对象分析

 2-GOAp4TqoQMoHXHP5

本次游戏对象为 Plants vs. Zombies1.0.0.1051 汉化第一版

试玩发现主要数据有阳光、金钱,其中金钱最小以 10 为单位,因此数据应以 “显示钱数 / 10” 保存

通过 CE 确定阳光和金钱的基址计算公式
[[[006A9EC0]+768]+5560] = sun
[[[006A9F38]+82C]+28] = money
故所求基址为 006A9EC0 和 006A9F38,利用偏移即可得出数据

要用的 API 函数简单介绍

HWND ReadProcessMemory(HANDLE hProcess, LPCVOID lpBaseAddress, LPVOID lpBuffer, DWORD nSize, LPDWORD lpNumberOfBytesRead); 根据进程句柄读入该进程的某个内存空间 lpBaseAddress 的 nSize 字节,并写入缓冲区 lpBuffer,多次计算基址和偏移即可

编写测试效果

2-hJCgCIwrTLqlbypt

打开游戏

2-FgIr56uiq83uuabK

运行外挂 (截图前修改过钱数值)
成功读取出阳光和金钱的数据,如再使用写入内存将所想要的值写入即达到修改功能

2-jxdkFVczjFawYnSd

修改成功

 

总体评价

简单读取游戏中的内存数据并显示修改