首页
社区
课程
招聘
[原创] 通往罗马的道路不止一条-关于Unity游戏Assembly-CSharp加密问题的处理新思路
发表于: 2020-8-21 23:10 14634

[原创] 通往罗马的道路不止一条-关于Unity游戏Assembly-CSharp加密问题的处理新思路

2020-8-21 23:10
14634

众所周知,我们伟大的Unity3D引擎为了跨平台的方便,使用了c#作为其基础编程语言,并且以Mono虚拟机为载体,在各个平台流畅运行

随之而来的,是一些让开发者头疼的问题:由于 cs 的语言特性,其在未混淆,未加密的情况下,基本可以视作"开源语言"(类似于Javascript?),这使得游戏的逻辑变得极其不安全,简单举个例子,如果一个未使用IL2CPP和其他手段加密或编译的unity游戏,你可以在他的 根目录/xxx_Data/Managed/Assembly-CSharp.dll 找到几乎全部的游戏逻辑代码,简单使用dnSpy等工具反编译即可篡改游戏逻辑,甚至可以直接引用该库,进行一些调用游戏SDK的行为

为此,开发者也想尽办法阻止这样的行为,目前最有效的Unity游戏保护方法是通过IL2CPP,在开发时便将cs代码通过IL2CPP层翻译成底层代码,从而防止cs代码逻辑泄露。

也有一些厂商,以mono虚拟机为插手点,魔改mono.dll文件(mono是开源项目),在文件存储时对文件进行加密,在游戏启动时再解密加载

本文将阐述关于后者的一些简单研究

国产3A大作之光,s~j~2 开启三测了,其画质相比第一代,确实令人震惊,也看得出开发公司对此下了很大的功夫

游戏采用前言中第二种保护方式(难道是公司没钱用IL2CPP?)

出于兴趣,我想审查一下国产游戏公司代码的严密程度,并提出必要的修改意见

于是兴高采烈的熟练找到 SSJJ2-WD/battle/21/hallclient_Data/Managed/Assembly-CSharp.dll,拖进dnSpy

结果大失所望

1

看了看二进制文件,连基本的MZ标识都没有,看来是加密了
2

由于之前从来没有过解密这类文件的经验,又无奈本人是逆向白痴,对OD,x64dbg一窍不通

在看雪上搜索碰碰运气找到了狂神说大神的这篇文章
[原创]记录U3D逆向Assembly-CSharp-firstpass.dll解密

其中最重要的便是,mono.dll!mono_image_open_from_data_with_name 的函数被魔改

我按照大神的思路,用IDA打开mono.dll看了一眼,却没看到任何有关解密的相关代码,看来此游戏的解密点不在mono_image_open_from_data_with_name,而在更前面

按理来说,应该开始动态调试往上跟进,奈何本人没文化,一句卧槽走天下,游戏的禁止调试,成为了压倒我的最后一根稻草
3

看来分析解密算法对我来说已经不太可能了,忽然想起以前在github fork过mono的源代码:mono_github,怀着试一试的心情,我翻阅了/mono/metadata/image.c里的mono_image_open_from_data_with_name函数

恍惚间,突然想起一个好点子:

抱着试一试的想法,写了一个简单的链接库,然后用注册表注入

结果如意料之中的那样,成功的dump出了原始dll文件,看到MZ标志的那一刻,通往罗马的道路,又多了一条

4


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

最后于 2020-8-21 23:12 被renbohan编辑 ,原因:
收藏
免费 7
支持
分享
最新回复 (19)
雪    币: 6314
活跃值: (952)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
这个已经是老套路了
2020-8-22 22:02
0
雪    币: 458
活跃值: (1882)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
二娃 这个已经是老套路了
哦哦,好吧,只是第一次自己研究出来比较兴奋 QAQ
2020-8-22 22:09
0
雪    币: 1293
活跃值: (606)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
天翼3G就是快。
2020-8-23 11:19
1
雪    币: 83
活跃值: (1087)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
5
那游戏网游吗 好像是单机游戏 
2020-8-24 10:19
0
雪    币: 123
活跃值: (316)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
解密应该在mono_image_open_from_data_with_name里面啊,奇怪了
2020-8-24 11:55
0
雪    币: 1715
活跃值: (1540)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
taizhong 解密应该在mono_image_open_from_data_with_name里面啊,奇怪了
调用原函数前dump下来是解密的,那么解密怎么会在原函数里面,你想是不是。
2020-8-25 14:20
0
雪    币: 1037
活跃值: (1780)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
我还以为发现新大陆
2020-8-25 15:45
0
雪    币: 123
活跃值: (316)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
hanhaochi 调用原函数前dump下来是解密的,那么解密怎么会在原函数里面,你想是不是。
mono_image_open_from_data_with_name函数内解密的好处是,如果mono 注入代码,不光要dump出完整dll,还需要逆出加密算法
函数外部解密,防止注入的难度降低了
号称要制作3A大作游戏的开发团队,就这?
2020-8-28 03:44
0
雪    币: 123
活跃值: (316)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
劫持mono.dll岂不是更简单?
2020-8-29 10:58
0
雪    币: 12848
活跃值: (9142)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
11
taizhong mono_image_open_from_data_with_name函数内解密的好处是,如果mono 注入代码,不光要dump出完整dll,还需要逆出加密算法 函数外部解密,防止注入的难度降低了 ...
律师函警告
2020-8-29 15:31
0
雪    币: 458
活跃值: (1882)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
12
taizhong mono_image_open_from_data_with_name函数内解密的好处是,如果mono 注入代码,不光要dump出完整dll,还需要逆出加密算法 函数外部解密,防止注入的难度降低了 ...
不过,现在的注入器一般不是调用这个with_name的函数注入
2020-8-29 22:24
0
雪    币: 123
活跃值: (316)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
renbohan 不过,现在的注入器一般不是调用这个with_name的函数注入
哪用哪个?
2020-8-29 22:51
0
雪    币: 123
活跃值: (316)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
hzqst 律师函警告
4亿开发经费里面,包含了请律师费用?
2020-8-29 22:54
0
雪    币: 458
活跃值: (1882)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
15
killpy 那游戏网游吗 好像是单机游戏
生屎菊鸡
2020-9-5 23:25
0
雪    币: 3836
活跃值: (4142)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
5h3r10(l{ 天翼3G就是快。[em_85]
哈哈哈哈
2020-10-22 11:05
0
雪    币: 3013
活跃值: (981)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
6的~学习下
2020-12-5 23:51
0
雪    币: 185
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
18
现在这个方法已经不行了,Assembly-CSharp.dll现在只有1k大小,可以分享一下之前成功的吗
2021-4-23 19:01
0
雪    币: 123
活跃值: (316)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
吾无法无天 现在这个方法已经不行了,Assembly-CSharp.dll现在只有1k大小[em_78],可以分享一下之前成功的吗[em_86]
律师函警告
2021-4-24 22:46
0
雪    币: 458
活跃值: (1882)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
20
吾无法无天 现在这个方法已经不行了,Assembly-CSharp.dll现在只有1k大小[em_78],可以分享一下之前成功的吗[em_86]
[原创]关于Unity游戏Mono注入型外挂的一个检测思路
https://bbs.pediy.com/thread-264444.htm
2021-4-29 10:54
0
游客
登录 | 注册 方可回帖
返回
//