重构 SymbolObfus配置

backup
walon 2025-05-05 09:09:53 +08:00
parent d741eed042
commit 3c46760ac7
9 changed files with 55 additions and 29 deletions

View File

@ -9,6 +9,11 @@ namespace Obfuz.ObfusPasses.SymbolObfus
{ {
public static class NameMakerFactory public static class NameMakerFactory
{ {
public static INameMaker CreateDebugNameMaker()
{
return new TestNameMaker();
}
public static INameMaker CreateNameMakerBaseASCIICharSet() public static INameMaker CreateNameMakerBaseASCIICharSet()
{ {
var words = new List<string>(); var words = new List<string>();

View File

@ -11,7 +11,7 @@ using UnityEngine;
namespace Obfuz.ObfusPasses.SymbolObfus namespace Obfuz.ObfusPasses.SymbolObfus
{ {
public class ObfuscateRuleConfig : RenamePolicyBase public class RuleBasedRenamePolicy : RenamePolicyBase
{ {
enum ObfuscationType enum ObfuscationType
{ {
@ -707,7 +707,7 @@ namespace Obfuz.ObfusPasses.SymbolObfus
private readonly HashSet<string> _obfuscationAssemblyNames; private readonly HashSet<string> _obfuscationAssemblyNames;
public ObfuscateRuleConfig(List<string> obfuscationAssemblyNames) public RuleBasedRenamePolicy(List<string> obfuscationAssemblyNames)
{ {
this._obfuscationAssemblyNames = obfuscationAssemblyNames.ToHashSet(); this._obfuscationAssemblyNames = obfuscationAssemblyNames.ToHashSet();
} }

View File

@ -1,4 +1,5 @@
using System; using Obfuz.Settings;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
@ -6,13 +7,13 @@ using System.Threading.Tasks;
namespace Obfuz.ObfusPasses.SymbolObfus namespace Obfuz.ObfusPasses.SymbolObfus
{ {
public class RenameSymbolPass : ObfuscationPassBase public class SymbolObfusPass : ObfuscationPassBase
{ {
private SymbolRename _symbolRename; private SymbolRename _symbolRename;
public RenameSymbolPass(List<string> obfuscationRuleFiles, string mappingXmlPath) public SymbolObfusPass(SymbolObfusSettings settings)
{ {
_symbolRename = new SymbolRename(mappingXmlPath, obfuscationRuleFiles); _symbolRename = new SymbolRename(settings);
} }
public override void Start(ObfuscationPassContext ctx) public override void Start(ObfuscationPassContext ctx)

View File

@ -1,5 +1,6 @@
using dnlib.DotNet; using dnlib.DotNet;
using Obfuz.ObfusPasses.SymbolObfus; using Obfuz.ObfusPasses.SymbolObfus;
using Obfuz.Settings;
using Obfuz.Utils; using Obfuz.Utils;
using System; using System;
using System.Collections; using System.Collections;
@ -36,7 +37,7 @@ namespace Obfuz.ObfusPasses.SymbolObfus
private List<ModuleDef> _obfuscatedAndNotObfuscatedModules; private List<ModuleDef> _obfuscatedAndNotObfuscatedModules;
private List<AssemblyReferenceInfo> _obfuzAssemblies; private List<AssemblyReferenceInfo> _obfuzAssemblies;
private HashSet<ModuleDef> _toObfuscatedModuleSet; private HashSet<ModuleDef> _toObfuscatedModuleSet;
private ObfuscateRuleConfig _obfuscateRuleConfig; private RuleBasedRenamePolicy _obfuscateRuleConfig;
private IRenamePolicy _renamePolicy; private IRenamePolicy _renamePolicy;
private INameMaker _nameMaker; private INameMaker _nameMaker;
private readonly Dictionary<ModuleDef, List<CustomAttributeInfo>> _customAttributeArgumentsWithTypeByMods = new Dictionary<ModuleDef, List<CustomAttributeInfo>>(); private readonly Dictionary<ModuleDef, List<CustomAttributeInfo>> _customAttributeArgumentsWithTypeByMods = new Dictionary<ModuleDef, List<CustomAttributeInfo>>();
@ -51,12 +52,13 @@ namespace Obfuz.ObfusPasses.SymbolObfus
public List<CANamedArgument> namedArguments; public List<CANamedArgument> namedArguments;
} }
public SymbolRename(string mappingXmlPath, List<string> obfuscationRuleFiles) public SymbolRename(SymbolObfusSettings settings)
{ {
_mappingXmlPath = mappingXmlPath; _mappingXmlPath = settings.mappingFile;
_obfuscationRuleFiles = obfuscationRuleFiles; _obfuscationRuleFiles = settings.ruleFiles.ToList();
_renameRecordMap = new RenameRecordMap(mappingXmlPath); _renameRecordMap = new RenameRecordMap(settings.mappingFile);
_virtualMethodGroupCalculator = new VirtualMethodGroupCalculator(); _virtualMethodGroupCalculator = new VirtualMethodGroupCalculator();
_nameMaker = settings.debug ? NameMakerFactory.CreateDebugNameMaker() : NameMakerFactory.CreateNameMakerBaseASCIICharSet();
} }
public void Init(ObfuscationPassContext ctx) public void Init(ObfuscationPassContext ctx)
@ -66,10 +68,9 @@ namespace Obfuz.ObfusPasses.SymbolObfus
_obfuscatedAndNotObfuscatedModules = ctx.obfuscatedAndNotObfuscatedModules; _obfuscatedAndNotObfuscatedModules = ctx.obfuscatedAndNotObfuscatedModules;
_toObfuscatedModuleSet = ctx.toObfuscatedModules.ToHashSet(); _toObfuscatedModuleSet = ctx.toObfuscatedModules.ToHashSet();
_obfuzAssemblies = BuildAssemblyReferenceInfos(ctx); _obfuzAssemblies = BuildAssemblyReferenceInfos(ctx);
_obfuscateRuleConfig = new ObfuscateRuleConfig(ctx.toObfuscatedAssemblyNames); _obfuscateRuleConfig = new RuleBasedRenamePolicy(ctx.toObfuscatedAssemblyNames);
_obfuscateRuleConfig.LoadXmls(_obfuscationRuleFiles); _obfuscateRuleConfig.LoadXmls(_obfuscationRuleFiles);
_renamePolicy = new CacheRenamePolicy(new CombineRenamePolicy(new SystemRenamePolicy(), new UnityRenamePolicy(), _obfuscateRuleConfig)); _renamePolicy = new CacheRenamePolicy(new CombineRenamePolicy(new SystemRenamePolicy(), new UnityRenamePolicy(), _obfuscateRuleConfig));
_nameMaker = NameMakerFactory.CreateNameMakerBaseASCIICharSet();
BuildCustomAttributeArguments(); BuildCustomAttributeArguments();
} }

View File

@ -93,7 +93,7 @@ namespace Obfuz
} }
if (obfuscationPasses.HasFlag(ObfuscationPassType.SymbolObfuscation)) if (obfuscationPasses.HasFlag(ObfuscationPassType.SymbolObfuscation))
{ {
builder.AddPass(new RenameSymbolPass(settings.ruleFiles.ToList(), settings.mappingFile)); builder.AddPass(new SymbolObfusPass(settings.symbolObfusSettings));
} }
builder.AddPass(new CleanUpInstructionPass()); builder.AddPass(new CleanUpInstructionPass());
return builder; return builder;

View File

@ -23,11 +23,8 @@ namespace Obfuz.Settings
[Tooltip("enable obfuscation pass")] [Tooltip("enable obfuscation pass")]
public ObfuscationPassType enabledObfuscationPasses = ObfuscationPassType.All; public ObfuscationPassType enabledObfuscationPasses = ObfuscationPassType.All;
[Tooltip("path of mapping.xml")] [Tooltip("symbol obfuscation settings")]
public string mappingFile = "Assets/Obfuz/mapping.xml"; public SymbolObfusSettings symbolObfusSettings;
[Tooltip("obfuscation rule files for assemblies")]
public string[] ruleFiles;
[Tooltip("extra assembly search dirs")] [Tooltip("extra assembly search dirs")]
public string[] extraAssemblySearchDirs; public string[] extraAssemblySearchDirs;

View File

@ -31,11 +31,12 @@ namespace Obfuz.Settings
private SerializedProperty _enable; private SerializedProperty _enable;
private SerializedProperty _toObfuscatedAssemblyNames; private SerializedProperty _toObfuscatedAssemblyNames;
private SerializedProperty _notObfuscatedAssemblyNamesReferencingObfuscated; private SerializedProperty _notObfuscatedAssemblyNamesReferencingObfuscated;
private SerializedProperty _enabledObfuscationPasses;
private SerializedProperty _mappingFile;
private SerializedProperty _ruleFiles;
private SerializedProperty _extraAssemblySearchDirs; private SerializedProperty _extraAssemblySearchDirs;
private SerializedProperty _enabledObfuscationPasses;
private SerializedProperty _symbolObfusSettings;
public ObfuzSettingsProvider() : base("Project/Obfuz", SettingsScope.Project) public ObfuzSettingsProvider() : base("Project/Obfuz", SettingsScope.Project)
{ {
} }
@ -59,10 +60,10 @@ namespace Obfuz.Settings
_enable = _serializedObject.FindProperty("enable"); _enable = _serializedObject.FindProperty("enable");
_toObfuscatedAssemblyNames = _serializedObject.FindProperty("toObfuscatedAssemblyNames"); _toObfuscatedAssemblyNames = _serializedObject.FindProperty("toObfuscatedAssemblyNames");
_notObfuscatedAssemblyNamesReferencingObfuscated = _serializedObject.FindProperty("notObfuscatedAssemblyNamesReferencingObfuscated"); _notObfuscatedAssemblyNamesReferencingObfuscated = _serializedObject.FindProperty("notObfuscatedAssemblyNamesReferencingObfuscated");
_enabledObfuscationPasses = _serializedObject.FindProperty("enabledObfuscationPasses");
_mappingFile = _serializedObject.FindProperty("mappingFile");
_ruleFiles = _serializedObject.FindProperty("ruleFiles");
_extraAssemblySearchDirs = _serializedObject.FindProperty("extraAssemblySearchDirs"); _extraAssemblySearchDirs = _serializedObject.FindProperty("extraAssemblySearchDirs");
_enabledObfuscationPasses = _serializedObject.FindProperty("enabledObfuscationPasses");
_symbolObfusSettings = _serializedObject.FindProperty("symbolObfusSettings");
} }
public override void OnGUI(string searchContext) public override void OnGUI(string searchContext)
@ -77,10 +78,10 @@ namespace Obfuz.Settings
EditorGUILayout.PropertyField(_enable); EditorGUILayout.PropertyField(_enable);
EditorGUILayout.PropertyField(_toObfuscatedAssemblyNames); EditorGUILayout.PropertyField(_toObfuscatedAssemblyNames);
EditorGUILayout.PropertyField(_notObfuscatedAssemblyNamesReferencingObfuscated); EditorGUILayout.PropertyField(_notObfuscatedAssemblyNamesReferencingObfuscated);
EditorGUILayout.PropertyField(_enabledObfuscationPasses);
EditorGUILayout.PropertyField(_mappingFile);
EditorGUILayout.PropertyField(_ruleFiles);
EditorGUILayout.PropertyField(_extraAssemblySearchDirs); EditorGUILayout.PropertyField(_extraAssemblySearchDirs);
EditorGUILayout.PropertyField(_enabledObfuscationPasses);
EditorGUILayout.PropertyField(_symbolObfusSettings);
if (EditorGUI.EndChangeCheck()) if (EditorGUI.EndChangeCheck())
{ {

View File

@ -0,0 +1,21 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using UnityEngine;
namespace Obfuz.Settings
{
[Serializable]
public class SymbolObfusSettings
{
public bool debug;
[Tooltip("path of mapping.xml")]
public string mappingFile = "Assets/Obfuz/SymbolObfus/mapping.xml";
[Tooltip("obfuscation rule files for assemblies")]
public string[] ruleFiles;
}
}

View File

@ -24,7 +24,7 @@ namespace Obfuz.Utils
string assPath = Path.Combine(path, assemblyName + ".dll"); string assPath = Path.Combine(path, assemblyName + ".dll");
if (File.Exists(assPath)) if (File.Exists(assPath))
{ {
Debug.Log($"resolve {assemblyName} at {assPath}"); //Debug.Log($"resolve {assemblyName} at {assPath}");
return assPath; return assPath;
} }
} }