单机游戏:瘟疫公司 Plague Inc:Evolved
开发工具:VisualStudio 2017
其他工具:Cheat Engine 6.4
项目目标:
通过修改DNA点数,让瘟疫更快进化,从而赢得游戏。
关键技术:
1.找到代表“DNA点数”这个变量的内存地址
使用工具Cheat Engine扫描到 DNA点数的内存地址,具体怎么使用这里就不赘述了。
工具的大概原理是:比如游戏刚开始时,DNA点数是8,那么扫描一遍内存值是8的所有地址,进行保留。过一段时间后增长至10,那么从刚才保留的内存地址列表,扫描一遍当前内存值是10的地址。如此循环,直到无法再过滤。
有时,过滤后只剩一个内存地址,那么这个地址即是代表DNA点数的内存。有时会剩2-4个或更多,这时有可能是游戏UI或其他模块定义了一套该模块独立使用的变量,同时使用订阅者模式订阅了该变量,这样每次此变量发生变化时,会通知其他模块同时更新。这时可以依次修改这些内存的值,并在游戏中操作,看下到底是哪个变量在起作用。
此时,亦可直接通过CE来修改内存数值。在扫描时,读取内存数值,亦可通过编程来实现。
2.编程修改内存
1)获取游戏窗口句柄
HWND hwnd_Game = FindWindow(NULL, L"Plague Inc: Evolved");
2)获取游戏进程ID
DWORD ProcessID; GetWindowThreadProcessId(hwnd_Game, &ProcessID);
3)获取游戏进程
HANDLE h_process = OpenProcess(PROCESS_ALL_ACCESS, false, ProcessID);
4)修改内存
int ret = WriteProcessMemory(h_process, (LPVOID)0x4F2E000C, &num, 4, NULL);
当ret为0时,修改失败,为1时,修改成功。
至此,项目目标已实现。为了更方便的游戏,可以写一个循环,把DNA点数锁定在200,类似打怪游戏的锁血。
完整代码如下: