植物大战僵尸辅助
时间:2022-07-23
本文章向大家介绍植物大战僵尸辅助,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
以前的记录,发到这里吧。
孩子一直迷恋植物大战僵尸这款游戏,从一开始的水平不行,到后来经常看植物大战僵尸的过关视频来提升自己的游戏水平,到现在游戏是玩的越来越好了,至少感觉植物大战僵尸这个游戏水平比我强很多。
后来为了能让孩子在游戏里学到些知识,拿出 CE 教孩子改阳光,他不但学会了改阳光,还自己修改了金币(关键是学会用百度了),玩的更 High 了。为了希望他能进一步的在游戏中能够学习到知识,我为他写了一个简单的修改阳光和种植植物后免冷却时间的辅助工具。
修改阳光
阳光可以通过 CE 逐步的查找基址,首先通过 ReadProcessMemory 函数将 CE 获取到的阳光地址找到,然后通过 WriteProcessMemory 函数将修改的阳光值写入即可。
#define SUN_VALUE_ADDRESS 0x007794f8 // 阳光基址
// 通过窗口名查找句柄
HWND hGameWnd = NULL;
hGameWnd = FindWindow(NULL, _T("Plants vs. Zombies GOTY "))->GetSafeHwnd();
// 根据窗口句柄获得进程ID
DWORD 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();
// 根据窗口句柄获得进程ID
DWORD 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);
想法是好的
作为孩子的家长,我并没有限制孩子玩游戏,只是和孩子约定了玩游戏的时间,当然了如果他能从游戏中学到知识,那是最好的了。我满怀着兴奋给他演示了我摆弄出来的辅助工具,然而……他并没有如我所愿的去学习简单的编程知识,只是希望我能够在他爷爷的电脑上也装个辅助工具!
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 部署 Consul服务实现Docker容器跨主机通信
- 【测试】 Java如何优雅的生成测试数据
- Spring事物的传播行为案例分析
- Ingress-nginx灰度发布功能详解
- [885]Tensorflow设置CUDA_VISIBLE_DEVICES来控制GPU的使用
- Windows10:启用或禁用休眠、保留的存储
- 基于Vue SEO的四种方案
- 一道SQL问题,你来试试的?
- 利用DNSLOG测试Fastjson远程命令执行漏洞
- goldengate classic模式在空闲数据库上抽取和应用数据延迟问题
- gorm jion查询映射(扫描scan)到新的结构体,必须使用select规定字段,与xorm的jion对比
- Spark UDF1 返回复杂结构
- Docker 部署Registry私有仓库+Harbor私有仓库
- goldengate同步无主键无唯一索引表的问题以及解决方案
- goldengate同步无主键无唯一索引表的问题以及解决方案--更新关于附加日志