重构 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 INameMaker CreateDebugNameMaker()
{
return new TestNameMaker();
}
public static INameMaker CreateNameMakerBaseASCIICharSet()
{
var words = new List<string>();

View File

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

View File

@ -1,4 +1,5 @@
using System;
using Obfuz.Settings;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
@ -6,13 +7,13 @@ using System.Threading.Tasks;
namespace Obfuz.ObfusPasses.SymbolObfus
{
public class RenameSymbolPass : ObfuscationPassBase
public class SymbolObfusPass : ObfuscationPassBase
{
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)

View File

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

View File

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

View File

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

View File

@ -31,11 +31,12 @@ namespace Obfuz.Settings
private SerializedProperty _enable;
private SerializedProperty _toObfuscatedAssemblyNames;
private SerializedProperty _notObfuscatedAssemblyNamesReferencingObfuscated;
private SerializedProperty _enabledObfuscationPasses;
private SerializedProperty _mappingFile;
private SerializedProperty _ruleFiles;
private SerializedProperty _extraAssemblySearchDirs;
private SerializedProperty _enabledObfuscationPasses;
private SerializedProperty _symbolObfusSettings;
public ObfuzSettingsProvider() : base("Project/Obfuz", SettingsScope.Project)
{
}
@ -59,10 +60,10 @@ namespace Obfuz.Settings
_enable = _serializedObject.FindProperty("enable");
_toObfuscatedAssemblyNames = _serializedObject.FindProperty("toObfuscatedAssemblyNames");
_notObfuscatedAssemblyNamesReferencingObfuscated = _serializedObject.FindProperty("notObfuscatedAssemblyNamesReferencingObfuscated");
_enabledObfuscationPasses = _serializedObject.FindProperty("enabledObfuscationPasses");
_mappingFile = _serializedObject.FindProperty("mappingFile");
_ruleFiles = _serializedObject.FindProperty("ruleFiles");
_extraAssemblySearchDirs = _serializedObject.FindProperty("extraAssemblySearchDirs");
_enabledObfuscationPasses = _serializedObject.FindProperty("enabledObfuscationPasses");
_symbolObfusSettings = _serializedObject.FindProperty("symbolObfusSettings");
}
public override void OnGUI(string searchContext)
@ -77,10 +78,10 @@ namespace Obfuz.Settings
EditorGUILayout.PropertyField(_enable);
EditorGUILayout.PropertyField(_toObfuscatedAssemblyNames);
EditorGUILayout.PropertyField(_notObfuscatedAssemblyNamesReferencingObfuscated);
EditorGUILayout.PropertyField(_enabledObfuscationPasses);
EditorGUILayout.PropertyField(_mappingFile);
EditorGUILayout.PropertyField(_ruleFiles);
EditorGUILayout.PropertyField(_extraAssemblySearchDirs);
EditorGUILayout.PropertyField(_enabledObfuscationPasses);
EditorGUILayout.PropertyField(_symbolObfusSettings);
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");
if (File.Exists(assPath))
{
Debug.Log($"resolve {assemblyName} at {assPath}");
//Debug.Log($"resolve {assemblyName} at {assPath}");
return assPath;
}
}