吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 37099|回复: 69
收起左侧

[游戏安全] 植物大战僵尸植物叠加种植

  [复制链接]
namedlxd 发表于 2019-5-3 21:54
本帖最后由 namedlxd 于 2019-5-6 21:35 编辑

今天我们来研究一下如何在一个位置放多个植物。
首先来思考一下放植物的流程:

选择植物选择地面位置
if ( 位置可以放植物) {   
    扣除阳光   
    放下植物   
    设置植物冷却   
    设置该位置为已使用   
    ......
} else {   
    提示不能放植物

因为没有看过源码,所以猜测的流程大致如此,不难得出,如果我们要在某个位置放多个植物,稍加思考可以从两个地方入手:
  • 在if判断处使它总是跳转到能放植物处代码
  • 修改地面位置为未使用

当然可能这两种方法都是错误的。不妨事,我们先来看看第一种方法。

我们要找到种植物相关的代码,所以我们可以从阳光入手。首先使用CE找到阳光地址。

031251veeub29f97gurlrz.png


接下来右键查看谁改写了这个地址,我们放下一个植物可以看到有一条记录,我们记下0041BA76这个地址:

031318ap1mpl6psq3mxp1b.png


接下来我们就需要用另外一种调试工具了:OllyDbg

我们打开OD,附加进程,可能附加
失败,我们把CE关掉就好了。
打开后ctrl+g,输入0041BA76,跳转到程序开始位置,一次可能跳转不到,再跳一次即可。此时我们看到的就是CPU执行的汇编指令了,我们在这段代码的段首下断点。

030709vllilr865h68pbl6.png


回到游戏中种下一棵植物,OD会断下来,我们看OD的右下角的堆栈信息追溯回去。

030733c4bw2vw7b6vfetv6.png


我们可以把这个call标记为减少阳光call,当然不一定正确。

030757wfffzezrplunzm2c.png


往上翻再次找到函数头部并下断。

我们在能种植物的地方种植物,发现OD会断下来,我们单步调试往下走,标记出来每个跳转是否实现,跳转的标记为1,不跳转的标记为0。

030818zjye0wj2ps0xsz0y.png


然后再在一颗植物上种植物,OD会断下来,我们单步调试往下走,找到不同的跳转。

我们会发下这条指令在空白区域种植物时是实现的,在有植物的地方种植物是未实现的。那么这条指令很可疑,我们把它改为永远跳转试一下。

030838pajeabt9zhalfglm.png


"右键" -> "汇编" 把je(jump equal)改为 jmp(无条件跳转),单击汇编。

030856q8mg2otzoogmzok0.png
030909bhabplwr8m1vzmmc.png



进入到游戏中,就会发现可以叠加种植植物了。

030927s88e84e4tjeeaov3.png


给大家一个CT吧,hook的那一段代码。不一定适用各个版本


链接: https://pan.baidu.com/s/1y25X5iS_y6WMsfZ43NtKhA 提取码: 1ekv 复制这段内容后打开百度网盘手机App,操作更方便哦
PlantsVsZombies植物叠加种植.zip (669 Bytes, 下载次数: 295)

免费评分

参与人数 12威望 +1 吾爱币 +19 热心值 +10 收起 理由
kinlee2012 + 1 + 1 我很赞同!
就往丶 + 1 + 1 用心讨论,共获提升!
canyue514 + 1 我很赞同!
willJ + 1 + 9 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
speakj + 1 + 1 我很赞同!
JudyZiper + 1 + 1 谢谢@Thanks!
a8429427 + 1 + 1 用心讨论,共获提升!
零号零号 + 1 谢谢@Thanks!
icegs + 1 我很赞同!
17863906417 + 1 + 1 我很赞同!
阿提达 + 1 + 1 谢谢@Thanks!
才不是弱受 + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

无瑕黑心肠 发表于 2019-5-4 02:56
本帖最后由 无瑕黑心肠 于 2019-5-4 03:13 编辑

楼主的图片挂了,我尝试修复了一下,以下是我找回的内容:

今天我们来研究一下如何在一个位置放多个植物。
首先来思考一下放植物的流程:

选择植物选择地面位置if ( 位置可以放植物) {    扣除阳光    放下植物    设置植物冷却    设置该位置为已使用    ......} else {    提示不能放植物}
因为没有看过源码,所以猜测的流程大致如此,不难得出,如果我们要在某个位置放多个植物,稍加思考可以从两个地方入手:

  • 在if判断处使它总是跳转到能放植物处代码

  • 修改地面位置为未使用

当然可能这两种方法都是错误的。不妨事,我们先来看看第一种方法。

我们要找到种植物相关的代码,所以我们可以从阳光入手。首先使用CE找到阳光地址。


接下来右键查看谁改写了这个地址,我们放下一个植物可以看到有一条记录,我们记下0041BA76这个地址:


接下来我们就需要用另外一种调试工具了:OllyDbg

我们打开OD,附加进程,可能附加失败,我们把CE关掉就好了。

打开后ctrl+g,输入0041BA76,跳转到程序开始位置,一次可能跳转不到,再跳一次即可。此时我们看到的就是CPU执行的汇编指令了,我们在这段代码的段首下断点。


回到游戏中种下一棵植物,OD会断下来,我们看OD的右下角的堆栈信息追溯回去。


我们可以把这个call标记为减少阳光call,当然不一定正确。


往上翻再次找到函数头部并下断。
我们在能种植物的地方种植物,发现OD会断下来,我们单步调试往下走,标记出来每个跳转是否实现,跳转的标记为1,不跳转的标记为0。


然后再在一颗植物上种植物,OD会断下来,我们单步调试往下走,找到不同的跳转。
我们会发下这条指令在空白区域种植物时是实现的,在有植物的地方种植物是未实现的。那么这条指令很可疑,我们把它改为永远跳转试一下。


"右键" -> "汇编" 把je(jump equal)改为 jmp(无条件跳转),单击汇编。



进入到游戏中,就会发现可以叠加种植植物了。

免费评分

参与人数 5吾爱币 +6 热心值 +4 收起 理由
独行风云 + 1 + 1 谢谢@Thanks!
KaQqi + 1 666666你们都怎么复原的
soyiC + 1 + 1 热心回复!
Honey丶Linux + 2 植物大战僵尸都被师傅们玩坏了
CrazyNut + 2 + 1 谢谢@Thanks!

查看全部评分

boy7928 发表于 2019-5-3 22:24
moveto00 发表于 2019-5-3 22:42
Fxmles 发表于 2019-5-3 22:52
图挂了..
再好的网名 发表于 2019-5-4 00:29
这个厉害了
hongge 发表于 2019-5-4 00:51
图片挂了
ghoob321 发表于 2019-5-4 07:23
这个更厉害。
考夫卡的猫 发表于 2019-5-4 07:39
找回有点厉害啊
15039326231 发表于 2019-5-4 07:54
修改器里啥也有
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-17 02:44

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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