浅谈 主动式 Il2cpp Hook

发布于 2020-11-13  2.52k 次阅读


前言

目前高版本的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的类

如何实现

这里就不上项目了, 怕被搞

  1. 首先要有个平台把自己的lib load 到目标程序内, 比如面具模块或者vapp提供的onSoLoad接口
  2. Hook dlopen, 过滤并且保存 libil2cpp.so 加载的 handle
  3. 利用保存的 handle 初始化 il2cpp引擎对外提供的api (如若有加固sleep一会就好了)
  4. 用P大提供的方案去再启动 Il2cpp引擎
  5. dump_type 的位置换成自己的ClassHook进行过滤劫持

除非魔改了unity的启动il2cpp逻辑, 或者对其进行了封装, 对外提供的这些 Il2cppApi 都是可 dlsym 进行获取, 而获取到了这些api, 再启动 Il2cpp引擎 就不是什么难事

打不过就加入 P大总于把文章搓出来了摸鱼仔大胜利!


一位被疯狂压榨的底层工作人员