首页
社区
课程
招聘
针对魔改unity引擎的il2cpp dump方案il2cpp_class_dumper
发表于: 2024-7-27 10:49 37569

针对魔改unity引擎的il2cpp dump方案il2cpp_class_dumper

2024-7-27 10:49
37569

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编辑 ,原因: 修改标题
收藏
免费 3
支持
分享
最新回复 (12)
雪    币: 10
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
test大佬支持一下
2024-7-27 11:49
0
雪    币: 650
活跃值: (4237)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
思路不错 支持一下
2024-7-29 12:01
0
雪    币: 261
活跃值: (3288)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
目前该方法只能dump游戏程序集中的方法信息:是系统方法还是游戏写的那些方法
2024-7-29 15:45
0
雪    币: 489
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
5
gtict 目前该方法只能dump游戏程序集中的方法信息:是系统方法还是游戏写的那些方法
所有已经初始化过的类的方法信息都能dump,跟系统方法和自定义方法无关
2024-7-29 18:45
0
雪    币: 2146
活跃值: (1869)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
6
遇到打乱了结构的就不太行了,像某二游那样每个版本都把il2cpp结构打乱一遍,有什么好的办法呢
2024-7-30 00:07
0
雪    币: 489
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
7
TubituX 遇到打乱了结构的就不太行了,像某二游那样每个版本都把il2cpp结构打乱一遍,有什么好的办法呢
其实运行时dump几乎不需要结构体信息,像我这个和Zygisk-Il2CppDumper一样都是只需要methodinfo的方法指针偏移没有改动就行了,这个地方其实连米X游的魔改引擎都没有改动,其他符号信息的dump都是通过il2cpp api的主动调用来获得的,就无视结构体改变了
2024-7-30 09:29
0
雪    币: 2146
活跃值: (1869)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
8
安卓逆向test 其实运行时dump几乎不需要结构体信息,像我这个和Zygisk-Il2CppDumper一样都是只需要methodinfo的方法指针偏移没有改动就行了,这个地方其实连米X游的魔改引擎都没有改动,其他符 ...
MethodInfo我记得也是有打乱的,不过这个修起来也容易
2024-7-30 10:36
0
雪    币: 1407
活跃值: (3014)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
感谢分享
2024-7-30 16:51
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
10
分析zzz的时候发现只能dump每个类的ctor方法,楼主有解决方法吗?
2024-8-6 18:15
0
雪    币: 489
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
11
wx_aa_775 分析zzz的时候发现只能dump每个类的ctor方法,楼主有解决方法吗?
这个其实应该是il2cpp_class_get_methods这个api的位置没对,因为zzz的那个so其实是有特殊的处理,ida识别有问题
2024-8-8 23:38
0
雪    币: 1423
活跃值: (1583)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
早起用的框架就是大概几个接口, 然而抓的函数少太多了, 没调用就抓不到, 分析不太方便
2024-8-17 16:18
0
雪    币: 34
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
13

顶一下

最后于 2024-9-6 10:52 被zouzhiqiang编辑 ,原因:
2024-8-19 15:14
0
游客
登录 | 注册 方可回帖
返回
//