Obfuz自定义混淆规则

作者:追风剑情 发布于:2026-1-30 13:50 分类:Unity3d

一、修改EncryptionVM相关设置

找到 Project Settings->Obfuz->Encryption VM Settings

2.png

  • 修改CodeGenerationSecretKey字段为自定义值

二、修改Secret相关设置

3.png

  • 修改DefaultStaticSecretKey字段为自定义值
  • 修改DefaultDynamicSecretKey字段为自定义值
  • 修改RandomSeed字段为自定义的int整数

三、修改符号混淆相关设置

Assets/Obfuz 目录下创建 symbol-obfuscation.xml 文件,同时 SymbolObfusSettings.RuleFiles中新增一项 Assets/Obfuz/symbol-obfuscation.xml

4.png

  • 为了方便区分旧名称和混淆后的名称,混淆名默认都会添加$前缀。ObfuscatedNamePrefix 字段配置了该前缀字符串。 如果不希望使用这个前缀,可以改为自定义的字符串。前缀字符串也可以为空,不影响混淆正确性。

文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>

<obfuz>
    <assembly name="Assembly-CSharp">
      <!-- 不混淆Test1类自身及它的所有成员,包括嵌套类 -->
      <type name="SymbolObfus.Test1" obName="0" applyToMembers="*"/> 
    </assembly>
</obfuz>

四、修改常量加密相关设置

Assets/Obfuz 目录下创建 const-encrypt.xml 文件,同时 ConstEncryptSettings.RuleFiles 中新增一项 Assets/Obfuz/const-encrypt.xml

5.png

  • 加密级别(Encryption Level)取值范围[1,4],加密级别大小对反破解的难度提升不大,建议默认取1即可。

文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<obfuz>
    <!-- 不加密 [-100, 100]范围内的常量 -->
    <whitelist type="int-range">-100,100</whitelist>
    <!-- 不加密长度小于等于3的字符串 -->
    <whitelist type="string-length-range">,3</whitelist> 
    
    <assembly name="Assembly-CSharp">
        <!-- 对Test1类所有函数禁用常量加密 -->
        <type name="ConstEncrypt.Test1" disableEncrypt="1"/> 
        <type name="ConstEncrypt.Test2">
            <!-- 不加密Sum3函数中的常量 -->
            <method name="Sum3" disableEncrypt="1"/> 
        </type>
    </assembly>
</obfuz>

五、修改字段加密相关设置

Assets/Obfuz 目录下创建 field-encrypt.xml 文件,同时 FieldEncryptSettings.RuleFiles 中新增一项 Assets/Obfuz/field-encrypt.xml

6.png

文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<obfuz>
    <assembly name="Assembly-CSharp">
        <type name="FieldEncrypt.Test1">
            <field name="a" encrypt="1"/>
        </type>
    </assembly>
</obfuz>

六、修改调用混淆相关设置

Assets/Obfuz 目录下创建 call-obfuscation.xml 文件,同时 CallObfusSettings.RuleFiles中新增一项 Assets/Obfuz/call-obfuscation.xml

7.png

文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<obfuz>
  <whitelist>
    <assembly name="mscorlib" obfuscate="0"/>
    <assembly name="UnityEngine.*" obfuscate="0"/>
  </whitelist>
  
  <assembly name="Assembly-CSharp">
      <type name="*CallObfus.Test1" disableObfuscation="1"/>
      <type name="*CallObfus.Test2">
          <method name="Run1" disableObfuscation="1"/>
      </type>
  </assembly>
</obfuz>

七、生成加密虚拟机及密钥

执行菜单 【Obfuz】->GenerateEncryptionVM 和 【Obfuz】->GenerateSecretKeyFile

8.png

生成的密钥文件自动保存在 Assets/Resources/Obfuz 目录下面。

9.png

八、查看混淆后Assembly-CSharp代码

使用ILSpy打开 Library/Obfuz/{buildTarget}/ObfuscatedAssemblies/Assembly-CSharp.dll

10.png

标签: Unity3d

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号