项目概述
Obfuz 是一款专为 Unity 开发者设计的开源代码混淆与加固工具,旨在满足商业化游戏项目对代码安全性的高要求。通过混淆和加固 Unity 项目中的 C# 代码,Obfuz 可以有效防止逆向工程、代码篡改和非法复制,保护开发者的知识产权和商业利益。
应用场景
它特别适用于需要高度安全性的游戏开发场景,如在线游戏、付费游戏、以及包含敏感逻辑或算法的游戏项目。
功能模块
Obfuz 提供了丰富的功能模块,以满足不同场景下的代码保护需求:
符号混淆:支持丰富的配置规则和增量混淆,灵活高效地保护代码符号(如类名、方法名、字段名等)。
常量混淆:混淆 int、long、float、double、string 等常量,防止逆向工程者通过常量值推断代码逻辑。
变量内存加密:加密内存中的变量,提升运行时安全性,防止内存窥探和篡改。
函数调用混淆:打乱函数调用结构,增加破解难度,使逆向工程者难以理解代码执行流程。
随机加密虚拟机:生成随机化虚拟机,有效抵御反编译和破解工具,提供更高层次的保护。
静态与动态解密:结合静态和动态解密技术,防止离线静态分析,确保代码在运行时的安全性。
深度 Unity 集成:与 Unity 工作流无缝衔接,配置简单即可使用,无需复杂设置。
热更新支持:全面兼容 HybridCLR、xLua、Puerts 等热更新框架,确保动态代码更新顺畅无阻。
功能特点
开源免费:基于 MIT 协议,免费使用和修改,无需担心版权问题。
企业级保护:提供媲美商业工具的强大混淆功能,满足商业化游戏项目的高安全性需求。
专为 Unity 设计:深度集成 Unity 生态,简化开发流程,提升开发效率。
热更新优化:为现代 Unity 项目中的热更新方案提供优异支持,确保动态代码的安全性。
添加代码
在Assets目录下创建Bootstrap.cs代码文件,文件内容如下:
using Obfuz;using Obfuz.EncryptionVM;using System.Collections;using System.Collections.Generic;using UnityEngine;public class Bootstrap : MonoBehaviour{ // 初始化EncryptionService后被混淆的代码才能正常运行, // 因此尽可能地早地初始化它。 [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterAssembliesLoaded)] private static void SetUpStaticSecretKey() { Debug.Log("SetUpStaticSecret begin"); EncryptionService<defaultstaticencryptionscope>.Encryptor = new GeneratedEncryptionVirtualMachine(Resources.Load<textasset>("Obfuz/defaultStaticSecretKey").bytes); Debug.Log("SetUpStaticSecret end"); } int Add(int a, int b) { return a + b + 1; } // Start is called before the first frame update void Start() { Debug.Log("Hello, Obfuz"); int a = Add(10, 20); Debug.Log($"a = {a}"); }}查看混淆后的Assembly-CSharp程序集
使用ILSpy打开Library/Obfuz/{buildTarget}/ObfuscatedAssemblies/Assembly-CSharp.dll, 发现程序集确实被混淆了。
混淆后的Boostrap类代码变成如下:
using $a;using $A;using UnityEngine;public class Bootstrap : MonoBehaviour{ [RuntimeInitializeOnLoadMethod(/*Could not decode attribute arguments.*/)] private static void SetUpStaticSecretKey() { Debug.Log((object)"SetUpStaticSecret begin"); $A.$C<$c>.$L = new global::$a.$A(Resources.Load<textasset>("Obfuz/defaultStaticSecretKey").bytes); Debug.Log((object)"SetUpStaticSecret end"); } private int $a(int 1, int 1) { return 1 + 1 + $A.$C<$c>.$I($d.$A, 0, 14, -2097817526); } private void Start() { $e.$a($A.$C<$c>.$K($d.$A, 4, 12, 169, 534648667), $A.$C<$c>.$d(1718597184, 154, 2114032877)); int num = $e.$A(this, $A.$C<$c>.$I($d.$A, 16, 27, -201418147), $A.$C<$c>.$I($d.$A, 20, 153, -875938825), $A.$C<$c>.$d(1757957431, 242, 760404455)); $e.$a(string.Format($A.$C<$c>.$K($d.$A, 24, 7, 10, 1708888075), num), $A.$C<$c>.$d(1718597184, 154, 2114032877)); }}源码地址
https://gitee.com/focus-creative-games/obfuz
</textasset></textasset></defaultstaticencryptionscope>
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!