江湖漫漫,而我再现[滑稽]

取之三楼,终究要归于三楼,此乃因果[滑稽]安达姬大佬(应该已注销)分享过的一个自更模板,陪伴了我一段时间,在hook学习路程上一次里程碑式的纪念。
为我后面重写整个游戏菜单hook逻辑从lua到汇编提供了一定的基础,最近也刚好做菜单与APP的接口连接,在库存里翻到了这个优秀的模板和里面一些以前玩过的hook思路,所以便把当时对这个模板使用的一个功能实现小思路分享一下
不知道三楼多少人在用,当然这个也不重要,毕竟思路还是更重要(谁让你们不保存的[怒])
在dll中方法大概有几个元素构成,其实跟c命名方式差不多
加载的dll.命名空间.类名.方法名
目前大部分hook,基本不需要记忆dll。只要记好后三个元素即可。
这个模板我觉得有一点点不足就是,好像没有对重载方法的寻址,目前看寻址过滤是限定类,限定方法名,限定方法参数数量
也就是在同一个类中有两个同名方法
比如a(int a)和a(float a)他们唯一区别就是参数类型不同,有一点代码基础的朋友应该能知道
再加上很多接口都是封装好的,改装起来太麻烦。只能含泪重写了一个根据方法参数类型名字进行过滤的方式
所以结合以上一个小小的科普,再看下方的图片大家是不是可以大概了解到一个自更的过程了,找到方法地址后,就是简单的下钩了,剩下的与原有无异,先记忆一下图片内的代码

然后我们进入正题,大家可以看到我们把一个死亡方法的地址hook住了也是dodie,他在满足与isenough位于同一个类的情况下,我们可以通过hookisenough获取到这个类的实例。一样有代码基础的朋友都知道,除了静态方法其实大部分方法调用都需要一个实例
你也可以hook这个类初始化必定会调用到的方法,因为一般来讲我们只需获取一次实例,然后把他进行一次全局的保存。
这里我的写法其实是有点问题的,应该加一个判断instance实例(一般不会遇到空问题)不为空再保存或者说boosinstace为空再保存
拿到这个实例我们可以如何操作呢,那就是下一步了

我们可以直接调用这个类中所有任意的方法,只要你有他们方法的其他参数值,比如直接死亡,加金币等等,注意的是这里规范写法加上一个片段实例是否为空好一点

大概内容便是如此,文字略有差错处还请担待。江湖路漫漫,愿一路同行。他日青云见[滑稽]

发表评论