From 4986705b95262447e878eda5abaf847e8fa0e4eb Mon Sep 17 00:00:00 2001 From: walon Date: Mon, 12 May 2025 09:42:58 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20=E8=A3=81=E5=89=AA?= =?UTF-8?q?=E5=90=8Eaot=20dll=E4=B8=8D=E5=90=AB=E4=B8=80=E4=BA=9B=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=EF=BC=8C=E5=AF=BC=E8=87=B4resolve=E5=A4=B1=E8=B4=A5?= =?UTF-8?q?=E7=9A=84Bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ObfusPasses/SymbolObfus/SymbolRename.cs | 11 +++++----- Editor/ObfuscatorBuilder.cs | 20 ++++++++++++++++++- Editor/Unity/ObfuscationProcess.cs | 14 ++----------- 3 files changed, 26 insertions(+), 19 deletions(-) diff --git a/Editor/ObfusPasses/SymbolObfus/SymbolRename.cs b/Editor/ObfusPasses/SymbolObfus/SymbolRename.cs index b3b188b..74b449a 100644 --- a/Editor/ObfusPasses/SymbolObfus/SymbolRename.cs +++ b/Editor/ObfusPasses/SymbolObfus/SymbolRename.cs @@ -186,11 +186,6 @@ namespace Obfuz.ObfusPasses.SymbolObfus RenameEvents(); } - private List GetReferenceMeAssemblies(ModuleDef mod) - { - return _obfuzAssemblies.Find(ass => ass.module == mod).referenceMeAssemblies; - } - class RefTypeDefMetas { public readonly List typeRefs = new List(); @@ -200,10 +195,14 @@ namespace Obfuz.ObfusPasses.SymbolObfus private void BuildRefTypeDefMetasMap(Dictionary refTypeDefMetasMap) { - foreach (ModuleDef mod in _toObfuscatedModules) + foreach (ModuleDef mod in _obfuscatedAndNotObfuscatedModules) { foreach (TypeRef typeRef in mod.GetTypeRefs()) { + if (typeRef.DefinitionAssembly.IsCorLib()) + { + continue; + } TypeDef typeDef = typeRef.ResolveThrow(); if (!refTypeDefMetasMap.TryGetValue(typeDef, out var typeDefMetas)) { diff --git a/Editor/ObfuscatorBuilder.cs b/Editor/ObfuscatorBuilder.cs index 35734b8..1c937f7 100644 --- a/Editor/ObfuscatorBuilder.cs +++ b/Editor/ObfuscatorBuilder.cs @@ -107,6 +107,24 @@ namespace Obfuz return new Obfuscator(this); } + public static List BuildUnityAssemblySearchPaths() + { + string applicationContentsPath = EditorApplication.applicationContentsPath; + return new List + { +#if UNITY_2021_1_OR_NEWER + Path.Combine(applicationContentsPath, "UnityReferenceAssemblies/unity-4.8-api/Facades"), + Path.Combine(applicationContentsPath, "UnityReferenceAssemblies/unity-4.8-api"), +#elif UNITY_2020 || UNITY_2019 + Path.Combine(applicationContentsPath, "MonoBleedingEdge/lib/mono/4.7.1-api/Facades"), + Path.Combine(applicationContentsPath, "MonoBleedingEdge/lib/mono/4.7.1-api"), +#else +#error "Unsupported Unity version" +#endif + Path.Combine(applicationContentsPath, "Managed/UnityEngine"), + }; + } + public static ObfuscatorBuilder FromObfuzSettings(ObfuzSettings settings, BuildTarget target) { var builder = new ObfuscatorBuilder @@ -119,7 +137,7 @@ namespace Obfuz _encryptionVmCodeFile = settings.encryptionVMSettings.codeOutputPath, _toObfuscatedAssemblyNames = settings.assemblySettings.toObfuscatedAssemblyNames.ToList(), _notObfuscatedAssemblyNamesReferencingObfuscated = settings.assemblySettings.notObfuscatedAssemblyNamesReferencingObfuscated.ToList(), - _assemblySearchDirs = settings.assemblySettings.extraAssemblySearchDirs.ToList(), + _assemblySearchDirs = BuildUnityAssemblySearchPaths().Concat(settings.assemblySettings.extraAssemblySearchDirs).ToList(), _obfuscatedAssemblyOutputDir = settings.GetObfuscatedAssemblyOutputDir(target), }; ObfuscationPassType obfuscationPasses = settings.obfuscationPassSettings.enabledPasses; diff --git a/Editor/Unity/ObfuscationProcess.cs b/Editor/Unity/ObfuscationProcess.cs index 81fbfdc..819b66c 100644 --- a/Editor/Unity/ObfuscationProcess.cs +++ b/Editor/Unity/ObfuscationProcess.cs @@ -88,16 +88,6 @@ namespace Obfuz.Unity var assemblySearchDirs = new List { -#if UNITY_2021_1_OR_NEWER - Path.Combine(applicationContentsPath, "UnityReferenceAssemblies/unity-4.8-api/Facades"), - Path.Combine(applicationContentsPath, "UnityReferenceAssemblies/unity-4.8-api"), -#elif UNITY_2020 || UNITY_2019 - Path.Combine(applicationContentsPath, "MonoBleedingEdge/lib/mono/4.7.1-api/Facades"), - Path.Combine(applicationContentsPath, "MonoBleedingEdge/lib/mono/4.7.1-api"), -#else -#error "Unsupported Unity version" -#endif - Path.Combine(applicationContentsPath, "Managed/UnityEngine"), backupPlayerScriptAssembliesPath, }; obfuscatorBuilder.InsertTopPriorityAssemblySearchDirs(assemblySearchDirs); @@ -115,7 +105,7 @@ namespace Obfuz.Unity Obfuscator obfuz = obfuscatorBuilder.Build(); obfuz.Run(); - foreach (var dllName in settings.assemblySettings.toObfuscatedAssemblyNames) + foreach (var dllName in settings.assemblySettings.toObfuscatedAssemblyNames.Concat(settings.assemblySettings.notObfuscatedAssemblyNamesReferencingObfuscated)) { string src = $"{obfuscatorBuilder.ObfuscatedAssemblyOutputDir}/{dllName}.dll"; string dst = $"{scriptAssembliesPath}/{dllName}.dll"; @@ -147,4 +137,4 @@ namespace Obfuz.Unity } } #endif - } +}