实验目标:我们都知道植物大战僵尸游戏中植物是不可以叠加种植的,也就是一个格子只能种植一个植物,今天我们将实现一个格子里种植无限多的植物。

我们首先需要找到植物的种植CALL,然后在逐步测试观察功能之间的变化,最终实现功能。

种植CALL的遍历技巧:

打开CE -> 回到游戏 -> 然后回到CE -> 扫描未知初始数

回到游戏 -> 拿起向日葵(不要种) -> CE 搜索变动的数值 -> 回到游戏(不要动) -> 搜索未变动的数值

回到游戏 -> 放下向日葵 -> 拿起豌豆射手 -> CE搜索 变动的数值 -> 以此重复进行

当我们使用鼠标点击时会在一个地址写入值,当换个植物则会换一个数值,这样如此反复就会找到CALL的地址。

1.打开CE附加游戏进程,然后搜索未知初始化数值。

2.接着回到游戏,选择向日葵植物,然后回到CE直接搜索,变动的数值。

3.回到游戏不要动,直接右击取消向日葵的选择,然后再次拿起向日葵,搜索未变动的数值。

4.放下向日葵,拿起豌豆射手(不要告诉我你不知道是哪个),回到CE,搜索变动的数值。

5.放下豌豆射手,拿起向日葵,然后CE搜索变动的数值。

6.如上以此循环执行第4,5步,直到数据变成了几个为止,这里我找到了两个比较可疑的,只要拿起植物它就发生变化。

7.我们在第一个地址上面,右击选择查找访问的地址,也可以选中第一行按下【F5】键,回到游戏并手动种植一个植物,会发现一条可疑汇编代码,我们先把地址记下来【00410AC1】

这里我们只需要记录植物种下后出现的地址,前面三个分别是拿起植物和放下植物的代码,我们这里不需要考虑。

好了,我们关闭上面的【访问地址】对话框,然后我们用同样的方式在第二个地址上操作,种下植物会发现三个可疑地址,我们直接记下来,【00410865】,【00410a91】,【0041239A】

由于我们不知道那一个会调用种植的CALL所以,我们把这三个地址都记下来,记下来之后关闭CE就好了,后期用不到了。

在调试之前,请你自行把阳光改多一点,方便我们调试。

8.关闭CE后,直接打开OD并附加植物大战僵尸游戏进程,然后按下【F9】让程序先跑起来,然后【Ctrl + G】输入【00401000】回到程序领空。

9.我们分别定位到上面找到的那几个地址上,【00410AC1】,【00410865】,【00410a91】,【0041239A】,然后观察后分别下断点。

10.一切准备就绪了,我们回到游戏中,然后拿起一个植物,拿起植物后发现并没有断下,我们直接右击放下植物,会发现OD直接断下了,这里可以排除了,因为我们放下了植物并没有种植所以也就跳过了种植的CALL,这里没有我们直接取消下面的两个断点,然后按下【F9】让程序跑起来。

11.接着我们继续回到游戏中,拿起植物然后种植下去,此时OD会段在第二个断点的位置上,默认关键跳转没有跳,我们直接修改标志位让其跳转实现,然后运行程序发现种下了植物,这里虽然断下了但修改后并没有停止种植,所以这里我们也排除掉,取消这里的两处断点。

12.继续回到游戏,种下植物OD会段在以下位置,我们默认是不跳转的也就是种植,我们修改标志位观察发现,植物并没有被种下,说明这个跳转跳过了关键的种植代码,我们向下找也不难看出,于是乎我们重点分析它跳过的代码的执行轨迹。

13.观察如上跳过的代码不难看出一堆PUSH指令,很明显这是调用CALL之前的参数传递,此时我们直接在PUSH的位置下断点,回到游戏中再次种植植物,程序会断下,我们观察程序的压站情况。

首先我在第一行第一列种植了一个植物,观察压站情况如下所示,我已经分析好了。

为了对比明显,我在第二行种植了一个寒冰射手,然后观察压站情况,会发现植物的未知变化和植物ID的变化。

