植物大战僵尸-阳光掉落CALL

说到最前:

逆向和正向相辅相成.做游戏安全分析亦是如此.想要分析一款游戏必须要知道他的功能是如何实现的
这篇文章记录的我分析植物大战僵尸阳光掉落CALL的思路.

植物大战僵尸:链接:https://pan.baidu.com/s/1fg2ZQ-sQTzAjoqdMX6XExg 提取码:46v8

分析前的思考

什么时候会执行掉落阳光的CALL?

猜测是使用的随机数来控制掉落阳光的时间间隔

阳光的CALL是否有参数?

自己也玩过这游戏.知道阳光是有大阳光和小阳光的分别(太阳花/阳光菇).
所以猜测阳光掉落的CALL是有参数的

分析过程

通过CE查找猜想的随机数

阳光掉落后随机数开始递减 减至小于X值时再次执行掉落CALL.
执行一次阳光掉落的CALL就会把原来的随机数覆盖掉.
搜索方法:出现阳光后搜索位置的初始值->疯狂搜索减少的值->直到确定随机数的地址->锁定随机数的值为1(这样肯定小于X值,验证前面的猜测)
找到控制时间的随机数后,查看在哪修改了这个值.OD附加查找到关键的CALL

等待阳光出现之后就搜索未知的初始值(4字节).

扫描后会有很多值,导致临时数据表(我自己给起的名字)显示不出来.

先给再次扫描-减少的数值再次扫描-增加的数值设置一个快捷键(这样我们就不用在CE和游戏之间来回跳转了)

设置好后回到游戏,按快捷键直到出现第二个阳光.这个时候就要搜索增加的数值(一次就行了!!!!)

这样就可以很快的把随机数的地址搜索出来了.把基质拖到固定数据表(这个也是我自己起的名字).把值改成1锁定后回到游戏看看.

这样它就会疯狂的掉落阳光下来.然后我们确定这个就是我们要找的随机数了.右键看是什么改变了这个值,等待新的阳光掉落下来

00413BCBOK,确定了地址OD附加调试它!

通过地址作为突破点,利用OD动态调试

OD附加后 按Ctrl+G或者点击图中按钮跳转到我们前面找的地址处

跳转到产出阳光后随机数重新生成的地址之后发现前面有很多的跳转.从后往前追,看看最近的哪个跳转跳过了这个改变随机数的地址

找到跳转之后我们给他下个断点(F2)执行看看

下了断点之后回到游戏马上就被断了下来.改标志位让跳转不执行看看会不会掉落阳光

如果掉落阳光说明 产出阳光的CALL就在这个跳转里面



把标志改了之后它就不会执行跳转了.运行发现,游戏中出现了阳光.然后现在只需要分析是哪个CALL就行了

然后继续向下看,会看到有几个push的call,猜测就是这个CALL

把push的值分别改一改看看会出现什么情况,来验证这个CALL是不是要找到CALL.

经过修改发现
第一个push:出现的动作 0x0掉落 0x2植物产出跳跃出现 0x4自动收集 0x6从右边跳跃出现 0x8一直在天上(真·阳光)没有动作
第二个push:出现的物品 0x2金币 0x4阳光 0x6超级大阳光 0x8奖杯
第三个push:修改了并没有发生什么.....
第四个push:修改了并没有发生什么.....

那现在已经搜索到了要找的CALL了,四个参数第一个和第二个参数并没有仔细分析出具体作用,第三第四个参数分别代表出现的物品和出现的动作.可以通过修改最后一个参数为0x4达到自动收集阳光的目的.

分析成果:

CALL的地址为:0x0040CB10
第一个参数:0x1D1
第二个参数:0x3c
第三个参数:0x2金币 0x4阳光 0x6超级大阳光 0x8奖杯
第四个参数:0x0掉落 0x2跳跃出现 0x4自动收集 0x6从右边跳跃出现 0x8动作

posted @ 2020-07-16 23:39  LuckyMX  阅读(713)  评论(2编辑  收藏  举报