From 3c46760ac7e4f93dda7a11aa678bede90fb73bd4 Mon Sep 17 00:00:00 2001 From: walon Date: Mon, 5 May 2025 09:09:53 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84=20SymbolObfus=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SymbolObfus/NameMakerFactory.cs | 5 +++++ ...RuleConfig.cs => RuleBasedRenamePolicy.cs} | 4 ++-- ...RenameSymbolPass.cs => SymbolObfusPass.cs} | 9 ++++---- .../ObfusPasses/SymbolObfus/SymbolRename.cs | 15 ++++++------- Editor/ObfuscatorBuilder.cs | 2 +- Editor/Settings/ObfuzSettings.cs | 7 ++----- Editor/Settings/ObfuzSettingsProvider.cs | 19 +++++++++-------- Editor/Settings/SymbolObfusSettings.cs | 21 +++++++++++++++++++ Editor/Utils/PathAssemblyResolver.cs | 2 +- 9 files changed, 55 insertions(+), 29 deletions(-) rename Editor/ObfusPasses/SymbolObfus/{ObfuscateRuleConfig.cs => RuleBasedRenamePolicy.cs} (99%) rename Editor/ObfusPasses/SymbolObfus/{RenameSymbolPass.cs => SymbolObfusPass.cs} (70%) create mode 100644 Editor/Settings/SymbolObfusSettings.cs diff --git a/Editor/ObfusPasses/SymbolObfus/NameMakerFactory.cs b/Editor/ObfusPasses/SymbolObfus/NameMakerFactory.cs index f7e95e3..93cc380 100644 --- a/Editor/ObfusPasses/SymbolObfus/NameMakerFactory.cs +++ b/Editor/ObfusPasses/SymbolObfus/NameMakerFactory.cs @@ -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(); diff --git a/Editor/ObfusPasses/SymbolObfus/ObfuscateRuleConfig.cs b/Editor/ObfusPasses/SymbolObfus/RuleBasedRenamePolicy.cs similarity index 99% rename from Editor/ObfusPasses/SymbolObfus/ObfuscateRuleConfig.cs rename to Editor/ObfusPasses/SymbolObfus/RuleBasedRenamePolicy.cs index c315a49..9644a68 100644 --- a/Editor/ObfusPasses/SymbolObfus/ObfuscateRuleConfig.cs +++ b/Editor/ObfusPasses/SymbolObfus/RuleBasedRenamePolicy.cs @@ -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 _obfuscationAssemblyNames; - public ObfuscateRuleConfig(List obfuscationAssemblyNames) + public RuleBasedRenamePolicy(List obfuscationAssemblyNames) { this._obfuscationAssemblyNames = obfuscationAssemblyNames.ToHashSet(); } diff --git a/Editor/ObfusPasses/SymbolObfus/RenameSymbolPass.cs b/Editor/ObfusPasses/SymbolObfus/SymbolObfusPass.cs similarity index 70% rename from Editor/ObfusPasses/SymbolObfus/RenameSymbolPass.cs rename to Editor/ObfusPasses/SymbolObfus/SymbolObfusPass.cs index 3e2948a..bf000ce 100644 --- a/Editor/ObfusPasses/SymbolObfus/RenameSymbolPass.cs +++ b/Editor/ObfusPasses/SymbolObfus/SymbolObfusPass.cs @@ -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 obfuscationRuleFiles, string mappingXmlPath) + public SymbolObfusPass(SymbolObfusSettings settings) { - _symbolRename = new SymbolRename(mappingXmlPath, obfuscationRuleFiles); + _symbolRename = new SymbolRename(settings); } public override void Start(ObfuscationPassContext ctx) diff --git a/Editor/ObfusPasses/SymbolObfus/SymbolRename.cs b/Editor/ObfusPasses/SymbolObfus/SymbolRename.cs index 99a2919..3fc6435 100644 --- a/Editor/ObfusPasses/SymbolObfus/SymbolRename.cs +++ b/Editor/ObfusPasses/SymbolObfus/SymbolRename.cs @@ -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 _obfuscatedAndNotObfuscatedModules; private List _obfuzAssemblies; private HashSet _toObfuscatedModuleSet; - private ObfuscateRuleConfig _obfuscateRuleConfig; + private RuleBasedRenamePolicy _obfuscateRuleConfig; private IRenamePolicy _renamePolicy; private INameMaker _nameMaker; private readonly Dictionary> _customAttributeArgumentsWithTypeByMods = new Dictionary>(); @@ -51,12 +52,13 @@ namespace Obfuz.ObfusPasses.SymbolObfus public List namedArguments; } - public SymbolRename(string mappingXmlPath, List 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(); } diff --git a/Editor/ObfuscatorBuilder.cs b/Editor/ObfuscatorBuilder.cs index 238f499..0205ab0 100644 --- a/Editor/ObfuscatorBuilder.cs +++ b/Editor/ObfuscatorBuilder.cs @@ -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; diff --git a/Editor/Settings/ObfuzSettings.cs b/Editor/Settings/ObfuzSettings.cs index 6fd66f7..d656e8f 100644 --- a/Editor/Settings/ObfuzSettings.cs +++ b/Editor/Settings/ObfuzSettings.cs @@ -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; diff --git a/Editor/Settings/ObfuzSettingsProvider.cs b/Editor/Settings/ObfuzSettingsProvider.cs index 40f6d00..c59ca29 100644 --- a/Editor/Settings/ObfuzSettingsProvider.cs +++ b/Editor/Settings/ObfuzSettingsProvider.cs @@ -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()) { diff --git a/Editor/Settings/SymbolObfusSettings.cs b/Editor/Settings/SymbolObfusSettings.cs new file mode 100644 index 0000000..de5118b --- /dev/null +++ b/Editor/Settings/SymbolObfusSettings.cs @@ -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; + } +} diff --git a/Editor/Utils/PathAssemblyResolver.cs b/Editor/Utils/PathAssemblyResolver.cs index 6b6a123..11c0f47 100644 --- a/Editor/Utils/PathAssemblyResolver.cs +++ b/Editor/Utils/PathAssemblyResolver.cs @@ -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; } }