12558网页游戏私服论坛

 找回密码
 立即注册
游戏开服表 申请开服
游戏名称 游戏描述 开服状态 游戏福利 运营商 游戏链接
攻城掠地-仿官 全新玩法,觉醒武将,觉醒技能 每周新区 经典复古版本,长久稳定 进入游戏
巅峰新版攻 攻城掠地公益服 攻城掠地SF 新兵种、新武将(兵种) 进入游戏
攻城掠地公 散人玩家的天堂 新开 进入游戏
改版攻城掠 上线即可国战PK 稳定新区 全新改版,功能强大 进入游戏
少年江山 高福利高爆率 刚开一秒 江湖水落潜蛟龙 进入游戏
太古封魔录 开服送10亿钻石 福利多多 不用充钱也可升级 进入游戏
神魔之道 签到送元宝 稳定开新区 送豪华签到奖励 进入游戏
神奇三国 统帅三军,招揽名将 免费玩新区 激情国战,征战四方 进入游戏
龙符 三日豪礼领到爽 天天开新区 助你征战无双 进入游戏
王者之师 免费领豪华奖励 免费玩新区 6元送6888元宝 进入游戏
三国霸业 战车-珍宝-觉醒-攻城掠地SF-全新玩法 免费玩新区 攻城掠地私服 进入游戏
手游私服盒子 各类免费游戏 0.1折送海量资源 各类手游私服 进入游戏
皇家MU2 《奇迹 2:传奇》韩国网禅公司《奇迹》正统续作。 3D锁视角Mmrpg 暗黑3+传奇+流放之路+奇迹 进入游戏
查看: 350|回复: 0

植物大战僵尸CE实现阳光越用越多分析

[复制链接]

59

主题

59

帖子

128

积分

实习版主

Rank: 7Rank: 7Rank: 7

积分
128
发表于 2022-1-28 20:42:01 | 显示全部楼层 |阅读模式
论坛内里有很多分析教程写的相当好,这个帖子仅仅作为我个人的学习记录,有写错的地方希望各人指正,谢谢!

图文关系:图片在上,笔墨在下,先图后笔墨!





我用的是 1.2.0.1.73 版本。


我们正常打开游戏,到主界面或者进入游戏中都可以,我是在游戏选择模式界面。


打开CE(版本无所谓,我是CE6.7,这个各人都有吧,没有的话就去下载一个!),附加游戏!


我们回到游戏,我选择“冒险模式”,关卡2-7,各人自由选择。


游戏开始之后,我们要暂停游戏,可以看到系统送了我们50个阳光。


我们回到CE,扫描类型:准确数值,数值类型:4字节,输入阳光50,点击“首次扫描”。


扫描之后有很多效果,我们如今不知道到一个才是我们需要的地点,以是我们回到游戏让阳光增长或者减少。
显然因为是夜晚,不会产生阳光,以是我们不能增长,我们就尝试让它减少,也就是种一个植物,让阳光减少。
阳光从原来的50变成25,因为我种了一个小蘑菇,斲丧了25个阳光,剩下25。


我们回到CE,输入游戏内里剩下的阳光 25,点击 再次扫描


此时我们经过再次扫描,剩下的这个就是我们想要的数据。


我们将搜索的数据拉到地下的列表中。


如许我们就将地点拉到我们的列表中了。


点击刚才拉到 列表中的数据,对着数据进行右键,找到右键的 “找出是什么改写了这个地点”,也可以用快捷键F6



选择  “找出是什么改写了这个地点” 会弹出提示框,选择 YES ,就会出现一个空白的弹框。
我们使用 “找出是什么改写了这个地点” 目标是看看谁在游戏内里改了 258D3A70 地点的数据,
也就是说我们如今要回到游戏内里,增长或者减少阳光,看看到底是谁改变了 258D3A70 地点的数据。
由于之前我们调试的时候,游戏是暂停的,以是我们如今继续游戏,让阳光发生变化。


我们种了一个斲丧0个阳光的小蘑菇,以是阳光还剩下25,也就是说,阳光没发生变化。
但是我们刚才 CE 的窗口却出现了一条记录,料想步调内里剩余阳光应该是如许计算的:

