前言
目前高版本的Unity编译器都对il2cppclass初始化进行了优化, 去年写的那篇 被动式Hook 文章的方式适用性不太够了, 加上现在编译器会对某些类进行抹除namespace, 导致被动式无法主动出击获取
因此诞生了主动式Hook的想法, 但是由于个人原因一直没有空进行研究, 也没那个技术去研究il2cpp引擎~(本人不会unity)~, 不过今年6, 7月份P大提供了il2cpp引擎启动的 方案, 感谢P大!
主动式 与 被动式 区别
被动式Hook的核心是利用 il2cpp_class_from_name
api进行对class过滤劫持, 一旦遇到嵌套类(子类) 或者 不走这个api 进行初始化的class, 就毫无办法了, 比较鸡肋
而主动式Hook, 利用Il2cpp引擎重新启动, 通过完整的API可以强行获取所有class, 包括被抹除了namespace的类
如何实现
这里就不上项目了, 怕被搞
- 首先要有个平台把自己的lib load 到目标程序内, 比如面具模块或者vapp提供的onSoLoad接口
- Hook dlopen, 过滤并且保存
libil2cpp.so
加载的handle
- 利用保存的
handle
初始化il2cpp引擎对外提供的api
(如若有加固sleep一会就好了) - 用P大提供的方案去再启动
Il2cpp引擎
- 在
dump_type
的位置换成自己的ClassHook进行过滤劫持
除非魔改了unity的启动il2cpp逻辑, 或者对其进行了封装, 对外提供的这些 Il2cppApi
都是可 dlsym
进行获取, 而获取到了这些api, 再启动 Il2cpp引擎
就不是什么难事
打不过就加入 P大总于把文章搓出来了摸鱼仔大胜利!
Comments | 5 条评论
博主 CRY
本质上还是修改了代码,应该能做到不修改代码,直接修改存储函数指针的位置
博主 Himeko
@CRY 调用il2cpp vm的api, 哪里算改代码?
博主 CRY
该评论为私密评论
博主 Himeko
@CRY tg联系我
博主 CRY
该评论为私密评论