-
-
[原创]植物大战僵尸玉米大炮自动轰炸与自动拾取阳光金币
-
发表于:
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
被凌哥编辑
,原因: