Unity3D 是由 Unity Technologies 开发的一款专业游戏引擎,可以让开发者轻松创建三维视频游戏、建筑可视化、实时三维动画等工具和应用,广泛应用于游戏、汽车、运输与制造、电影与动画、建筑、工程与施工等领域。
Unity3D 具有跨平台、高效的开发语言和工具、丰富的插件和极易上手等优势,已逐渐成为使用率最高的游戏引擎。
Unity3D 程序由 C# 语言开发,采用了 .NET 框架并由 mono 运行时解释执行,在极大提升了开发效率的同时也带来了一些安全问题。
代码逻辑极易被反编译和篡改
Unity3D 程序的核心程序集文件 Assembly-CSharp.dll 是标准的 .NET 文件格式,附带了方法名、类名、类型定义等丰富的元数据信息,使用 DnSpy 等工具可以轻易地将其反编译和篡改,代码逻辑、类名和方法名等一览无余。
代码逻辑一但被反编译,很容易滋生各种类型的外挂,破坏游戏平衡,如果代码逻辑中存在漏洞,也容易被挖掘和利用,可能对开发商造成无法预料的损失。
资源易提取
Unity3D 程序在编译打包阶段会通过 Unity 编辑器将资源打包成 Asset Bundle 文件,Asset Bundle 是一种公开的压缩类文件格式,使用 Asset Studio 等工具可以对其解析、展示和提取。
Unity3D 程序中有些骨骼模型和场景等资源一般是开发商耗费大量的精力开发的,如果不保护,很容易被窃取进行二次开发。对于网络游戏,还可以将一些场景资源的材质属性改为透明,实现透视效果。
Virbox Protector 的 Unity3D 保护方案
程序集加密
程序集 DLL 的加密,最早存在一些简单的加解密方式,如直接加密整个 DLL,运行时通过 hook mono 中的加载函数进行解密,这种加密方式过于简单,解密后在内存中可以被 Dump 出明文,安全性低。
Virbox Protector 通过加密程序集中的每个方法,每次仅有一个方法被解密,并且解密时解密到随机的内存地址,保证加密后的程序不可被 Dump,再通过独特的二进制指令块编译链接技术,将关键的代码逻辑动态地进行混淆或虚拟化保护,保证其安全性。
加密前
加密后
Asset Bundle 资源加密
Virbox Protector 提供了资源加密的功能,支持 Android apk 的分块读取和其它平台的读取操作,通过保护工具可一键完成加密。
反调试
Virbox Protector 提供了反调试的功能,在运行时检测调试器,发现恶意调试行为时清场退出,防止动态调试保护后的程序。
Virbox Protector 的优势
- 多平台支持
支持 Windows、Linux、macOS、Android 系统。
- 操作简单,一键完成保护
无需对编译环境做任何修改,三分钟内完成保护。
- 保护过程自动化,可离线部署
调整保护选项后生成配置文件,通过命令行自动完成保护,保护工具可以离线使用。
- 性能影响小
保护后的程序运行时性能影响很小,不影响用户体验。
- 安全性高
高强度的加密方案,再通过二进制指令块混淆虚拟化技术加持,大辐提升安全强度。