12558网页游戏私服论坛

 找回密码
 立即注册
游戏开服表 申请开服
游戏名称 游戏描述 开服状态 游戏福利 运营商 游戏链接
攻城掠地-仿官 全新玩法,觉醒武将,觉醒技能 每周新区 经典复古版本,长久稳定 进入游戏
巅峰新版攻 攻城掠地公益服 攻城掠地SF 新兵种、新武将(兵种) 进入游戏
攻城掠地公 散人玩家的天堂 新开 进入游戏
改版攻城掠 上线即可国战PK 稳定新区 全新改版,功能强大 进入游戏
少年江山 高福利高爆率 刚开一秒 江湖水落潜蛟龙 进入游戏
太古封魔录 开服送10亿钻石 福利多多 不用充钱也可升级 进入游戏
神魔之道 签到送元宝 稳定开新区 送豪华签到奖励 进入游戏
神奇三国 统帅三军,招揽名将 免费玩新区 激情国战,征战四方 进入游戏
龙符 三日豪礼领到爽 天天开新区 助你征战无双 进入游戏
王者之师 免费领豪华奖励 免费玩新区 6元送6888元宝 进入游戏
查看: 292|回复: 0

植物大战僵尸之植物种植无CD

[复制链接]

303

主题

303

帖子

616

积分

实习版主

Rank: 7Rank: 7Rank: 7

积分
616
发表于 2020-5-18 22:13:25 | 显示全部楼层 |阅读模式
继续分析植物大战僵尸,第四篇,这次的目标是植物无CD效果。
准备


  • 系统:Windows 10 x64 专业版
  • 软件:植物大战僵尸中文版
  • 工具:CheatEngine v6.8.2、吾爱破解专用版OllyDbg
  • 目标:植物无CD
分析

整理思路。
在游戏中多次实验可以发现,当点击植物卡片时,会触发两种情况,一种是装填完毕,一种是未装填完毕。
猜测游戏中对植物装填状态有一个判断,而且是发生在点击植物卡片之后,所以,目标可以分为两个部分:

  • 寻找植物卡片点击事件处理
  • 寻找植物装填状态判断
进行分析。
1. 寻找植物卡片点击事件
第一个目标,可以将第三篇的植物种植函数来作为切入点。
搜索当前阳光存储地址,找出减少阳光值指令。
单步执行出种植函数。
004121FE  |.  8B4D 0C       mov ecx,[arg.2]                          ;  kernel32.772887DD00412201  |.  8B55 08       mov edx,[arg.1]00412204  |.  51            push ecx00412205  |.  52            push edx00412206  |.  57            push edi00412207  |.  8BCB          mov ecx,ebx00412209  |.  E8 22DBFFFF   call Plants_v.0040FD30                   ;  0x0040FD30-种植植物函数0041220E  |.  E8 0DC3FFFF   call Plants_v.0040E52000412213  |.  5F            pop edi                                  ;  0019FD0000412214  |.  5E            pop esi                                  ;  0019FD0000412215  |.  5B            pop ebx                                  ;  0019FD0000412216  |.  8BE5          mov esp,ebp00412218  |.  5D            pop ebp                                  ;  0019FD0000412219  |.  C2 0C00       retn 0xC向上找到函数头部,下断,就可以发现该函数就是植物卡片点击事件处理函数。
2. 寻找植物装填状态判断
点击植物分为可种植和不可种植两种状态,所以从种植函数开始逆向分析点击事件处理函数。
种植函数上方就是一个判断跳转,简单分析可以猜测其功能是判断本次点击是否为放下植物。
004121F3  |.  8BC7          mov eax,edi004121F5  |.  E8 E6AAFFFF   call Plants_v.0040CCE0                   ;  猜测-判断本次鼠标点击是否为放下植物004121FA  |.  84C0          test al,al004121FC  |.  74 1E         je short Plants_v.0041221C而且可以发现,无论植物是否装填完毕,都会运行到该函数位置。
对该函数的参数与返回结果进行比较分析。
确定无论是否装填完毕,同一植物情况下参数与返回结果都相同。
所以装填状态判断还在后面,继续单步分析。
跳转后出现两个函数,
0041221C  |> \83FA 04       cmp edx,0x4                              ;  Switch (cases 1..F)0041221F  |.  75 28         jnz short Plants_v.0041224900412221  |.  8B4424 10     mov eax,dword ptr ss:[esp+0x10]          ;  Case 4 of switch 0041221C00412225  |.  8B48 04       mov ecx,dword ptr ds:[eax+0x4]00412228  |.  80B9 64010000>cmp byte ptr ds:[ecx+0x164],0x00041222F  |.  0F85 EB000000 jnz Plants_v.0041232000412235  |.  50            push eax00412236  |.  E8 55630700   call Plants_v.00488590                   ;  冷却判断函数0041223B  |.  E8 E0C2FFFF   call Plants_v.0040E52000412240  |.  5F            pop edi                                  ;  0019FD0000412241  |.  5E            pop esi                                  ;  0019FD0000412242  |.  5B            pop ebx                                  ;  0019FD0000412243  |.  8BE5          mov esp,ebp00412245  |.  5D            pop ebp                                  ;  0019FD0000412246  |.  C2 0C00       retn 0xC同样对齐进行参数比较后,发现 0x00488590 函数的参数与返回结果出现了变化。
以向日葵为对象(左为装填完毕,右为装填中)。
参数比较:

返回结果比较:

修改执行后的eax返回值,发现在装填状态下可以种植植物,确定该函数就是装填状态判断函数。
F7进入分析,确定关键跳转位置。
00488684  |.  807D 48 00    cmp byte ptr ss:[ebp+0x48],0x0           ;  冷却判断00488688  |.  0F85 79010000 jnz Plants_v.00488807                    ;  成功跳转猜测 [ebp+0x48] 指向的内存地址为装填状态标志,0x00为装填中,0x01为装填完毕。
在标志上下内存写入断点,运行游戏,确定标志设置指令。
设置为装填中。
00488E71  |> \33C0          xor eax,eax                              ;  Default case of switch 00488E3B00488E73  |.  C645 48 00    mov byte ptr ss:[ebp+0x48],0x0           ;  修改装填标志为装填中00488E77  |.  8945 24       mov [arg.8],eax00488E7A  |.  8945 28       mov [arg.9],eax设置为装填完毕。
00487298  |.  C747 24 00000>mov dword ptr ds:[edi+0x24],0x00048729F  |.  C647 49 00    mov byte ptr ds:[edi+0x49],0x0004872A3  |.  C647 48 01    mov byte ptr ds:[edi+0x48],0x1           ;  设置装填标志为装填完毕004872A7  |.  E8 E4FEFFFF   call Plants_v.00487190004872AC  |>  8B47 3C       mov eax,dword ptr ds:[edi+0x3C]分析完毕,只需要将设置为装填中的指令,修改为设置为装填完毕,即可实现植物无CD的目标。
效果如图:


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

本帖子中包含更多资源

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

x
楼主热帖
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 19:20 , Processed in 0.109375 second(s), 31 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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