From dcf7fd3ae5d3b80a063473b429103a9204a6a7c3 Mon Sep 17 00:00:00 2001 From: walon Date: Tue, 15 Apr 2025 18:30:17 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=9F=BA=E4=BA=8E=20WordSet?= =?UTF-8?q?=E7=9A=84=20NameMaker?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Editor/Obfuscator.cs | 3 +- Editor/Rename/INameMaker.cs | 23 +++++++++++ Editor/Rename/NameMaker.cs | 68 +++++++++++++++++++------------ Editor/Rename/NameMakerFactory.cs | 23 +++++++++++ 4 files changed, 91 insertions(+), 26 deletions(-) create mode 100644 Editor/Rename/INameMaker.cs create mode 100644 Editor/Rename/NameMakerFactory.cs diff --git a/Editor/Obfuscator.cs b/Editor/Obfuscator.cs index 9e4ae67..1efd4f6 100644 --- a/Editor/Obfuscator.cs +++ b/Editor/Obfuscator.cs @@ -34,7 +34,8 @@ namespace Obfuz _options = options; _assemblyCache = new AssemblyCache(new PathAssemblyResolver(options.AssemblySearchDirs.ToArray())); _renamePolicy = new CombineRenamePolicy(new SystemRenamePolicy(), new UnityRenamePolicy(), new XmlConfigRenamePolicy()); - _nameMaker = new TestNameMaker(); + //_nameMaker = new TestNameMaker(); + _nameMaker = NameMakerFactory.CreateNameMakerBaseASCIICharSet(); } public void DoIt() diff --git a/Editor/Rename/INameMaker.cs b/Editor/Rename/INameMaker.cs new file mode 100644 index 0000000..e806d43 --- /dev/null +++ b/Editor/Rename/INameMaker.cs @@ -0,0 +1,23 @@ +using dnlib.DotNet; + +namespace Obfuz.Rename +{ + public interface INameMaker + { + string GetNewName(ModuleDefMD mod, string originalName); + + string GetNewName(TypeDef typeDef, string originalName); + + string GetNewNamespace(TypeDef typeDef, string originalNamespace); + + string GetNewName(MethodDef methodDef, string originalName); + + string GetNewName(ParamDef param, string originalName); + + string GetNewName(FieldDef fieldDef, string originalName); + + string GetNewName(PropertyDef propertyDef, string originalName); + + string GetNewName(EventDef eventDef, string originalName); + } +} diff --git a/Editor/Rename/NameMaker.cs b/Editor/Rename/NameMaker.cs index 5ff4440..203bcfc 100644 --- a/Editor/Rename/NameMaker.cs +++ b/Editor/Rename/NameMaker.cs @@ -7,72 +7,90 @@ using System.Threading.Tasks; namespace Obfuz.Rename { - public interface INameMaker + public class NameScope { - string GetNewName(ModuleDefMD mod, string originalName); + private readonly List _wordSet; + private int _nextIndex; - string GetNewName(TypeDef typeDef, string originalName); + public NameScope(List wordSet) + { + _wordSet = wordSet; + _nextIndex = 0; + } - string GetNewNamespace(TypeDef typeDef, string originalNamespace); - - string GetNewName(MethodDef methodDef, string originalName); - - string GetNewName(ParamDef param, string originalName); - - string GetNewName(FieldDef fieldDef, string originalName); - - string GetNewName(PropertyDef propertyDef, string originalName); - - string GetNewName(EventDef eventDef, string originalName); + public string GetNewName(string originalName) + { + if (_nextIndex >= _wordSet.Count) + throw new InvalidOperationException("No more names available in the word set."); + string newName = _wordSet[_nextIndex++]; + return newName; + } } public class NameMaker : INameMaker { - private int _nextIndex; + private readonly List _wordSet; - private string GetDefaultNewName(string originName) + private readonly Dictionary _nameScopes = new Dictionary(); + + public NameMaker(List wordSet) { - return $"{originName}>{_nextIndex++}"; + _wordSet = wordSet; + } + + private NameScope GetNameScope(object key) + { + if (!_nameScopes.TryGetValue(key, out var nameScope)) + { + nameScope = new NameScope(_wordSet); + _nameScopes[key] = nameScope; + } + return nameScope; + } + + private string GetDefaultNewName(object scope, string originName) + { + return GetNameScope(scope).GetNewName(originName); } public string GetNewName(ModuleDefMD mod, string originalName) { - return GetDefaultNewName(originalName); + return GetDefaultNewName(this, originalName); } public string GetNewNamespace(TypeDef typeDef, string originalNamespace) { - return GetDefaultNewName(originalNamespace); + return GetDefaultNewName(typeDef.Module, originalNamespace); } public string GetNewName(TypeDef typeDef, string originalName) { - return GetDefaultNewName(originalName); + return GetDefaultNewName(typeDef.Module, originalName); } public string GetNewName(MethodDef methodDef, string originalName) { - return GetDefaultNewName(originalName); + return GetDefaultNewName(methodDef.DeclaringType, originalName); } public string GetNewName(ParamDef param, string originalName) { - return GetDefaultNewName(originalName); + return "1"; } public string GetNewName(FieldDef fieldDef, string originalName) { - return GetDefaultNewName(originalName); + return GetDefaultNewName(fieldDef.DeclaringType, originalName); } public string GetNewName(PropertyDef propertyDef, string originalName) { - return GetDefaultNewName(originalName); + return GetDefaultNewName(propertyDef.DeclaringType, originalName); } public string GetNewName(EventDef eventDef, string originalName) { - return GetDefaultNewName(originalName); + return GetDefaultNewName(eventDef.DeclaringType, originalName); } } } diff --git a/Editor/Rename/NameMakerFactory.cs b/Editor/Rename/NameMakerFactory.cs new file mode 100644 index 0000000..57003ed --- /dev/null +++ b/Editor/Rename/NameMakerFactory.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.Remoting.Messaging; +using System.Text; +using System.Threading.Tasks; + +namespace Obfuz.Rename +{ + public static class NameMakerFactory + { + public static INameMaker CreateNameMakerBaseASCIICharSet() + { + var words = new List(); + for (int i = 0; i < 26; i++) + { + words.Add(((char)('a' + i)).ToString()); + words.Add(((char)('A' + i)).ToString()); + } + return new NameMaker(words); + } + } +}