一、Assembly - Settings
1. 核心Unity程序集(Assembly-CSharp)
- Obfuscate Assembly-CSharp: 开启
- 这是Unity的核心程序集,所有没有存储在程序集定义文件(assembly definition file)中的代码都会被存储在这里。大多数情况下,你会希望开启这个选项以混淆该程序集。
2. 插件程序集(Assembly-CSharp-firstpass)
- Obfuscate Assembly-CSharp-firstpass: 关闭
- 这是第二个核心Unity程序集,其中存储了“Plugins”目录中的所有代码文件。大多数情况下,你也会希望混淆这个程序集。
3. 混淆 ‘Assets’ 目录中的程序集定义文件
- Obfuscate Assembly Definition Files in ‘Assets’: 关闭
- 开启此选项将搜索“Assets”目录中的所有程序集定义文件,并混淆相应的程序集。
4. 混淆 ‘Packages’ 目录中的程序集定义文件
- Obfuscate Assembly Definition Files in ‘Packages’: 关闭
- 开启此选项将搜索“Packages”目录中的程序集定义文件,并混淆相应的程序集。请注意,这里可能也包含Unity核心程序集,因此请小心使用此功能。这是一个测试功能。
5. 混淆外部预编译程序集
- Obfuscate external assemblies:
在此处输入你想要混淆的外部预编译程序集的名称,例如“MvAssembly.dll”,或输入完整路径,例如“C:/[MyGame]/MyAssembly.dll”。
你可以使用“Add Line”来添加新的程序集路径,也可以使用“Remove Line”来移除现有的路径。
如果你在混淆过程中收到错误信息,比如“Assembly XYZ could not be resolved!”、“Assembly XYZ could not be found!”或类似的错误,可以通过以下方式解决:
找到该程序集的目录路径。通常,这些程序集可以在你的项目的“Assets”或“Packages”目录中找到。
如果例如一个名为“GameAnalytics”的程序集未被找到,并且它的位置是“Assets/GameAnalytics/Plugins/GameAnalytics.dll”,那么你可以将相对目录路径“Assets/GameAnalytics/Plugins”添加到下面的列表中。
如果问题依然存在,尝试添加完整路径,例如“D://[YourProject]/Assets/GameAnalytics/Plugins”。
二、Namespace - Settings
1. 混淆命名空间(Obfuscate Namespaces)
- Obfuscate Namespaces: 开启
- 激活此设置将混淆命名空间。如果可能,混淆器将删除命名空间,从而增加混淆的深度。
2. 跳过特定命名空间
- Skip following Namespaces:
- 在此处添加你希望跳过混淆的命名空间。混淆器会根据前缀来决定是否跳过某个命名空间。例如,如果你输入“Unity.StandardAssets”,那么该命名空间中的所有类都将被跳过混淆,且所有以“Unity.StandardAssets”开头的命名空间也会被跳过。
- **注意:**不要输入空行!否则将会跳过所有命名空间,导致没有任何内容被混淆。
3. 反转命名空间跳过(Vice Versa Namespace Skipping)
- Vice Versa Namespace Skipping: 关闭/未设置
- 启用此设置将反转命名空间跳过的逻辑。这样,只有在上面列表中输入的命名空间和类会被混淆,其他的将不会被混淆。
三、Class Obfuscation
1. 通过访问级别控制混淆(Obfuscation controlled through the accessibility)
- Obfuscate:
- Internal: 开启
- Private: 开启
- Protected: 开启
- Public: 开启
- 这些选项控制不同访问级别的类是否被混淆。例如,Internal、Private、Protected 和 Public 修饰的类都将被混淆。
2. 子类混淆设置(Subclasses)
- Obfuscate Abstract Classes: 关闭
- 激活此设置以混淆抽象类。
- Obfuscate Generic Classes: 关闭
激活此设置以混淆泛型类。
- Obfuscate Serializable Classes: 关闭
激活此设置以混淆标有
[Serializeable]
特性的类。
如果要混淆可序列化类,必须在“optional”选项卡中激活“Rename Mapping”设置。此选项会保存并加载原始类/方法/字段及其匹配的混淆名称的映射,因为 Unity 会通过名称存储可序列化类。
3. Unity 子类混淆(Unity Subclasses)
- Obfuscate MonoBehaviour SubClasses: 关闭
激活此设置以混淆
MonoBehaviour
子类。这需要先激活命名空间混淆设置。
- Obfuscate ‘Not Obfuscatable’ MonoBehaviour SubClasses: 关闭
激活此设置以混淆不能直接混淆的
MonoBehaviour
子类。这通常是因为 Unity 通过反射调用某些类。此情况下使用的技术称为“子类型随机化(subtype
Randomizer)”。类将通过创建大量随机类来混淆。这也需要激活命名空间混淆设置。
- Obfuscate MonoBehaviour SubClasses in external Assemblies: 关闭
激活此设置以混淆你在程序集设置中指定的外部程序集中的
MonoBehaviour
子类。此设置将以“2018.2 之后”的方式混淆类。
- Obfuscate ‘Not Obfuscatable’ MonoBehaviour SubClasses in external Assemblies: 关闭
激活此设置以混淆外部程序集中的不能直接混淆的
MonoBehaviour
子类。这种情况通常是因为 Unity 通过反射调用某些类。使用的技术同样是“子类型随机化”,需要激活命名空间混淆设置。
- Obfuscate MonoBehaviour SubClasses in external Assemblies: 关闭
激活此设置以混淆外部程序集中的
MonoBehaviour
子类,这些程序集是在程序集设置中指定的。如果某些类无法直接混淆(例如,Unity通过反射调用这些类),你可以使用称为“子类型随机化(subtypeRandomizer)”的技术。这将通过创建大量随机类来混淆原始类。此功能需要先激活命名空间混淆设置。
- Obfuscate ‘Not Obfuscatable’ MonoBehaviour SubClasses in external Assemblies: 关闭
激活此设置以混淆外部程序集中的那些无法直接混淆的
MonoBehaviour
子类。同样,这通常是因为 Unity 通过反射调用这些类。你可以通过“子类型随机化”技术来混淆这些类,此功能也需要命名空间混淆的支持。
4 ScriptableObject 子类混淆
- Obfuscate ScriptableObject SubClasses: 关闭
激活此设置以混淆
ScriptableObject
子类。这也需要先激活命名空间混淆设置。
5.Playable 子类混淆
- Obfuscate Playable SubClasses: 关闭
激活此设置以混淆
Playable
/PlayableAsset
/PlayableBehaviour
子类。此功能同样需要先激活命名空间混淆设置。
四、Method Obfuscation
激活并管理方法的混淆。如果你想混淆项目中的方法,需要先开启此选项。
1. 基于访问级别的混淆(Accessibility based obfuscation)
- Obfuscate:
- Internal: 开启
- Private: 开启
- Protected: 开启
- Public: 开启
这些选项控制不同访问级别的方法是否被混淆。例如,Internal、Private、Protected 和 Public 修饰的方法都将被混淆。
2. 高级设置(Advanced)
- Obfuscate Unity Methods: 关闭
该选项用于混淆一些简单的 Unity 方法,如
Awake
、Start
、Update
等。目前该功能已禁用,正在进行修订。
五、Parameter Obfuscation
1. 方法参数混淆(Obfuscate Method Parameter)
- Obfuscate Method Parameter: 关闭
激活此设置以混淆方法的参数和方法的泛型参数。
2. 类参数混淆(Obfuscate Class Parameter)
- Obfuscate Class Parameter: 关闭
激活此设置以混淆类的泛型参数。
六、Property Obfuscation
1. 字段混淆(Field Obfuscation)
- Field Obfuscation: 关闭
激活并管理字段的混淆。如果你想混淆项目中的字段,需要先开启此选项。
2. 基于访问级别的混淆(Accessibility based obfuscation)
- Obfuscate:
- Internal: 开启
- Private: 开启
- Protected: 开启
- Public: 开启
这些选项控制不同访问级别的字段是否被混淆。例如,Internal、Private、Protected 和 Public 修饰的字段都将被混淆。
3. 高级设置(Advanced)
- Obfuscate ‘Serializeable’ Fields: 关闭
激活此设置以混淆标有
[SerializeField]
特性的字段。如果要混淆可序列化字段,必须在“optional”选项卡中激活“RenameMapping”设置。此选项会保存并加载原始类/方法/字段及其匹配的混淆名称的映射,因为 Unity 会通过名称存储可序列化字段。
- Obfuscate ‘Unity’ Public Fields: 关闭
激活此设置以混淆
MonoBehaviour
、Serializable
、NetworkBehaviour
子类中的公共字段。
- Obfuscate Enum Values: 关闭
激活此设置以混淆枚举的值。
七、Parameter Obfuscation
1. 属性混淆(Property Obfuscation)
- Property Obfuscation: 开启
激活并管理属性的混淆。
2. 基于访问级别的混淆(Accessibility based obfuscation)
- Obfuscate:
- Internal: 开启
- Private: 开启
- Protected: 开启
- Public: 开启
这些选项控制不同访问级别的属性是否被混淆。
八、Event Obfuscation
1. 事件混淆(Event Obfuscation)
- Event Obfuscation: 关闭
激活并管理事件的混淆。
2. 基于访问级别的混淆(Accessibility based obfuscation)
- Obfuscate:
- Internal: 开启
- Private: 开启
- Protected: 开启
- Public: 开启
这些选项控制不同访问级别的事件是否被混淆。
九、Logging - Settings
1. 使用自定义日志文件(Use a custom log file)
- Use a custom log file: 关闭
激活此设置后,将使用自定义日志文件路径,而不是默认的日志文件路径(
Assets/OPS/Obfuscator/Log/[BuildTarget].txt
)。
2. 自定义日志文件路径(Custom log file path)
- Custom log file path:
在此输入混淆过程中使用的自定义日志文件路径。如果选择了自定义日志文件,混淆过程中生成的日志将保存到这个路径。
十、Attribute - Settings
1. 自定义属性(Custom Attributes)
- Custom ‘DoNotRename’ Attributes:
这里可以添加自定义属性,这些属性将像混淆器的
DoNotRename
属性一样处理。
2. 添加行(Add Line)/删除行(Remove Line)
- Add Line/Remove Line:
可以通过这两个按钮添加或删除自定义属性。
十一、Renaming - Settings
1. 激活的重命名模式(Active renaming pattern)
- Active renaming pattern: 默认(Default)
你可以选择一个预定义的重命名模式,或者使用自定义模式。需要注意的是,有些字符可能不适用于某些构建目标。例如,构建到 iOS 平台时,会生成基于类文件名的 XCode 项目文件,如果使用了不适合 Mac
平台的字符,可能会导致错误。默认的重命名模式通常是最安全的选择。
2. 自定义重命名模式(Custom renaming pattern)
- Custom renaming pattern:
如果你选择自定义模式,可以在此输入你想使用的字符集作为重命名模式。不要在字符之间添加分隔符!默认的重命名模式例如是:
abcdefghikmnopqrstuvwxyz
。你可以随时切换重命名模式,它与重命名映射是独立的。
3. 加载混淆映射文件(Load an obfuscation mapping file)
- Load an obfuscation mapping file: 关闭
激活此设置可以从文件中加载混淆映射。如果你混淆了可序列化的类、字段等,建议使用此选项。你可以在下方定义文件路径。
4. 加载映射文件路径(Load mapping file path)
- Load mapping file path:
在此输入你希望加载混淆映射的文件路径。
5. 保存混淆映射文件(Save an obfuscation mapping file)
- Save an obfuscation mapping file: 关闭
激活此设置可以将混淆映射保存到文件中。如果你混淆了可序列化的类、字段等,建议使用此选项。你可以在下方定义文件路径。
6. 保存映射文件路径(Save mapping file path)
- Save mapping file path:
在此输入你希望保存混淆映射的文件路径。