14.上面的对比已经非常明显了,我们直接使用代码注入器注入分别将push 5 改成【 1,2,3】,然后用【mov eax,2】控制在第几列种植,即可实现叠加效果。注意:这里的 【Push 1406FA88】每次运行程序都会改变,我这里可以注入成功,你们那里需要修改一下。

既然找到了种植CALL的地址【00410A94】,那我们可以猜测,植物在种下之前是否会判断放入方格中是否有植物呢? 答案是肯定的,当我们在一个空地上种植的时候,我们能够种上说明条件成立,那如果方格中有植物则无法完成种植,条件也就不会成立,由此可猜到这里应该是使用一个条件判断来控制的,下面我们就去寻找这个条件判断的位置。

15.直接打开OD,然后附加游戏并运行起来,按下【Ctrl + G】,输入【00401000】回到程序领空,然后输入【00410A94】,来到种植CALL的位置,然后向上找。

16.由于这里我们并不知道那个跳转是影响植物的种植判断的,所以我们只能去程序的断首下断点,一步一步的单步调试。

17.然后我们回到游戏,在已经有植物的格子里种植植物,发现程序会断下直接单步跟踪,只要不是大跳转就不需管它,在单步调试的时候,注意test 和cmp这种比较指令的状态。

18.如下图1-2,此处的JE跳转并没有跳转成功,而且还是很大的跳转,我们鼠标向下滑,找到跳转的结束位置,发现在结束之前有一个JMP指令,由于JE没有跳转,那么肯定是执行JMP指令。

19.接着看图1我们顺着JMP指令向下找,在图2的位置我们找到了种植CALL,也就是说它跳过了种植过程,我们继续顺着跳转红线往下找,会看到图3直接ret返回了。

由上面的分析不难看出,由于JE跳转并没有跳转成功所以执行了JMP指令,而JMP指令恰巧跳过了种植CALL,也就是跳过了种植的过程,所以可以断定上方的JE指令必须得跳转才能实现叠加种植的效果。

其实还有一种分析思路,我们知道如果植物种植失败肯定会Ret直接返回,所以我们直接来到程序的断尾,观察有没有直接跳转到结束的指令,然后顺着指令向上找也能够找到这个JE的位置。

20.既然知道了JE跳转是关键,那我们就让它直接无条件跳转试试,果然可以实现叠加种植啦。

详细分析笔记,猛戳这里:https://blib.cn/post/4420.html