公式:剩余阳光 = 总阳光 - 斲丧阳光

总阳光:25
斲丧阳光:0

代入公式:剩余阳光 = 25 - 0
即,剩余阳光 = 25 ,得出阳光不发生变化。


按图中所示,选中CE补货的记录,点击 体现反汇编步调。


我们得到了如许一个 反汇编步调窗口。

[Asm] 纯文本查看 复制代码PlantsVsZombies.exe.text+32F86 - 89 B7 78550000        - mov [edi+00005578],esi
在 PlantsVsZombies.exe.text+32F86 这个地点,我们可以看到汇编指令 mov [edi+00005578],esi
通过百度我们得知 汇编指令 mov 是将右边的 值 赋值给左边,也就是将 esi 的值赋值给 edi + 5578 这个地点。
为什么我们肯定 edi + 5578 是地点呢?

  • 因为汇编中,中括号内数据指向的是地点。mov指令是将右边的数据赋值给左边,而执行这个指令就会 增长/减少我们的阳光,以是 edi + 5578 肯定指向的是地点。

我们如今去验证一下,edi + 5578 到底是不是阳光的地点,而esi又是不是 剩余阳光。



我们按图中所示,打开当前这个指令的具体信息,我们这个时候关注两个蓝色的方框中的内容。

  • 第一个方框就是我们上面说的 mov指令 mov [edi+00005578],esi
  • 我们可以知道,EDI = 258CE4F8,ESI = 00000019由于我们说 EDI + 5578 是地点,以是我们要回到游戏中,看看 258CE4F8 + 5578 到底能不能得到 25



我们将 EDI + 5578 手动添加到 CE中,可以看到CE已经计算出来了,数据为25,我们如今已经验证了 EDI +5578 就是地点



已知 ESI = 00000019 ,我们打开计算器输入十六进制的19,刚好得到十进制的25,看来ESI也就是我们剩余阳光

回到最初的题目,我们想要阳光越勇越多,如今我们已经知道了edi + 5578 是阳光的地点,esi是剩余阳光,
那么题目来了,esi是怎么计算出来的呢?
如今回到反汇编步调窗口,鼠标滚轮向上滚动,我们看看在这之前 esi 发生了什么变化?


向上滚动一小段窗口之后,蓝色背景就是我们步调改变的阳光的位置,如今我们要看看这段步调到底发生了什么。

[Asm] 纯文本查看 复制代码PlantsVsZombies.exe.text+32F70 - 56                    - push esiPlantsVsZombies.exe.text+32F71 - 8B B7 78550000        - mov esi,[edi+00005578]PlantsVsZombies.exe.text+32F77 - 8B D7                 - mov edx,ediPlantsVsZombies.exe.text+32F79 - E8 12FFFFFF           - call PlantsVsZombies.exe.text+32E90PlantsVsZombies.exe.text+32F7E - 03 C6                 - add eax,esiPlantsVsZombies.exe.text+32F80 - 3B D8                 - cmp ebx,eaxPlantsVsZombies.exe.text+32F82 - 7F 0C                 - jg PlantsVsZombies.exe.text+32F90PlantsVsZombies.exe.text+32F84 - 2B F3                 - sub esi,ebxPlantsVsZombies.exe.text+32F86 - 89 B7 78550000        - mov [edi+00005578],esi

这段代码翻译一下大概如下:

第一句:
PlantsVsZombies.exe.text+32F70 - 56 - push esi
再次百度,push 是压栈操作,将 esi 压栈,压得什么鬼,我们不知道,暂时不用管,等用的时候再分析 esi是什么

第二句:
PlantsVsZombies.exe.text+32F71 - 8B B7 78550000 - mov esi,[edi+00005578]
再次百度,我们知道 mov 是赋值下令,将 [edi + 00005578] 地点的数据赋值给 esi,也就是说 esi 的数据 = edi +5578 的数据,
刚才我们知道了,edi + 5578 的数据是 25 ,也就是 esi = 25 ,等于 将阳光的总数据 25 存放到了 esi 中

