目录
辅助最终展示效果
一、文章介绍
二、工具介绍
三、基址搜索
3.1、寻找阳光基址
3.2、寻找卡槽冷却基址
3.3、寻找僵尸刷新时间基址
3.4、寻找大阳光刷新时间基址
3.5、寻找植物编号基址
3.6、寻找场上僵尸数量基址
3.7、寻找僵尸 X 坐标基址
3.8、通过找到的僵尸 X 轴坐标基址寻找 Y 轴、血量等基址
3.9、寻找每只僵尸之间的地址偏移
四、代码编写
4.1、基础代码
4.2、功能代码
4.2.1、编写实现无限阳光
4.2.2、编写植物无冷却
4.2.3、编写僵尸全出功能
4.2.4、编写无限刷新大太阳功能
4.2.5、编写植物替换功能
4.2.6、编写获取场上僵尸数量功能
4.2.7、编写获取获取僵尸数组功能
4.2.8、编写绘制僵尸方框功能
4.3、完整代码
五、总结
辅助最终展示效果
演示视频
一、文章介绍
写这篇文章的目的是告诉大家游戏单机辅助是如何编写的,这种方法在其他部分非单机游戏也能适用,开发者该如何去防范,知攻善防,并不鼓励大家写游戏外挂。
游戏辅助本身就是利用游戏漏洞进行开发的,在单机游戏中,游戏数据都是存储在本地的,运行游戏后通过使用相应的内存查找工具获取到当前游戏数据的存储地址,通过对其数据进行修改来达到游戏规则之外的效果,使玩家可以轻松通过。
通过本篇文章的学习我们就可以知道辅助开发者是如何获取到游戏数据的,对我们游戏开发人员是有一定的帮助的,比如我们可以对游戏数据进行加密,增加辅助开发的难度,来尽量维持游戏的平衡等......
二、工具介绍
1、CE(内存搜索工具)
2、植物大战僵尸杂交版 2.0.88
3、精易助手 (后文用到的时候有附带下载链接,读者现在不必理会)
4、PyCharm Community Edition 2023.3.4(Python 开发环境)
5、SafeDog (Python 游戏安全测试模块,需要模块联系我)
【版本不需要和我一样也可以,不过我所用的 Python 是 Python3 ,这点大家尽量和我保持一样,因为有些代码的使用在 Python2 中区别比较大】
三、基址搜索
3.1、寻找阳光基址
打开游戏和 CE 工具并附加进程
附加完成后进入游戏关卡
CE 中填写设置相关信息
回到游戏种植植物或者拾取太阳使阳光数量发生变化
在 CE 中搜索 375,其他东西不用变,然后点击 Next Scan(下一次扫描,是在第一次的基础上进行扫描的),注意不是 New Scan
只剩一条数据,那么这条就是阳光的地址了,不过这只是临时地址,也就是说,游戏关闭再开地址就变了,我们如果要制作辅助就需要找到数据的基址(不会变动的,不关游戏关了几次或是重新安装,都不会变)
然后会打开如下窗口,这个窗口不要关,我们回到游戏再次改变阳光的数量,观察窗口的变化
这个 eax + 5560 的 5560 就是我们的一级偏移
选择 New Scan 再选 First Scan
这里告诉大家怎么去找多级指针,我们找地址比较特殊的和其他差别比较大的那种地址,如图所示
所以我们就右键查看是谁访问了他,这里要选访问,而不是改写
找到这种数据就要偷笑了,因为像这种很整齐的而且偏移都是一样的大概率就是找对了,我们再回到游戏改变一下阳光的数量
因为我们第一次找到的是 eax + 5560 所以这里要找 mov eax 开头的,这些是汇编知识了,寄存器相关的,大家不懂可以去找书或视频看,这里先看操作学习思路
双击打开
继续搜索,其他操作不变,然后你就会发现找到了基址了,当然了如果你的 CE 版本和我的不同他可能显示的是十六进制的地址,而不是名称,都这无所谓,他们都是绿色的,这里我试过了,每一条都可以作为基址,随便选一条就好了,这里我选择最后一条
填完之后点击 OK,然后就会发现关闭游戏再打开它仍然有效(注意 CE 要重新附加进程),写游戏辅助的时候就需要用到它了
PlantsVsZombies.exe+2AA00C + 768 + 5560
3.2、寻找卡槽冷却基址
好了,通过查找阳光基址相信读者已经大致了解了 CE 的简单使用了,那么接下来的内容里我就不一一截图解释了,部分通过文字的描述来给大家讲解,操作都是大同小异的,聪明的你肯定能明白。
寻找卡槽基址有什么用呢?当然是实现植物无冷却啊,我们首先要了解游戏的冷却原理,没次种植植物后,植物就会在卡槽中进入生长时间也就是我们说的冷却时间。在植物大战僵尸中冷却结束表示 1,冷却开始表示 0(也就是拿起植物但不种植时卡槽的状态)。
一直重复拿起搜索 0,放下搜索 1,获取搜索完后不要返回游戏继续点击搜索未变动的数值,过滤掉那些变动的值,因为我们没有对卡槽进行操作,那么它对应的值就不会变
扫到 200 多条数据的时候就差不多了,因为不可能每次都和找阳光那样一下就找得只剩下一条,有些数据过滤完还剩下几千条也有,接下来就需要自己去判断了。
点第一条数据,然后把滚动条拉倒中间,按住键盘上的 shift 键然后再随便选一条数据点一下
通用的方法按 shift 选择一半的数据然后按回车对值进行修改,如果我们的卡槽现在是亮的我们就改成 0,反之改成 1 然后按回车全部锁定,再看一下游戏的卡槽里吗有没有变暗(亮),如果有说明正确的地址在我们选择的数据中,另外一部分没选的数据就可以删除了,然后再利用二分法继续寻找,直到找到正确的地址。
接下来就用同样的方法寻找基址即可,不过需要注意的是,要把数据类型改回 4 Byte
这样就可以找到第一个卡槽冷却时间的基址了
PlantsVsZombies.exe+2AA00C + 768 + 144 + 70
通用的方法我们去寻找第二个第三个卡槽的冷却时间,我就会发现他们的基址分别如下:
第二个卡槽:PlantsVsZombies.exe+2AA00C + 768 + 144 + C0
第三个卡槽:PlantsVsZombies.exe+2AA00C + 768 + 144 + 110
他们之间偏移相差 50 (十六进制),那么以此类推就可以知道后面所有卡槽的冷却基址了,我们只需要通过写循环就可以实现全卡槽无冷却。
3.3、寻找僵尸刷新时间基址
找到关卡进度条基址我们就可以实现僵尸全部出现,然后快速通过。我们首先要知道,植物大战僵尸中,每一波僵尸出现的间隔是一个倒计时,比如第一波出现了那么就进入倒计时,时间一到就刷新第二波僵尸,我们要找进度条基址也就是找到这个间隔的时间地址,把它改成 1 并且锁定,那么僵尸就会一次性全部出现。
【注意关卡刚开始还未出僵尸的时候也是在倒计时,这时候就可以开始扫描了,当然了一定要卡好时间,因为我们在倒计时期间扫描的是减少的值,一不小心僵尸刷新了,这时候值是变大了,重新开始倒计时,如果还扫描变少的值那