menu

Unity Mono DLL的破解及保护

​ Mono dll 脚本是 Unity 前期包含现在还有很多游戏在使用的脚本方式,这种脚本可以使用工具(如 dnspy)完全逆向。破解者改包和竞品分析的难度非常低。

​ 很多有安全意识的游戏都会自己修改 mono 源码的 mono_image_open_from_data_with_name 函数,对 DLL 脚本进行加密。不过这种的加密方式缺点比较明显, 会在加载前进行一次性解密,游戏运行过程中,内存中存在解密后完整的 DLL。只要使用现成的工具就可以把 DLL 从内存里面 dump 出来。

11

​ 如上图,使用 GG 修改器,使用 9460301 数值即可把所有的 DLL 脚本内存基址搜索出来。

​ 目前很多手游加固厂商都还是使用这种加固方式。

第二代 DLL 加固,对 DLL 里面的函数进行加密,这种加密方式的优点是,使用的方法才会进行解密,不像整体加密那样,会一下子把完整的 DLL 解密到内存中。

​ 一般游戏运行过程中不会用到所有方法,这样内存中就不会存在一个完整的 DLL。

​ 方法解密的效果对比如下:

​ 原始未加密 dnspy 函数解析结果:

12

​ 函数加密后 dnspy 函数解析报错:

13

​ 第二代 DLL 加固存在的缺点是解析工具还是可以看到函数名及部分函数。于是出现了第三代 DLL 加固。

第三代加固我们称为 DLL 结构虚拟化。对 DLL 的文件结构进行自定义重构,并对文件结构数据进行高强度加密。处理完后,所有的工具都无法再解析出任何数据,对于专业的破解分析人员,要解密出里面的结构数据难度也是非常大。

​ 虚拟化后 dnspy 无法识别 DLL:

14

​ DLL 脚本使用的数据结构跟 windows 下面的可执行文件一样,都是 PE 结构,未 DLL 结构虚拟化时,使用 010Editor 可以解析出正常的 PE 结构。

​ 虚拟化后的 DLL 结构 010 Editor 无法正常解析:

15

​ 第三代 DLL 加密为 FairGuard 独家首创,为手机游戏安全防护提供业界顶级加密方案。

​ FairGuard 是一家专注于游戏加固及反外挂的安全服务商,为手游安全保护提供一站式的解决方案。公司创始人专注于安全领域 10 多年,前网易易盾手游保护负责人,从 0 到 1 主导了易盾手游保护项目。欢迎访问 www.fair-guard.com 了解更多内容。