第三句:
PlantsVsZombies.exe.text+32F77 - 8B D7 - mov edx,edi
再次百度, mov 是赋值指令,  edx = edi ,这个时候我们知道 edi 是个地点,以是 edx 也是地点
edi = 258CE4F8 ,也就是 edx = edi = 258CE4F8

第四句:
PlantsVsZombies.exe.text+32F79 - E8 12FFFFFF - call PlantsVsZombies.exe.text+32E90
再次百度,call 是函数调用指令,也就是说,通过 call 可以调用指定地点的 函数
CPU:我如今要进入 PlantsVsZombies.exe.text+32E90 地点的函数
我们因为没有分析 PlantsVsZombies.exe.text+32E90 地点的函数,以是也不知道内里发生了什么,以是也不用管它。

第五句:
PlantsVsZombies.exe.text+32F7E - 03 C6 - add eax,esi
再次百度,add 是加法指令,add eax,esi ,也就是 eax = eax + esi,这里我们知道 esi = 25 ,但是 eax 是多少呢?
我也不知道 eax 是多少,暂时也不用管它。

第六句和第七句:
PlantsVsZombies.exe.text+32F80 - 3B D8 - cmp ebx,eax
PlantsVsZombies.exe.text+32F82 - 7F 0C - jg PlantsVsZombies.exe.text+32F90
再次百度,我们把 cmp 和 jg查询,发现这两可以共同一起用。

cmp比较一下两个寄存器,jg判断寄存器比较效果。

也就是CPU:

  • 我先用 cmp 比较一下 ebx 和 eax 这两个东西,看看你们两个谁大谁小jg :如果 ebx 你比 eax 大,那么我就要让CPU这个大兄弟到 PlantsVsZombies.exe.text+32F90 地点去玩了,ebx 小于 eax 就让他继续执行 sub esi,ebx 以及之后的代码

很显然,我们的步调执行到了 PlantsVsZombies.exe.text+32F86 - 89 B7 78550000 - mov [edi+00005578],esi 这个位置,以是 ebx小于eax

第八句:
PlantsVsZombies.exe.text+32F84 - 2B F3 - sub esi,ebx
再次百度,sub 是减法指令,sub esi,ebx 等于 esi = esi - ebx

第九句:
PlantsVsZombies.exe.text+32F86 - 89 B7 78550000 - mov [edi+00005578],esi
再次百度,mov 是赋值指令,mov [edi+00005578],esi
等于将 esi 的数据 赋值到 edi + 5578 这个地点中。

第八句的 sub esi,ebx 不就是为了得到 esi 的最终数据吗?
换句话来说,我们把 sub 的减法指令换成加法指令,是不是就可以增长阳光呢?



于是我们再次百度,汇编加法指令,百度说 add是加法指令,用法是 add A,B
换成实际操作是 A = A +B

我们百度知道的 sub 是减法指令,用法师 sub A,B
换成实际操作是 A = A - B

也就是说,我们只要把  PlantsVsZombies.exe.text+32F84 - 2B F3 - sub esi,ebx 位置的 sub 换成 add 好像就可以实现 阳光越用越多了。



说干就干,搞起来!! sub 改成 add ,点击确定。


改好之后,原来的 sub 变成了 add。如今我们去试试游戏内里阳光会不会越用越多。


我去游戏内里测试了一下,依次种了两个阳光菇一个土豆。
两个阳光姑 = 25 * 2 = 50
一个大喷菇 = 50 * 1 = 50
莳植之前有 25 点阳光
即 25 + 50 + 50 = 125,也就是我们如今总共的阳光 125 ,到这里我们阳光越用越多效果就实现了。

教程讲的很长,希望你不要觉得我啰嗦,这里把自己逆向分析的过程完全还原出来。

希望和我一样的萌新玩家能够看懂,不明白的地方,我只管再讲细一点。

如果那里讲的不对,希望大佬能够给出指正。

有需要游戏的我后面再想办法分享出来。


来源:http://www.12558.net
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
楼主热帖
回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|12558网页游戏私服论坛 |网站地图

GMT+8, 2024-11-24 10:58 , Processed in 0.093750 second(s), 32 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表