游戏辅助编程(一)修改内存

单机游戏:瘟疫公司 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,类似打怪游戏的锁血。

    完整代码如下: