Skip to main content

设置

Obfuz提供了极其丰富的配置选项和灵活的混淆规则配置文件,以支持商业游戏项目的各种复杂的需求。

ObfuzSettings窗口

点击菜单Obfuz/Settings...打开 ObfuzSettings窗口。

全局设置

选项描述
Build Pipeline Settings构建管线相关设置
Assembly Settings混淆程序集相关设置
Obfuscation Pass SettingsObfuscation Pass相关设置
Secret Settings加密相关设置
Encryption VM Settings加密虚拟机相关设置
Garbage Code Generation Settings垃圾代码生成相关设置

Build Pipeline Settings

设置构建管线相关参数。

选项描述
Enable是否开启Obfuz混淆功能。如果被禁用,Obfuz不会再在构建过程中混淆程序集,但不影响开发者主动调用混淆接口对某些程序集进行混淆。
Link Xml Process Callback OrderLinkXmlProcess的callbackOrder。默认值为10000
Obfuscation Process Callback OrderObfuscationProcess的callbackOrder。默认值为10000

Assembly Settings

设置混淆相关程序集。补充文档可见程序集

选项描述
Assembly To Obfuscate需要被混淆的程序集名列表。程序集名不包含.dll,示例:MainAssembly-CSharp。如果想混淆Obfuz.Runtime,请开启下面的Obfuscate Obfuz Runtime选项,不要添加到此列表!
Non Obfuscated But Referenceing Obfuscated Assemblies不需要被混淆,但引用了被混淆的程序集的程序集名列表
Additional Assembly Search Paths以dll形式存在的程序集的相对搜索路径,目前Obfuz会自动搜索工程内的与当前buildTarget兼容的托管dll(含Assets及Packages及Libarary/PackageCache),因此一般不需要配置此项。除非托管dll在Unity工程外,或者说存在多个同名dll需要解决搜索优先级。
Obfuscate Obfuz Runtime是否混淆Obfuz.Runtime程序集。默认为true,强烈建议开启此选项。

Obfuscation Pass Settings

设置开启哪些Obfuscation Pass。支持细化到函数或者字段级别。补充文档见Obfuscation Pass

选项描述
Enabled Passes全局开启的Obfuscation Pass组合。如果Enabled Passes中没有启动某个Pass,即使在Rule Files文件中配置了该Pass也会被忽略
Rule Files配置规则文件,详细文档见Obfuscation Pass

Secret Settings

加密相关全局设置。 补充文档见加密

选项描述
Default Static Secret Key默认的静态密钥。由于初始化时机的限制,AOT程序集一般只能使用静态密钥。如果有AOT程序集被混淆,发布App后请不要修改这个值。
Default Dynamic Secret Key默认的动态密钥。 允许在启动后完成一些事件(如代码热更新)后才加载的密钥。一般只能用于热更新程序集这种动态更新的程序集。 每次热更新前都可以修改这个值。
StaticSecretKeyOutputPath默认静态密钥文档的默认输出目录。
DynamicSecretKeyOutputPath默认动态密钥文档的默认输出目录。
Random Seed随机数种子。该种子会影响所有的混淆和加密操作,建议定期更换。每次发布App或者热更新前都可以修改这个值。

Encryption VM Settings

加密虚拟机(Encryption Virtual Machine)相关设置。 补充文档见加密

选项描述
Code Generation Secret Key生成虚拟机用到的起始随机数密钥兼种子。发布App后请不要修改此值。
Encryption Op Code Count加密虚拟机的指令数。它的值必须是2的幂并且不小于64,默认值为256。建议不要超过1024。发布App后请不要修改值。
Code Output Path生成的加密虚拟机代码的输出路径。默认为Assets/Obfuz/GeneratedEncryptionVirtualMachine.cs。加密虚拟机全局唯一。如果有AOT程序集被混淆,由于初始化时机的原因,加密虚拟机代码必须放到AOT程序集中。如果只对热更新代码混淆,EncryptionVM的代码也可以放到热更新程序集中。

Garbage Code Generator Settings

垃圾代码生成器相关设置。详细文档见垃圾代码生成

选项描述
Code Generation Secret Key生成垃圾代码使用的独立的密钥
Default Task默认的生成任务
Additional Tasks额外可选的生成任务。每个任务与DefaultTask结构完全相同

任务的字段介绍:

选项描述
Code Generation Random Seed生成垃圾代码使用的随机器种子
Class Namespace生成的垃圾代码类的命名空间
Class Name Prefix生成的垃圾代码类的类名前缀。最终生成的类名为{类名前缀}_1{类名前缀}_2等。
Class Count生成的垃圾类的个数
Method Count Per Class垃圾类的函数个数
Field Count Per Class垃圾类的字段个数
Garbage Code Type生成的垃圾类代码类别。不同类别生成的代码有较大差异
Output Path垃圾代码的输出路径

Obfuscation Pass相关设置

目前已经支持多个加密或者混淆Pass,详细文档见Obfuscation Pass

Symbol Obfus Settings

符号混淆用于混淆程序集中类型、字段、函数、Property、event、函数参数的名称。支持通过规则文件非常精细地控制混淆范围和效果。详细文档见符号混淆

