首页
社区
课程
招聘
13
[原创]一个Unity游戏保护方案的分析和还原符号信息,偷学对global-metadata保护的思路
发表于: 2020-6-14 00:43 18455

[原创]一个Unity游戏保护方案的分析和还原符号信息,偷学对global-metadata保护的思路

2020-6-14 00:43
18455

前言

我发现,似乎每当我因为手残玩不过游戏的时候,似乎都会遇到倒霉的事情。

 

上一个帖子是因为手残打不过音游,试图作弊走捷径,结果遇到一个超麻烦的dll保护方案

 

这一个帖子是因为手残打不过魂类游戏,同样试图作弊,结果又遇到了一个新的保护方案

 

游戏是新的某帕姓魂类手游,TapTap上就有卖,推荐大家玩一下,质量还是不错的,顺便支持一下国产,反正也不贵,25块钱。
PS:不是广告

 

接下来是正题,来说说我分析这个游戏的时候都遇到了些什么,过于啰嗦请慎入。

初见

首先当然是使用我们万能的GG修改器上去试一下了,结果发现这游戏并没有做内存保护,甚至没有检测GG,直接搜索数值改就成功了,顿时觉得索然无味。

 

但是怎么可以就这么简单地就结束呢?那多无聊,于是我把目标瞄准了游戏存档。

 

到数据目录下查看,发现了感兴趣的文件夹
数据文件

 

一个Save文件夹,一个android文件夹。Save文件夹里面为我们的目标:存档文件,而android文件夹里面是热更新的资源,一个典型的tolua框架。
lua文件

 

首先把lua资源拷贝出来,尝试用AssetStudio读取,发现读取失败。
这里是一个Unity3D读取资源打包资源的一个设置,它是可以设置偏移的。
这里在前面塞了一个tipsworks,这个好像是公司标识?
头部塞入字节

 

写个脚本,把前面的字节去掉就可读取了,直接把lua资源解压出来,尝试用文本编辑器打开:
luajit标识

 

熟悉的LJ标志,这里开发者将所有lua脚本全部编译成了luajit框架的二进制代码。

 

在这里感谢 NightNord 大佬开发的ljd反编译框架以及后续的各位参与维护的大佬,让luajit编译之后的二进制代码依旧可以被还原为可读代码。

 

ljd框架 github地址

 

把所有脚本用ljd框架转为可读的脚本之后,我们可以快速定位到Save相关部分,找到保存相关的代码:
lua保存部分

 

这里可以看到,它将存档路径和存档相关内容传入到了Recorder.write函数里面。也就是说我们找到这个Recorder类就行了。

 

然而事与愿违,这玩意不存在在Lua脚本之中,估计是使用了Wrap类在C#代码中实现了这个类。

 

那么就回到了我们熟悉的节奏了,逆向Unity3D游戏,不就是抱住 Prefare 大佬的大腿当一个脚本小子吗(雾)

global-metadata的保护与还原

在正式开始之前,先简单地说一下global-metadata文件(下称gm文件)的用处。

 

il2cpp技术是将C#转为C++代码的一种技术,然而和C++代码不同,C#之间的函数调用很多时候不是直接跳转,而是需要先通过符号查找函数地址,再进入函数。

 

因此C#在转为C++代码时,需要保留C#中的符号信息,比如函数定义,函数名称,类名称等等。

 

而Il2CppDumper的作用就是将gm文件里的信息提取出来,和il2cpp文件对应起来。

 

直接上Il2CppDumper,结果理所当然的出错了:
gm文件加密

 

从错误提示中可以看到,它没能识别出gm文件,用hex打开,发现连gm文件头的标识都没了:
gm文件Hex

 

正常的gm文件都是以AF 1B B1 FA字节开头的,这里没有,很明显游戏对gm文件进行了加密。

 

把ilbil2cpp.so文件拖入IDA,然后找到加载gm文件的函数,我们把它和原函数代码做一个对比:
gm文件加载函数
加载gm文件源代码

 

可以看到,两者之间非常相似,但是存在一定的区别。

 

对比着分析,大概知道了gm文件的解密流程。

 

首先读入gm文件,并且让一个指针指向它的头部。

 

再读取0x110大小字节数组,进行解密:
解密gm文件头

 

