Skip to main content

程序集

程序集类型

对Obfuz来说,有四类程序集:

  1. 不可混淆程序集。 如mscorlib、netstandard这种基础程序集不能被混淆。
  2. 没有被混淆,也没有引用混淆后程序集的程序集。 例如SystemSystem.CoreUnityEngine.CoreModule这样的程序集没必要被混淆,它们只是被混淆程序集引用,但没有引用任何被混淆的程序集。
  3. 被混淆的程序集。 像开发者业务代码所在的程序集一般会被配置为被混淆的程序集。
  4. 没有被混淆,但引用了被混淆的程序集的程序集。 在某些情况下,开发者可能希望某些业务程序集不被混淆,但这些业务程序集引用到了其他被混淆的程序集。

为什么需要区分第4类程序集

大部分的混淆和加密只局限于程序集内部,但有一部分特殊混淆或者加密Pass需要处理其他引用了被混淆元数据的程序集。

符号混淆

被混淆的程序集中的类型、函数等符号的名称可能被修改,如果某个程序集引用了被混淆程序集,被混淆程序集中的符号被改名后需要同步修改引用它的程序集中的引用名。因此Obfuz必须知道哪些程序集 是第4类程序集,才能保证混淆后这种跨程序集引用的正确性。

字段加密

字段内存加密后,所有访问了该字段的代码都要替换为加密和解密代码。因此如果其他程序集也访问了该字段,也需要将访问代码替换为加密和解密代码。

设置

tip

几乎所有程序集都可以被混淆,包括SystemSystem.CoreUnityEngine.*,甚至Obfuz.Runtime都可以被混淆!

warning

如果某个程序集不需要被混淆,但它引用了被混淆的程序集,一定要将它加入NonObfuscatedButReferenceingObfuscatedAssemblies列表!

ObfuzSettingsAssembly Settings字段包含混淆程序集相关配置。详细见文档设置

很显然,必须配置有哪些第3类程序集。理论上,第4类程序集(即引用了这些被混淆程序集的程序集)能够被自动识别。但是由于这些程序集有可能以plugin形式存在 或者放到Unity项目的外部,Obfuz有可能没法知道实际上有哪些第4类程序集。为简化规则起见,Obfuz要求配置手动配置第4类程序集列表。

将第3类程序集加入到AssemblyToObfuscate列表,将第4类程序集加入NonObfuscatedButReferenceingObfuscatedAssemblies列表。

请不要将第1类和第2类程序集加到混淆或者非混淆的列表,没有意义!如果将第1类程序集加入混淆或非混淆的列表,反而会引发错误!

dll形式的程序集及位置在Unity项目外的程序集

如果这些程序集是第3或者第4类程序集,那它们必须要被加到混淆相关的程序集列表中。另外由于Obfuz不知道如何查找到这些程序集,需要在Assembly SettingsAdditional Assembly Search Paths中添加这些程序集的搜索路径。