首页
社区
课程
招聘
9
[原创]游戏YS的global-metadata文件保护分析记录
发表于: 2021-1-31 22:18 29236

[原创]游戏YS的global-metadata文件保护分析记录

2021-1-31 22:18
29236

目录

前言

早在9.15的时候其实就开始尝试分析YS了,不过那个时候没啥动力,后来一次面试说可能用到,就尝试做了一下。

 

以前都是试着搞一下小一点的游戏,第一次对这种有一点名气的厂商下手,心里还是挺打鼓的(典型欺软怕硬)。

 

全程边肝游戏边逆差不多陆陆续续搞了一周吧,对于我这种菜鸡大学生来说花了不少时间。

 

之前搞完丢一边没管了,最近放假加拔智齿导致茶饭不思,有人提到了就又想起来了,还是记录一下分析过程,方便拾遗。

 

以下源自于9.15时的开服版YS,地址等相关信息和现版本不同。

正文

翻一下游戏目录,可以看出是一个登录器加U3D游戏的结构。

 

看到global-metadata.dat文件加UserAssembly.dll,il2cpp模式的没跑了。

 

试着上il2cppdumper,看看能不能行,结果理所应当地直接跑崩了。

 

上IDA,看看做了啥手脚。

 

要说il2cpp模式下的保护,最常见的应该就是在MetadataCache::InitializeMethodMetadata和MetadataCache::Initialize这两个个函数中对gm文件进行解密工作,我们可以通过比对Unity提供的源代码,就可以很快发现一些线索。

 

首先是载入gm文件的部分,根据字符串“global-metadata.dat”搜索定位到疑似MetadataCache::Initialize函数,找到加载的部分,发现在加载完文件之后以字节数组和文件长度为参数调用了一个未知的函数:

 

加载gm文件并解密

 

这种形式很明显了,加载文件之后调用的这个函数大概可以判断为解密函数了,找到这个函数指针看一下,发现它的初始化是来自于一个导出函数,这个函数初始化了三个其它函数地址:

 

security函数地址

 

标记一下这块区域,这三个函数地址应该是我们需要重点关注的对象了(图这里已经确定作用了做好标记了,原始文件没有信息)。

 

三个关键函数

 

接下来去MetadataCache::InitializeMethodMetadata这个函数瞅瞅。

 

这里可以追踪s_GlobalMetadata和s_GlobalMetadataHeader两个指针,这里大部分操作都是围绕着这两个指针进行的。

 

gm文件头指针

 

在熟悉的kIl2CppMetadataUsageStringLiteral分支里发现了猫腻,这个分支会处理字符串相关的东西,返回Il2CppString类型的值。因此这里也常被用来加密字符串:

 

GetStringLiteralFromIndex

 

这里调用的GetStringLiteralFromIndex函数正好就是存在之前标记的那块区域的三个函数之一,可以确定这里也被魔改了,调用了外界的解密函数。

 

那么就剩下最后一个函数了,对那个函数进行交叉引用,发现之前加载gm文件的上级函数有调用过这个函数,跟进去,发现这里才是真正对应MetadataCache::Initialize函数的地方,前面那个函数应该是被摘出来用来加载gm文件的部分。

 

进入这个函数,对着官方的源代码找,确定了这个函数的作用:

 

[招生]科锐逆向工程师培训(2025年3月11日实地,远程教学同时开班, 第52期)!

收藏
免费 9
支持
分享
赞赏记录
参与人
雪币
留言
时间
Youlor
为你点赞!
2024-8-25 04:44
伟叔叔
看雪因你而更加精彩!
2024-6-18 06:23
简单的简单
为你点赞~
2023-5-18 14:27
PLEBFE
为你点赞~
2023-1-15 01:09
解源
为你点赞~
2022-12-17 18:56
abucs
为你点赞~
2022-7-4 15:19
SharpKon
为你点赞~
2022-2-6 18:42
Amun
为你点赞~
2021-2-2 17:58
EX呵呵
为你点赞~
2021-2-1 01:25
打赏 + 10.00雪花
打赏次数 1 雪花 + 10.00
收起 
赞赏  Amun   +10.00 2021/02/02 再接再厉
最新回复 (13)
雪    币: 2510
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
坛里有你更精 ,彩感谢分享
2021-2-1 01:45
1
雪    币: 1109
活跃值: (3626)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
对`global-metadata.dat`文件加密,用于反dump数据结构的做法,效果就跟纸糊的一样;
2021-2-2 18:08
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4
楼主实习考虑腾讯么?
2021-2-26 15:17
0
雪    币: 4942
活跃值: (4852)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
Amun 对`global-metadata.dat`文件加密,用于反dump数据结构的做法,效果就跟纸糊的一样;
欺软怕硬
2021-2-26 17:11
0
雪    币: 1176
活跃值: (1269)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
6

 保护是真的弱 一天搞定(后面俩天空了点时间改成了自动化...)(源码没有 不信你当我吹牛

il2cpp 换来换去都是那几种思路(无论手游端游) hook、 改格式... 不将底层引擎改了 其实都是...

千言万语一句话



大家等我在某公司的游戏驱动xxxxxxxxxxxxkernel。。。 (不排除上线改名


markdown呢 好久没登又改了吗 老了老了

最后于 2021-2-26 17:53 被Tennn编辑 ,原因:
2021-2-26 17:47
0
雪    币: 271
活跃值: (1392)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
Tennn  保护是真的弱 一天搞定(后面俩天空了点时间改成了自动化...)(源码没有 不信你当我吹牛il2cpp 换来换去都是那几种思路( ...
代码混淆强度和运行效率不可兼得啊,毕竟做游戏还是得效率优化为上
2021-3-18 18:36
0
雪    币: 62
活跃值: (367)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
大佬,坐标转换的算法方便分享一下吗?很久之前就把世界坐标弄出来了,结果不会算屏幕的坐标。。
2021-3-18 18:45
0
雪    币:
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
大佬,有办法改模型或者渲染吗?我想把马赛克去掉,它就是从人物底部发射一个射线,与镜头角度计算向量夹角,当朝上看时会加一个马赛克效果。
2021-4-16 00:53
0
雪    币: 62
活跃值: (54)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
大佬 这个混淆 能否破解呢 有没有什么脚本 直接搞定的 
2022-1-11 00:47
0
雪    币: 242
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
11
呜  大佬 我碰见一个unity3d pc游戏  搞不定global-metadata 文件  解不出原始游戏文件       用ida也打不开游戏exe
2022-12-17 18:53
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
12
Tennn  保护是真的弱 一天搞定(后面俩天空了点时间改成了自动化...)(源码没有 不信你当我吹牛il2cpp 换来换去都是那几种思路( ...
大佬,求github地址
2023-6-14 23:47
0
雪    币: 4008
活跃值: (31441)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
感谢分享
2023-6-15 09:19
1
雪    币: 3307
活跃值: (2919)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
Tennn  保护是真的弱 一天搞定(后面俩天空了点时间改成了自动化...)(源码没有 不信你当我吹牛il2cpp 换来换去都是那几种思路( ...
大佬,求github地址,学习
2023-6-15 09:39
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册