Unity Mono 是 Unity 引擎默认的脚本运行时环境,由跨平台的开源 .NET 框架实现,它允许开发者使用 C# 等编程语言编写游戏逻辑,凭借简单易用的开发环境和高效的脚本编译速度,得到了众多游戏的青睐。
在 Mono 模式下,游戏 C# 代码被编译为 IL (中间代码) 并生成 DLL 文件,然后将 DLL 打进游戏包文件。
但由于 IL 非常容易被反编译软件分析逆向,所以在无保护情况下,破解者改包和竞品分析的难度非常低,游戏的安全性极差,如何有效进行加密成了行业痛点。
Mono模式下脚本的编译运行
本文将通过案例演示分析反编译工具dnspy的特点,并分析游戏该如何应对逆向及破解问题,提出有效地解决方案。
dnSpy 是一个免费开源、跨平台的 .NET 调试器和反编译器,可以在无源码的情况下,进行代码调试和修改。利用 IL 和 C# 等多种语言的支持,dnSpy 能够将 .NET程序 的二进制文件反编译成源代码。
dnspy函数解析结果
一些游戏为了防止被逆向分析,会采用DLL函数加密,这种加密方式的优点在于只有使用方法才会进行解密,而一般游戏运行过程中不会用到所有方法,这样内存中就不会存在一个完整的DLL。
函数加密后dnspy函数解析报错
但DLL加固方案仍有缺点,使用解析工具可以看到函数名及部分函数,容易被破解者分析利用,存在一定的安全隐患。
想要保护游戏代码,最重要的是不给破解者留下线索。为此,FairGuard研发了「 DLL结构虚拟化 」功能:
可对DLL的文件结构进行自定义重构,并对文件结构数据进行高强度加密。处理完后,所有的工具都无法再解析出任何数据,哪怕是专业的破解分析人员,要解密出里面的结构数据难度也是非常大。
虚拟化后的DLL结构010 Editor无法正常解析
此外,FairGuard游戏加固方案还提供global-metadata.dat / libil2cpp.so 等文件加密功能,以及多端通用的 Unity Assetbundle 资源加密方案。
为了保证游戏防护的整体性,我们的方案还包含:反外挂、防破解、反变速、反调试等多项功能,有效解决游戏面临的各项安全问题。
反外挂功能
针对游戏面临的内存修改风险,FairGuard研发了行为检测方案,可对内存修改行为进行精准识别,通杀各类修改器外挂及其变种,做到有效防护。
防破解功能
FairGuard独家无API签名校验技术,对游戏的引擎与代码进行深度加密,并对游戏包签名和文件完整性进行多重校验,防止游戏被植入恶意模块、剔除广告等。
变速闪退功能
采用更加底层的检测手段,经大量实机测试,可无视任何变速器及其变种,一旦检测到变速情况,将立即闪退游戏。
反调试功能
防止外挂作者对游戏进行调试,阻止对游戏的静态或动态分析,一旦发现立即闪退。