首页
社区
课程
招聘
[原创]植物大战僵尸玉米大炮自动轰炸与自动拾取阳光金币
发表于: 2021-9-24 18:16 32282

[原创]植物大战僵尸玉米大炮自动轰炸与自动拾取阳光金币

2021-9-24 18:16
32282

经过长时间的逆向学习,老师为了增加我们对逆向分析的能力,同时也保证学习的趣味性,于是让我们研究植物大战僵尸这款经典游戏。

布置人:武汉科锐钱林松老师
作者:Cr39班 凌哥

1、首先从CD入手,因为大炮发射后有一个重置大炮的功能,而他重置大炮的地方一定有对大炮是否可以发射的相关代码。而我们知道植物大战僵尸的CD都是由0向上增长到一定值时重置为0的特性。通过此特性找到大炮CD。

2、通过一番寻找后,发现大炮的CD与卡片的CD计算方式不同,所以使用未知的初始值,变动的值和未变动的值进行搜索,结果很快就找到了玉米大炮的CD,通过将CD改为0即可重新填充大炮。

3、那么该CD值一定为玉米大炮对象的一个属性,有了这个猜测所以向上跟踪他的基地址。

1、那么换个思路,他的CD结束后一定会操作一个类似于flag的变量来保存大炮的状态,当大炮发射的时候会改变这个状态,那么同理我们使用未知的初始值,变动的值和未变动的值进行搜索,也很方便的找到了玉米大炮的flag,经过测试,当值为35的时候为爆炸状态,36的时候为装填状态,37的时候为装填完毕,38的状态为发射。
图片描述
2、那么这个时候我们附加X64dbg,去跟踪一下大炮的发射CALL。

3、通过硬件写入断点,我们很快的就跟踪到了玉米大炮发射的时候改变标志位的位置。
图片描述
4、那么通过栈回溯,就找到了玉米大炮发射call的位置了
图片描述
玉米大炮发射call偏移: 0x66D50

5、通过指针扫描得出地图植物的基地址。
图片描述

1、通过上述分析我们找到了自动发射炮弹的call,而我们发现他貌似有一个内部循环调用call类似于消息机制一样,当满足了什么条件就会自动的进行相对应的操作,所以通过分析自动发射的call我们发现他给了几处内存地址进行了赋值。通过观察这些内存地址我们发现了一些猫腻。经过测试满足了自动开炮的功能。
图片描述
2、自动发射炮弹的结论是当发射动画cd大于2的时候,则玉米大炮会对x和y所指定的位置进行轰炸。

1、我们知道阳光是点击后有一个动画,这个动画结束后将会阳光自增。那么先找到阳光数据后下写入断点通过回溯寻址拾取阳光的call。
图片描述
2、现在已经断下来了,那么开始向上回溯。我们找到了一处call当有阳光来的时候他会一直断下来,通过观察可以分析得出他的eax是阳光的指针,有几个阳光他就会有几次循环。那么可以判断他的阳光收集应该在这个call里面,所以我们进入这个call对里面的所有call下断,如果没有点击阳光断下来的call就不是我们需要的,点击后断下来的可能就是关键call了。
图片描述
3、经过逐步筛选只剩几个call还有断点,但是点击阳光来的call只有下图这一个,所以断定他就是我们的关键call。这里我们通过分析已经得知他是收集阳光的call并且在阳光的内部循环里,而他的循环本身就含有了阳光的指针所以,我们找找相关的跳转指令那里强制跳过了这个call我们改掉让他一直执行这个call有了阳光自动收入,查看是否成功。
图片描述
4、通过分析上面有一处jne选择性执行还是不执行这个call,所以我们将他改为jmp测试一下。

5、经过测试,此处也可以自动收集金币,所以目前已经完成了我们需要的功能了,那么就剩代码编写,完成我们上述手动操作。

 

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2021-9-26 13:55 被凌哥编辑 ,原因:
上传的附件:
收藏
免费 11
支持
分享
最新回复 (3)
雪    币: 225
活跃值: (118)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
谢谢分享,学习大佬的思路
2021-9-30 16:12
0
雪    币: 20
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
学习学习学习
2021-10-13 09:42
0
雪    币: 14975
活跃值: (4095)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
表哥,是哪个版本的plantzombies,对照学习下,提供下链接就好了
2021-10-13 09:58
0
游客
登录 | 注册 方可回帖
返回
//