吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 12564|回复: 147
收起左侧

[游戏安全] 植物大战僵尸分析实现僵尸百分百掉落物品

    [复制链接]
钟欣桐 发表于 2021-8-6 01:24
一、逆向思路
  通过物品掉落生成的坐标第一次改写来找出物品掉落CALL。

二、实现工具
  CE、OD

三、实现步骤
  为了方便分析,笔者事先做了一个顶点吸怪工具,当怪物积累到一定程度再放炸弹可以节省不少时间。  
   1.打开游戏,进入关卡,吸怪,等僵尸存够一定数量。
image.png

    2.利用CE将游戏变速为0.1,使用樱桃炸弹干掉僵尸,等银币出现马上暂停游戏。
image.png
image.png

    3.CE搜索未知浮点数->回到游戏->硬币往上抛->搜索变小的数值->硬币往下掉->搜索变大的数值->重复操作->硬币落地->搜索未变动的数值。最后得到的数据只有八个,将最后两个放到数据列表中(第一个有在变动故不放入列表中)。
image.png image.png

    4.修改其中数值,回到游戏,发现银币y坐标发生变化。故知道0x1AA5F3EE8为银币y坐标。
image.png
image.png

    5.对0x1AA5F3EE8进行指针扫描,将最大偏移设为9。以基址排序,找到基址偏移为003296FC的地址(阳光、僵尸血量、坐标偏移均为这个,所以本次逆向以本偏移为准),选择总偏移数最少的,添加到地址列表。
image.png
image.png

     6.打开CE的遍历结构,分析最外层的偏移,找相似数据段。发现0x28和0x100上下文相似。
     最后可知存放银币结构的是一个数组,且每一段数据相隔0xD8.
image.png
image.png
image.png

    7.OD附加,将数组成员选到为y坐标为空的地址,OD对其下硬件写入断点。
image.png image.png

    8.CE调到10倍速,吸怪,等怪物积累到一定数量->樱桃炸弹->断下。
image.png image.png
image.png

    9.Ctrl+F9返回到上一层,分析其上下文,没有发现明显的判断(判断掉落物品以及是否掉落等)。继续Ctrl+F9
image.png image.png

    10.发现疑似CALL内部,存在多个判断。
image.png

    11.向上翻阅,发现同一CALL出现多次,记住参数0x3,0x4。
image.png

    12.在最开始跳出来的CALL下断,重复刷怪操作,观察堆栈,共断下两次,爆两个银币。
image.png
image.png

    13.重复操作,下断然后刷怪,更改堆栈内的值,从[esp+0xc]开始,因为第一个参数是常数4,第二个参数不同。
    将1改成4,观察僵尸掉落物品。
image.png
    断下四次,将[esp+0xc]的值都改成4,发现掉落了四个阳光。
image.png

    14.可知0x40F400是确定掉落物品call,第二个参数为掉落的物品ID,4为阳光的ID。从最早调用此call的地址进行分析。
image.png
    将跳过函数执行的跳转语句全部nop掉。
image.png

    15.回游戏查看效果。(100%爆阳光)
image.png


结尾放一个物品ID表:

1银币 2金币 3钻石 4阳光 5阳光 6大阳光 7过关卡片 8金奖杯 9铲子 A图鉴 B钥匙 C半截花瓶 D花洒 E三明治 F明信片

亲测当第二个参数>=0x10游戏崩溃。

免费评分

