Unity PC端加密加固方案
标签:Unity、PC、加固、反外挂
时间:2020-11-05

一、背景


    Unity3D 是由 Unity Technologies 开发的一款专业游戏引擎,Unity3D 具有跨平台、高效的开发语言和工具、丰富的插件和极易上手等优势,已逐渐成为使用率最高的游戏引擎。Unity3D 程序由 C# 语言开发,采用了 .NET 框架,可以由 mono 运时行解释执行也可以直接编译本地代码il2cpp,不管何种方式,在极大提升了开发效率的同时也带来了一些安全问题。



二、Unity程序面临的风险


2.1 符号文件的提取风险

     

    对于Backend是il2cpp类型的Unity程序,在global-metadata.dat里面会存储程序所有的类名和方法名

    如果不加密直接暴露出去,攻击者通过iL2CppDumper等工具的提取后并加以利用,这会非常有效的帮助攻击者进行逆向分析。

    

2.2 核心代码逻辑极易被反编译或反汇编


    对于Backend是Mono类型的Unity程序, 用户编写的代码最终是在核心程序集文件 Assembly-CSharp.dll ,它是标准的 .NET 文件格式,附带了方法名、类名、类型定义等丰富的元数据信息,使用 DnSpy 等工具可以轻易地将其反编译和篡改,代码逻辑、类名和方法名等和看C#源码一样方便。

    对于Backend是il2cpp类型的Unity程序,用户编写的代码最终会被编译成本地代码,相对上面的Assembly-CSharp.dll 安全一点,但是对于有经验的逆向分析者来说,只要没进一步加密,通过强大的IDA静态分析工具,虽然没有和阅读源码一样方便,但是对于有效的分析是绰绰有余。


2.3 游戏资源易被提取的风险


    Unity3D 程序在编译打包阶段会通过 Unity 编辑器将资源加包成 Asset Bundle 文件,Asset Bundle 是一种公开的压缩类文件格式,使用 Asset Studio 等工具可以对其解析、展示和提取。



三、FairGuard应对上述风险


3.1    global-metadata.dat文件的内存动态加解密。


3.2    Mono类型的DLL程序集的整体加解密,单独函数方法的加解密


3.3    Asset Bundle 资源文件的加解密




四、加密前后的对比



4.1 AssetBundle资源保护前后对比:


      在使用AssetStudioGUI工具对加密前后的资源分析:


160455709763187657.jpg

  

    加密前后的字节比较:


160455714679419755.png


4.2 global-metadata.dat保护前后对比:


    使用iL2CppDumper工具在对加密前后的dat文件进行符号提取:


160455723160500011.png

160455726642085585.png

   

     加密前后的字节比较:


160455730972598181.png



4.3 DLL保护前后对比


     使用dnSpy工具对加密前后的进行反编译:


160455899195432623.png    

    加密前后的字节比较:


160455781069216500.png


五、FairGuard加固方式


    jar包工具跨平台操作,直接对Windows可执行文件目录一键加固。


160455788169309821.png

结语:

FairGuard专注于游戏加固与反外挂,深耕技术,致力于打造业界顶尖的游戏加固产品。公司开发团队都是来自于网易游戏加固的核心人员,创始人专注于安全领域10多年,前网易游戏加固负责人,从0到1主导了网易游戏保护项目。

        有兴趣的可以加入FairGuard技术交流QQ群:1105310296

        也可以关注FairGuard微信公众号:

微信官方公众号.jpg