大佬勿喷,经验分享,适用于小白!
做过LGL菜单的朋友应该都知道同类间的函数调用和字段读写,我也就不多说了。
1.这里我直接上例子。
A–通过字段获取其他类对象
我们在dump.cs中找到玩家类和敌人类的一些函数和字段。其中Player类中有private Enemy target; private Enemy nearest两个字段; 前面的Enemy表示这个字段存的是敌人类的对象,target表示目标,也就是我们瞄准的敌人,nearest表示最近的,也就是离我们最近的敌人。
欲实现:当玩家受到致死伤害时随机恢复受一些血量,并使攻击者(最近的敌人)和当前攻击对象死亡(即调用敌人类的Die函数或写敌人类的死亡字段).
具体过程。
B–通过函数参数获取其他类对象
C–通过函数返回值获取类对象
如图3,我们找到了一个关于解锁服装的字段,但该类所处类没有可hook的函数,那看来我们只能通过其他类来获取该类对象,并读写该类字段了。
想一想,该字段决定是否会解锁服装,那服装未解锁和解锁后的图标一定不同,我们看到服装图标状态存在一个初始化过程,用来判断每件服装的解锁状态。
搜索item_equip_modelData看看那些地方出现了该类对象,我找到了如下内容。
Hook方法
D–异类调用对象获取通法
某个类的函数难免会调用另一个类函数,我们只需看看该类函数如何获取另一个类的对象,并尝试还原即可,这里使用到反汇编工具IDA Pro。
比如在Bullet类获取Enemy类的对象,那么bullet类的函数里难免会调用enemy类的函数,我们只需看看是怎么获取enemy类对象的,并尝试还原获取过程。
E–同类间的对象判断及转换
有些类是玩家和敌人公用的,你可能遇到过实现秒杀功能时敌人也秒杀自己,这里我们就需要对对象做出判断,区分敌人和自己(前人已有教程,这里我就不介绍如何判断了)。下面以一个不讲武德的反伤功能为例,介绍转换对象。