C语言实现植物大战僵尸自动收集阳光(一) 问题分析与寻找基址
C语言实现植物大战僵尸自动收集阳光(二) C语言控制台程序的实现
C语言实现植物大战僵尸自动收集阳光(三) 解决收集不全与收集奖杯卡死的问题

前言

前半个月正是考试周,我们学校软件和计算机的课程安排非常不对称,按理说大三下学期,同学们考研的考研,找工作的找工作,根本没有那么多时间应付期末,但是我们这学期偏偏有5门闭卷考试,人家计算机只有一门闭卷其余全开卷,实名制羡慕,我女朋友就是计算机的,在我复习的时候她就在玩植物大战僵尸,在那用鼠标咔嚓咔嚓的点阳光,咱也不敢说啥(卑微男孩,毫无家庭地位),甚是心烦,遂问了一句,要是我给你做个软件能自动收集阳光,你觉得怎么样?她答:“那敢情好,就怕你没这个本事。”我日,我都这么卑微了,这事还能让她拿住?复习?复习个p,整!

前置内容

  • CE查找植物大战僵尸基地址:https://blog.csdn.net/qq78442761/article/details/54670630#
  • 计算机组成原理 间接寻址:https://blog.csdn.net/bjbz_cxy/article/details/80534371

分析问题

刚确认问题后,我立刻得到如下几个思路

  1. 软件模拟硬件,识图找阳光,发送消息,模拟鼠标点击
  2. 找到收集阳光的call,软件调用

如果思路1的话,操作会很不方便, 比如正在放植物的时候,如果发送了鼠标点击的消息,可能会把植物放到意外的地方,所以我们选思路2

确定思路

下一个问题就是,如果找到收集阳光的子程序,我们需要在OD中下断点,并不断向上追踪,那么问题来了,从哪里下断点?
我观察到当阳光出现时,是以一个速度向下掉落,玩家点击阳光后,阳光飞往左上角,阳光的运动状态发生改变了,那么我猜测,在收集阳光的子程序中,应该有一个状态量,状态量改变,阳光运动状态也打算改变,只要找到这个状态量,在堆栈中查看改变这个状态量的汇编代码所在哪个子程序便可。下一个问题,如何查找状态量?
答:用CE不断搜变化的值与不变的值

动手尝试

  1. 第一个阳光落下,按ESC暂停,进行一次全搜索

  2. 点击第一个阳光,按ESC暂停,阳光状态改变了,搜索一次变化的值

  3. 此时我们发现有很多值还在变动,显然这不是我们需要的,再搜索一次未变化的值,直到剩余地址数趋于稳定。

  4. 重复上述动作,直到地址结果数令人接受

我们猜测阳光落下与收集的状态变量是布尔型,所以直接对第四个地址进行尝试,当阳光落下时,该地址的值为0,鼠标点击后,该地址值为1,为了确认一下这个地址是否是我想要的,我用ce将它锁定为1,然后发现,当将该地址锁定为1的时候,就已经实现自动收集了,大功告成。

所以,很开心的是,我们已经不需要再用OD去下断点找call了,直接把这个地址锁成1就完事了。但是这个地址是游戏运行时根据基地址算出来的地址,我们还得找到一个不变的地址(基地址)才能给女朋友用,要不她一重启游戏这个地址就失效了,她还是得挑我毛病。

注意:变化值与不变值的方式查找地址,能否找到自动收集所需要的内存的地址需要一点运气,读者在复现的时候可以直接通过0和1的搜索加快搜素进度,同时,为了最大可能性的成功,请保证同一时间内场上只有一个阳光,且该阳光掉落前,没有其他阳光在场。具体原因请详见该系列的第三篇博文。

定位基址

CE找植物大战僵尸基地址的教程网上很多,而且没啥技巧,很机械性的照着做就完事了,我上文给出了一个链接,可以作为参考
在这里我直接给出基地址和偏移

基地址:
6AA00C
6A9F78
6A9F38
6A9EC0[[[基地址]+00000768]+E4]+50

这个我们在课上学过,叫间接寻址,基地址和偏移是常量,[地址]表示取地址内储存的值,类似C语言中取指针指向的变量的值*p,游戏运行的时候,程序根据基地址内的值与偏移进行运算就得到目标地址,当然我们做辅助软件从程序外部修改内存用的也是这个原理。

结论

我们已经找到了自动收集阳光的基地址,按理说每次打开ce把地址算出来,然后把它锁定为1就完成任务了,我特意把女朋友叫了过来,向她证明:“你看,我做到了”。不过到这里我们还没完成,因为咱们总不可能让人家就这么用吧,至少得写个控制台程序出来,所以下一篇就是怎么用c语言把这个功能实现出来。

同时,还有一件事,就是在后面的实践中发现,只锁定这个地址其实会有两个问题

  1. 锁定该地址会导致无差别收集,包括阳光,金币,奖杯。当奖杯被自动收集时,游戏会卡住,无法正常进行冒险模式
  2. 当阳光多了以后,有一部分阳光无法被自动收集

