-
-
针对魔改unity引擎的il2cpp dump方案il2cpp_class_dumper
-
发表于:
2024-7-27 10:49
37569
-
针对魔改unity引擎的il2cpp dump方案il2cpp_class_dumper
unity游戏的攻防自其诞生之初就已经开始了,现如今已经到了白热化的阶段,il2cpp_class_dumper就是为此而生,但在介绍它之前,让我们先以攻击者的视角来回顾这场攻防对抗。
在很久以前的时候,游戏厂商还没开始重视游戏安全,这时候存储unity app程序集关键符号信息的global-metadata.dat甚至没有任何经过加密就直接放入包体中,这时攻击者只需将包体中的global-metadata.dat和libil2cpp.so提取出来,再使用Il2CppDumper这个项目即可得到unity app程序集的关键符号信息。
但随着游戏厂商开始注重对global-metadata.dat的静态加密,这种方法越来越不适用。
既然直接从包体中提取global-metadata.dat不行,但若是直接在游戏运行时从内存中搜索global-metadata.dat再将其dump下来不就行了吗,以上方法在global-metadata.dat整体加密整体解密的情况下其实是适用的,在这种情况下dump下内存中已经解密的global-metadata.dat再使用Il2CppDumper即可顺利完成符号dump。
但是如果内存中始终没有完整的global-metadata.dat呢,它可能是分块解密再分块加载呢,这种情况实际上是非常常见的,这样的话,单纯的内存dump已经不能够解决问题了,在这种情况下可以直接分析libil2cpp.so中加载global-metadata.dat的逻辑来对原包体中的加密过的global-metadata.dat进行解密还原,但这种方法过于复杂而且因为不同游戏的加密方法不一致很难做到通用,所以攻击者往往都会选择第二种方法动态dump。
正如前面所说,静态dump已经变得十分复杂且不通用了,动态dump便应运而生,即便到了现在这种无视静态加密的动态dump方法也还能dump绝大多数Unity游戏,就这么一种通用且使用方便的dump方法,它的原理其实十分简单,概括起来就是利用libil2cpp.so中的il2cpp框架的关键系统api的导出函数的主动调用来获取unity app的程序集的符号信息。默认情况下很多il2cpp的系统api是直接暴露在libil2cpp.so的导出表当中的,这也是使用Zygisk-Il2CppDumper的前提条件。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2024-7-27 18:05
被安卓逆向test编辑
,原因: 修改标题