再将之后的内容进行解压缩解密,完毕。

 

在使用gm文件信息的时候,一般是通过gm文件指针加上gm头部结构的偏移值来指向需要的部分。在原函数中,gm文件指针和gm文件头部实际上指向的是同一个地址,因此直接使用一个指针就行了。

 

而在这里,gm文件头部和gm文件分开进行了解密,存在两个不同的位置,因此在使用gm文件信息时,会出现两个指针:
使用gm文件信息

 

[注意]看雪招聘,专注安全领域的专业人才平台!

收藏
免费 13
支持
分享
赞赏记录
参与人
雪币
留言
时间
PLEBFE
为你点赞~
2022-7-30 13:56
shinratensei
为你点赞~
2022-7-15 11:42
SharpKon
为你点赞~
2022-2-6 18:42
windy_ll
为你点赞~
2021-5-5 22:24
JusticeTitan
为你点赞~
2021-4-24 00:46
skinjay
为你点赞~
2021-4-17 12:18
EX呵呵
为你点赞~
2021-2-1 01:25
北笙ぐ
为你点赞~
2020-7-10 21:31
Editor
为你点赞~
2020-6-16 09:37
zhangnew
为你点赞~
2020-6-15 18:15
pansalily
为你点赞~
2020-6-15 10:58
Amun
为你点赞~
2020-6-14 19:16
0x指纹
为你点赞~
2020-6-14 12:00
最新回复 (19)
雪    币: 5048
活跃值: (19305)
能力值: ( LV13,RANK:317 )
在线值:
发帖
回帖
粉丝
2
楼主大二就出去实习了,我到现在还在家里蹲着,我才是当代废柴大学生代表(留下了没技术的眼泪
2020-6-14 12:00
1
雪    币: 1109
活跃值: (3626)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
和 Unity 国内特供版自带 IL2CPP 加密类似,后面会遇到越来越多的。
2020-6-14 19:16
1
雪    币: 2580
活跃值: (13164)
能力值: ( LV12,RANK:312 )
在线值:
发帖
回帖
粉丝
4
不赖
2020-6-15 08:27
0
雪    币: 120
活跃值: (1625)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
很棒!
2020-6-15 09:33
0
雪    币: 35662
活跃值: (64621)
能力值: (RANK:135 )
在线值:
发帖
回帖
粉丝
6
感谢分享~
2020-6-16 09:37
0
雪    币: 1535
活跃值: (695)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
666 赞!
2020-6-16 09:56
0
雪    币: 5449
活跃值: (3243)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
大佬.感谢分享.
2020-6-16 10:00
0
雪    币: 259
活跃值: (283)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
666
2020-6-16 15:40
0
雪    币: 2007
活跃值: (1567)
能力值: ( LV3,RANK:35 )
在线值:
发帖
回帖
粉丝
10
感谢分享
2020-6-17 01:04
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
11
有同类的需求,可以留个联系方式吗
2020-6-17 05:40
0
雪    币: 36
活跃值: (1151)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
12
mark
2020-6-17 11:33
0
雪    币: 0
活跃值: (31)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
流啤
2020-6-23 17:19
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
14
有兴趣来游戏公司的安全组实习嘛?可以私信个联系方式给我,帮你内推呀~
2020-6-23 17:56
0
雪    币: 9
活跃值: (93)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
mark
2020-6-24 22:56
0
雪    币: 29
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
16
大佬
2020-7-16 15:34
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
17
我去试试崩坏3
2020-7-31 09:55
0
雪    币: 28
活跃值: (43)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
你好,大神,已经被加密的ab包怎么解开?我已经得到Assembly-CSharp.dll,求不吝赐教,帮忙找到客户端解密加载ab包的方法,我的qq1756816846
2021-4-18 16:28
0
雪    币: 147
活跃值: (7561)
能力值: ( LV9,RANK:335 )
在线值:
发帖
回帖
粉丝
19
最近在研究il2cpp,不知大哥可发一下初始化gm的那个函数源码及其他文件打包发给我一下,或者提供下载连接也是可以的。qq:543322463
2021-4-24 00:05
0
雪    币: 1322
活跃值: (1085)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
20
这么小,研究这个会掉头发吗??
2021-5-1 23:34
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

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