选项描述
Debug是否开启Debug模式。禁用Debug模式时将{Name}混淆为$a之类的名字,开启Debug模式后{Name}会被固定混淆为${Name}(如Apple会被混淆为$Apple)以方便跟踪问题。Debug模式忽略所有混淆规则,也忽略符号映射文件symbol-mapping.xml
Obfuscated Name Prefix混淆名的前缀,会为所有生成的混淆符号前加上此前缀。默认为$。尽管配置为空也不影响生成不冲突的混淆名,但加上前缀有助于快速区分正常名与非混淆名
Use Consistent Namespace是否为相同的Namespace生成同一个混淆后的Namespace。默认为true。如果为false,即使同名Namespace都会映射到不同的混淆后的命名空间。对于空Namespace,在混淆后保持为空,而不是为它生成混淆Namespace
Keep Unknown Symbol In Symbol Mapping File是否保留symbol mapping文件中未知的符号映射记录。默认为true。执行热更新混淆时输出的symbol mapping文件中的记录是完整的,但在构建过程中由于Unity的裁剪行为,某些元数据被裁剪后,在symbol mapping文件中找不到,如果将这些记录从symbol mapping文件中移除,会导致构建时生成的symbol mapping不稳定。
Detect Reflection Compatibility是否检测反射代码的兼容性问题。默认为true。如果为true会扫描所有反射操作,如果与符号混淆不兼容会打印错误或者警告。详细文档见符号混淆
Symbol Mapping File混淆符号映射文件,记录了类型、函数、字段等符号原始名和混淆名的映射关系。关闭Debug模式时,混淆符号时会在保证命名不冲突的情况下优先使用symbolMappingFile中记录的混淆名,保证了增量映射的稳定性。另外symbolMappingFile还被DeobfuscateStackTrace工具用于还原混淆后的函数栈日志为原始函数栈日志。为了保证增量混淆的稳定,请将symbolMappingFile加到版本管理
Debug Symbol Mapping File开启Debug模式时使用混淆符号映射文件,记录了类型、函数、字段等符号原始名和混淆名的映射关系。Debug模式下不会从debugSymbolMappingFile文件中读取映射关系,但在混淆完成后会保存映射关系到debugSymbolMappingFile文件。debugSymbolMappingFile也会被DeobfuscateStackTrace工具用于还原混淆后的函数栈日志为原始函数栈日志。
Rule Files混淆规则配置文件。如果为空则对除了特殊符号外所有符号都进行混淆。详细配置规则见符号混淆
Custom Rename Policy Types自定义符号混淆策略类全名列表。因为类型全名不含程序集名,因此要求类型全名在AppDomain所有程序集中唯一。详细配置规则见符号混淆

Const Encrypt Settings

常量加密相关设置。支持通过规则文件非常精细地控制范围和加密效果。补充文档见常量混淆

选项描述
Encryption level加密级别,取值范围为[1, 4],默认为1。 加密级别越高,加密越复杂,解密也会越耗时。
Rule Files加密规则文件列表。可以为0到多个。如果为空会对所有常量进行混淆。详细配置规则见常量混淆

Eval Stack Obfus Settings

执行栈的混淆设置。支持通过规则文件非常精细地控制范围和加密效果。补充文档见执行栈混淆

选项描述
Rule Files加密规则文件列表。可以为0到多个。如果为空会对所有常量进行混淆。详细配置规则见执行栈混淆

Expr Obfus Settings

表达式混淆相关设置。支持通过规则文件非常精细地控制范围和加密效果。补充文档见表达式混淆

选项描述
Rule Files加密规则文件列表。可以为0到多个。如果为空会对所有常量进行混淆。详细配置规则见表达式混淆

Field Encrypt Settings

变量内存加密相关设置。支持通过规则文件非常精细地控制加密范围和效果。补充文档见字段加密

选项描述
Encryption level加密级别,取值范围为[1, 4],默认为1。 加密级别越高,加密越复杂,解密也会越耗时。
Rule Files加密规则文件列表。可以为0到多个。如果为空会对所有常量进行混淆。详细配置规则见字段加密

Call Obfus Settings

函数调用混淆相关设置。 支持通过规则文件非常精细地控制加密范围和效果。补充文档见函数调用混淆

选项描述
Proxy Mode函数调用的混淆方式,详细介绍见函数调用混淆
Encryption level加密级别,取值范围为[1, 4],默认为1。 加密级别越高,加密越复杂,解密也会越耗时。
maxProxyMethodCountPerDispatchMethod每个dispatch函数最多包含多少个proxy函数。默认为100。建议这个值不要超过1000。
obfuscateCallToMethodInMscorlib是否混淆对mscorlib中函数的调用。默认为false。此选项和混淆规则文件中的whitelist配置会同时生效,如果禁用此选项或者说whitelist程序集中包含了mscorlib,都会导致不混淆对mscorlib程序集中函数的调用。
Rule Files加密规则文件列表。可以为0到多个。如果为空会对所有常量进行混淆。详细配置规则见函数调用混淆

Control Flow Obfus Settings

控制流混淆相关设置。 支持通过规则文件非常精细地控制加密范围和效果。补充文档见控制流混淆

选项描述
Min Instruction Count Of Basic Block To Obfuscated被混淆的基本块的最小指令数
Rule Files加密规则文件列表。可以为0到多个。如果为空会对所有常量进行混淆。详细配置规则见函数调用混淆