植物大战僵尸辅助

心不动则不痛 提交于 2020-12-04 19:19:33

        以前的记录,发到这里吧。




        孩子一直迷恋植物大战僵尸这款游戏,从一开始的水平不行,到后来经常看植物大战僵尸的过关视频来提升自己的游戏水平,到现在游戏是玩的越来越好了,至少感觉植物大战僵尸这个游戏水平比我强很多。

        后来为了能让孩子在游戏里学到些知识,拿出 CE 教孩子改阳光,他不但学会了改阳光,还自己修改了金币(关键是学会用百度了),玩的更 High 了。为了希望他能进一步的在游戏中能够学习到知识,我为他写了一个简单的修改阳光和种植植物后免冷却时间的辅助工具。


修改阳光

        阳光可以通过 CE 逐步的查找基址,首先通过 ReadProcessMemory 函数将 CE 获取到的阳光地址找到,然后通过 WriteProcessMemory 函数将修改的阳光值写入即可。

#define SUN_VALUE_ADDRESS   0x007794f8  // 阳光基址
// 通过窗口名查找句柄HWND hGameWnd = NULL;hGameWnd = FindWindow(NULL, _T("Plants vs. Zombies GOTY "))->GetSafeHwnd();
// 根据窗口句柄获得进程IDDWORD dwPid = 0;DWORD dwTid = 0;dwTid = GetWindowThreadProcessId(hGameWnd, &dwPid);
// 打开进程HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPid);
DWORD dwSunValue = 0;DWORD dwAddr = 0;DWORD dwReadWriteByte = 0;
// 计算阳光地址// [[[0x007794f8]+0x868]+0x5578]ReadProcessMemory(hProcess, (LPCVOID)SUN_VALUE_ADDRESS, &dwAddr, sizeof(DWORD), &dwReadWriteByte);dwAddr = dwAddr + 0x868;ReadProcessMemory(hProcess, (LPCVOID)dwAddr, &dwAddr, sizeof(DWORD), &dwReadWriteByte);dwAddr = dwAddr + 0x5578;
// 读取当前阳光ReadProcessMemory(hProcess, (LPCVOID)dwAddr, &dwSunValue, sizeof(DWORD), &dwReadWriteByte);
// 获取修改的阳光值dwSunValue = GetDlgItemInt(IDC_EDIT1);WriteProcessMemory(hProcess, (LPVOID)dwAddr, &dwSunValue, sizeof(DWORD), &dwReadWriteByte);
// 关闭进程CloseHandle(hProcess);


种植植物免冷却时间

        种植植物免冷却的功能,可以通过 CE 找到格子所在的内存,然后找到修改该格子状态的代码,最后将该段代码用 NOP 指令替换掉即可。

#define CD_PATCH_ADDRESS    0x004b4ca1  // 种植植物免冷却
// 通过窗口名查找句柄HWND hGameWnd = NULL;hGameWnd = FindWindow(NULL, _T("Plants vs. Zombies GOTY "))->GetSafeHwnd();
// 根据窗口句柄获得进程IDDWORD dwPid = 0;DWORD dwTid = 0;dwTid = GetWindowThreadProcessId(hGameWnd, &dwPid);
// 打开进程HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPid);
DWORD dwOldByte = 0;DWORD dwReadWriteByte = 0;
// 读取免冷却代码ReadProcessMemory(hProcess, (LPCVOID)CD_PATCH_ADDRESS, &dwOldByte, sizeof(DWORD), &dwReadWriteByte);
// PATCH免冷却DWORD dwPatchByte = 0x90909090;WriteProcessMemory(hProcess, (LPVOID)CD_PATCH_ADDRESS, &dwPatchByte, sizeof(DWORD), &dwReadWriteByte);
// 关闭进程CloseHandle(hProcess);


想法是好的

        作为孩子的家长,我并没有限制孩子玩游戏,只是和孩子约定了玩游戏的时间,当然了如果他能从游戏中学到知识,那是最好的了。我满怀着兴奋给他演示了我摆弄出来的辅助工具,然而……他并没有如我所愿的去学习简单的编程知识,只是希望我能够在他爷爷的电脑上也装个辅助工具!

本文分享自微信公众号 - 码农UP2U(gh_3c91b47a82e0)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!