参与人数 49威望 +1 吾爱币 +64 热心值 +40 收起 理由
wasyg + 1 + 1 用心讨论,共获提升!
fosi001 + 1 用心讨论,共获提升!
LoveHack + 1 + 1 谢谢@Thanks!
zfgrc + 1 + 1 谢谢@Thanks!
ssc321 + 1 我很赞同!
Pangpangyu + 1 + 1 我很赞同!
vfd0379 + 1 经典游戏,都被玩出花了,哈哈
bav1 + 1 真不错 哈哈
代号3 + 1 + 1 用心讨论,共获提升!
chen0xin0yu + 1 热心回复!
q3239006 + 1 + 1 我很赞同!
wuhuaipojie + 1 谢谢@Thanks!
wjh1 + 1 牛哇
gunxsword + 1 + 1 热心回复!
努力加载中 + 1 + 1 用心讨论,共获提升!
林林林林 + 1 值得尝试哈哈
junjieli + 1 + 1 谢谢@Thanks!
LEFT9527RE + 1 + 1 谢谢@Thanks!
yt13299374849 + 1 + 1 大神牛逼,大赞
xuanmo + 1 + 1 我很赞同!
kel3 + 1 谢谢@Thanks!
richavd + 1 + 1 我很赞同!
sunnyqingju + 1 用心讨论,共获提升!
MODENGXIAN1A + 1 + 1 我很赞同!
eric_wapj + 1 用心讨论,共获提升!
xiong930626 + 1 + 1 谢谢@Thanks!
pikaqiuqiuqiu + 1 + 1 谢谢@Thanks!
ksxxdel + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
GloryRef + 1 谢谢@Thanks!
qj2716115 + 1 + 1 我很赞同!
MassaLee + 1 谢谢@Thanks!
s3nake + 1 用心讨论,共获提升!
梦之泪伤Dream + 1 + 1 用心讨论,共获提升!
520xYZ + 1 + 1 谢谢@Thanks!
jsyzdej + 1 + 1 我很赞同!
vicky526356 + 1 + 1 厉害了,膜拜大神。
yan182 + 1 + 1 谢谢@Thanks!
wujinzhanyi + 1 + 1 谢谢@Thanks!
Noyi + 1 + 1 我很赞同!
涛之雨 + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
yhwdq + 1 我很赞同!
lovely. + 1 谢谢@Thanks!
KYOU + 1 + 1 谢谢@Thanks!
小黄宝 + 1 + 1 谢谢@Thanks!
福仔 + 2 + 1 谢谢@Thanks!
newfire + 1 + 1 谢谢@Thanks!
晚辈小生 + 2 + 1 谢谢@Thanks!
侃遍天下无二人 + 2 + 1 我很赞同!
清炒藕片丶 + 1 + 1 感谢分享,儿时的乐趣之一,哈哈哈

查看全部评分

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

 楼主| 钟欣桐 发表于 2021-8-6 17:01
010xml 发表于 2021-8-6 15:40
僵尸都这样被你玩坏了如果把物品ID换成僵尸或者里面能出现的物品、甚至是植物,是否可行

物品id应该不行,但可以从死亡call下手,将死亡调用的掉落call替换成出怪call就能实现出怪
 楼主| 钟欣桐 发表于 2021-8-6 13:43
侃遍天下无二人 发表于 2021-8-6 11:43
如果故意让游戏掉过关卡片是不是就能直接胜利了

是的,掉落物品ID为7+都能直接过关
 楼主| 钟欣桐 发表于 2021-8-6 13:45
lostmilkyway 发表于 2021-8-6 12:30
你这整的跟CS的透视似的 画线+方框+显血

直接套的CS方框模板做的
头像被屏蔽
冰棍好烫啊 发表于 2021-8-6 10:51
提示: 作者被禁止或删除 内容自动屏蔽
清炒藕片丶 发表于 2021-8-6 10:59
感谢分享,儿时的乐趣之一,哈哈哈
吾爱丫男 发表于 2021-8-6 11:00
支持你成品放出来
nug 发表于 2021-8-6 11:09
原来植物大战僵尸还可以这样子玩,厉害了
Strive8 发表于 2021-8-6 11:22
感谢楼主分享
Nantree 发表于 2021-8-6 11:29
拿走用了
天空の幻像 发表于 2021-8-6 11:34
牛逼啊,,居然还可以这样玩
侃遍天下无二人 发表于 2021-8-6 11:43
如果故意让游戏掉过关卡片是不是就能直接胜利了
地藏王菩萨 发表于 2021-8-6 12:07

感谢楼主分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-21 19:44

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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