对这两个问题的分析和解决,我将放到该系列的第三篇博文中,一个事能水三篇,我表示很满意(逃

C语言实现植物大战僵尸自动收集阳光(一) 问题分析与寻找基址相关推荐

  1. C语言实现植物大战僵尸自动收集阳光(三) 解决收集不全与收集奖杯卡死的问题

    C语言实现植物大战僵尸自动收集阳光(一) 问题分析与寻找基址 C语言实现植物大战僵尸自动收集阳光(二) C语言控制台程序的实现 C语言实现植物大战僵尸自动收集阳光(三) 解决收集不全与收集奖杯卡死的问 ...

  2. C语言实现植物大战僵尸自动收集阳光(二) C语言控制台程序的实现

    C语言实现植物大战僵尸自动收集阳光(一) 问题分析与寻找基址 C语言实现植物大战僵尸自动收集阳光(二) C语言控制台程序的实现 C语言实现植物大战僵尸自动收集阳光(三) 解决收集不全与收集奖杯卡死的问 ...

  3. 利用java多态实现植物大战僵_植物大战僵尸自动收集阳光金币

    一.自动收集阳光 大致思路,猜测有一个点击阳光的函数,当我们点击阳光后,会调用它,完成增加阳光的一系列操作.但是只有当我们点击的是阳光时,才会调用它,所以点击阳光应该是有一个判断的,判断点击的是否是阳 ...

  4. 用od、ce实现植物大战僵尸自动收集阳光

    找地址 首先使用ce查看阳光的地址 然后F6是什么改写了地址 地址找到了,复制00430A11这个地址,在od中搜索 分析 打开od,file–>attach(关掉ce 才可以打开进程),找到植 ...

  5. C语言实现植物大战僵尸----学习过程

    大一下学期c语言课程设计要我们用c语言制作一款游戏,之前网上冲浪时候发现了c语言实现植物大战僵尸的教程,就想来跟着教程做一遍,并记录下自己的学习过程与经验. 前排分享我所学习的视频和文章: [可能是B ...

  6. CE实战:修改植物大战僵尸中阳光数值

    CE实战:修改植物大战僵尸中阳光数值 游戏版本:植物大战僵尸中文版( PlantsVsZombies ) Cheat Engine 版本:Cheat Engine 7.0 一.打开游戏 二.打开CE并 ...

  7. 植物大战僵尸针对金币地址以及基地址寻找详细步骤~包含排除不符合条件的地址的讲解,以及如何观察地址情况等

    植物大战僵尸针对金币地址以及基地址寻找详细步骤 针对 "金币" 扫描金币的内存地址 (1)由于金币是一个精确的数值,且每次捡拾一个金币就会对应增加10,那么我们在扫描的时候就需要将 ...

  8. 详解C语言实现植物大战僵尸阳光9999

    文章目录 效果展示 工具: 要求(建议) 一.CE部分: 二.核心代码部分 三.润色 效果展示 另外点击还会有"德玛西亚!"音效 工具: 核心代码:Devcpp足够: 对话框界面和 ...

  9. ce逆向修改——植物大战僵尸针对“阳光值”

    ce逆向修改--植物大战僵尸 一.实验目的 为熟悉CE的使用和对软件逆向分析有进一步的了解. 二.实验设备 Cheat Engine 6.8.植物大战僵尸 三.实验内容 1.针对"阳光值&q ...

最新文章

  1. python 并行计算 并行方法总结 concurrent.futures pp pathos multiprocessing multiprocess模块 总结对比
  2. 腾讯首次公布微信最全用户数据【完整版】
  3. 在gridview里查找模板里的button控件
  4. 势在人为:人才吸引力报告2020
  5. MySQL(一)存储引擎
  6. 前嗅ForeSpider教程:采集图片/视频/资源文件的链接地址 1
  7. html画图代码_python之matplotlib画图教程(1)
  8. Java ListIterator 与 Iterator 异同
  9. 深度学习之神经网络(二)
  10. NR - SIB1 PDCCH时域频域位置
  11. 不断网情况下,如何关闭红蜘蛛多媒体网络教室
  12. ICMP协议与ping
  13. QQ音乐爬虫程序详细解析(一)——歌曲下载模块
  14. python程序文件的扩展名是-python脚本文件的扩展名是什么
  15. 服务器性能之IO性能指标含义
  16. ui设计培训课程是哪些
  17. 极致cms,极致cms程序,极致cms开发
  18. Git三大特色之Branch(分支)
  19. 桌面两个IE图标其中一个无法删除的解决办法
  20. bottle框架剖析

热门文章

  1. 基于c51单片机的毕业设计——智能温度控制
  2. RxJava 2.0 入门教程
  3. matlab汽车驱动力与行驶阻力,汽车理论课程设计:基于Matlab的汽车动力性的仿真...
  4. 2022年最新VMware下载安装教程
  5. 163邮箱vip会员体系,看收费邮箱行业未来!
  6. i.MX8 Yocto 使用 systemd 配置网络
  7. 【java】本地客户端内嵌浏览器3 - Swing 使用 Spring 框架 + 打包项目 + 转exe + 源码
  8. Matlab求解线性方程组(一)共轭梯度法
  9. 深度学习在药物发现领域的兴起
  10. 在Altium designer21 PCB文件中统计pin数