植物大战僵尸:查找植物叠加种植CALL相关推荐

  1. 【CE入门教程】使用Cheat Engine(CE)修改游戏“植物大战僵尸”之植物篇

    目录 1.单卡片无CD 1.1 思路一 1.2 思路二 2.全卡片无CD 3.豌豆射手射速修改(修改植物射速) 4.实现豌豆射手发射"玉米加农炮"(思路) 上一期教程中,我们学习了 ...

  2. 植物大战僵尸:植物栏无冷却的找法

    通过使用CE遍历内存,定位到植物无冷却的核心代码处,并通过修改关键的跳转来实现所有植物的无冷却. 第一种遍历修改方式 无冷却的遍历技巧1: 打开CE->回到游戏种植一颗向日葵 -> 扫描未 ...

  3. 【CE入门教程】使用Cheat Engine(CE)修改游戏“植物大战僵尸”之僵尸篇

    目录 1.寻找僵尸位置基址 2.实现"秒杀"僵尸(修改僵尸血量) 上一期教程中,我们学习了修改植物大战僵尸的单卡片无CD.全卡片无CD.豌豆射手射速修改以及实现豌豆射手发射&quo ...

  4. 基于python开发植物大战僵尸

    目录 摘要 2 一, 引言 3 1.1中国游戏产业的现状 3 1.2中国游戏产业的未来发展局势 4 1.3植物大战僵尸游戏的发展状况 4 二.系统结构 5 2.1 Python3.8.2 IDLE 简 ...

  5. 针对“扫雷“和“植物大战僵尸“游戏,分析,扫描,阳光值,植物,金币,僵尸的分析逆向

    <软件逆向分析> 2022年9月 目录 {#目录 .TOC-Heading} [一.实验工具介绍 3](#一实验工具介绍) [二.针对"扫雷"游戏 3](#二针对扫雷游 ...

  6. MVZ2Android,植物大战僵尸mvz2

    植物大战僵尸mvz2是一款非常好玩的角色扮演类游戏,在一个漆黑的夜晚,一大群食人僵尸冲了出来,想要占领这座城市. 植物大战僵尸mvz2游戏介绍: 1.在这个时候不采取行动不仅会消失,而且还会成为他们口 ...

  7. 植物大战僵尸2 服务器维护时间,植物大战僵尸2PVP商店多久更新一次

    植物大战僵尸2PVP商店多久更新一次以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 植物大战僵尸2PVP商店多久更新一次 ...

  8. 植物大战僵尸2android最新版,手机植物大战僵尸2高清版下载官方-植物大战僵尸2高清版 安卓版v2.4.8-PC6手游网...

    <植物大战僵尸2>是<植物大战僵尸>的全新续作.在沿袭了经典的植物防御僵尸玩法的基础上,新增了植物能量.手势道具.僵尸设定图及游戏关卡的选择场景,玩家将可以体验到古埃及.海盗湾 ...

  9. C语言手写-植物大战僵尸

    植物大战僵尸,是一个非常经典的小游戏,初学者从零开始,开发一个自己的植物大战僵尸,还是非常值得期待的!可以作为自己的课设,也可以用来快速提升自己的项目开发能力. 项目效果(详细视频教程-下载素材-点这 ...

  10. 【CE入门教程】使用Cheat Engine(CE)修改游戏“植物大战僵尸”之其他篇

    目录 1.跳关(任意选择关卡) 2.修改金币值 3.实现自动收集阳光 上一期教程中,我们学习了寻找植物大战僵尸僵尸距离基址.实现"秒杀"僵尸的方法.PS:上篇链接:[CE入门教程] ...

最新文章

  1. selenium提取数据之driver对象定位标签元素获取标签对象的方法
  2. 深度学习中GPU和显存分析
  3. 虚拟化基础架构Windows 2008篇之1-虚拟化基础服务概述
  4. 【c语言】蓝桥杯入门训练 A+B问题
  5. 两个相邻时间之间的差值计算
  6. Android init.rc执行顺序
  7. 计算机软件在矿井地质中的应用,(完整版)遥感导论知识点整理(梅安新版)
  8. 最大连续子数组和 动态规划_剑指Offer算法题 33:连续子数组的最大和
  9. POSIX线程专有数据的空间释放问题,pthread_key_create
  10. 系出名门Android(9) - 数据库支持(SQLite), 内容提供器(ContentProvider)
  11. 手把手教你一整套R语言数据分析+建模流程
  12. STM32单片机Flash模拟EEPROM
  13. 1000m交叉网线最简单做法
  14. Target: x86_64-linux-gnu下实现gcc -m32
  15. 120G+训练好的word2vec模型(中文词向量)
  16. 学校计算机教室张贴些,计算机教室墙面布置方法是什么?
  17. 计算机科学技术考研录取人数,2021清华计算机科学与技术考研招生人数、考试科目、复试科目、分数线录取名单...
  18. 计算机学院运动会方阵策划案,运动会方阵策划书模板
  19. fetchMetadata: sill resolveWithNewModule raw-loader@0.5.1 checking installable status
  20. 售后支持领域的服务指标

热门文章

  1. 原创OI题目:部落冲突
  2. 手把手教你抄板(待更新)
  3. ERROR:cannot load flash device description
  4. 下载tensorflow时遇到的问题
  5. #Paper Reading# Why Should I Trust You? Explaining the Predictions of Any Classifier
  6. 《重构》经典句子摘录,程序员读过后一定有收获
  7. pol点获取及火星坐标系转换
  8. codeblocks出现Encoding Changed The saved doucument contained characters which were illeal
  9. 学 Win32 汇编[24] - 移位: SHL、SHR、SAL、SAR、ROL、ROR、RCL、RCR、SHLD、SHRD
  10. 目前市面上堡垒机的品牌有哪些?采购时候需要考虑哪些?