diff --git a/com.code-philosophy.obfuz/Editor/Unity/ObfuscationProcess.cs b/com.code-philosophy.obfuz/Editor/Unity/ObfuscationProcess.cs index 4770a57..0d64bb0 100644 --- a/com.code-philosophy.obfuz/Editor/Unity/ObfuscationProcess.cs +++ b/com.code-philosophy.obfuz/Editor/Unity/ObfuscationProcess.cs @@ -12,6 +12,7 @@ using UnityEditor.Compilation; using Obfuz.Utils; using FileUtil = Obfuz.Utils.FileUtil; using Obfuz.Settings; +using dnlib.DotNet; namespace Obfuz.Unity { @@ -49,6 +50,27 @@ namespace Obfuz.Unity } } + public static void ValidateReferences(string stagingAreaTempManagedDllDir, HashSet assembliesToObfuscated, HashSet obfuscationRelativeAssemblyNames) + { + var modCtx = ModuleDef.CreateModuleContext(); + var asmResolver = (AssemblyResolver)modCtx.AssemblyResolver; + + foreach (string assFile in Directory.GetFiles(stagingAreaTempManagedDllDir, "*.dll", SearchOption.AllDirectories)) + { + ModuleDefMD mod = ModuleDefMD.Load(File.ReadAllBytes(assFile), modCtx); + string modName = mod.Assembly.Name; + foreach (AssemblyRef assRef in mod.GetAssemblyRefs()) + { + string refAssName = assRef.Name; + if (assembliesToObfuscated.Contains(refAssName) && !obfuscationRelativeAssemblyNames.Contains(modName)) + { + throw new BuildFailedException($"assembly:{modName} references to obfuscated assembly:{refAssName}, but it's not been added to ObfuzSettings.AssemblySettings.NonObfuscatedButReferencingObfuscatedAssemblies."); + } + } + mod.Dispose(); + } + } + private static void RunObfuscate(BuildFile[] files) { ObfuzSettings settings = ObfuzSettings.Instance; @@ -76,6 +98,8 @@ namespace Obfuz.Unity }; obfuscatorBuilder.InsertTopPriorityAssemblySearchPaths(assemblySearchDirs); + ValidateReferences(stagingAreaTempManagedDllDir, new HashSet(obfuscatorBuilder.AssembliesToObfuscate), obfuscationRelativeAssemblyNames); + OnObfuscationBegin?.Invoke(new ObfuscationBeginEventArgs { diff --git a/com.code-philosophy.obfuz4hybridclr/Editor/ObfuscateUtil.cs b/com.code-philosophy.obfuz4hybridclr/Editor/ObfuscateUtil.cs index ea52e32..b751235 100644 --- a/com.code-philosophy.obfuz4hybridclr/Editor/ObfuscateUtil.cs +++ b/com.code-philosophy.obfuz4hybridclr/Editor/ObfuscateUtil.cs @@ -12,6 +12,7 @@ using HybridCLR.Editor.Installer; using System.IO; using HybridCLR.Editor.ABI; using UnityEngine; +using Obfuz.Unity; namespace Obfuz4HybridCLR { @@ -38,9 +39,12 @@ namespace Obfuz4HybridCLR string hotUpdateDllPath = SettingsUtil.GetHotUpdateDllsOutputDirByTarget(target); BashUtil.RemoveDir(hotUpdateDllPath); CompileDllCommand.CompileDll(target); + + AssemblySettings assemblySettings = ObfuzSettings.Instance.assemblySettings; + ObfuscationProcess.ValidateReferences(hotUpdateDllPath, new HashSet(assemblySettings.GetAssembliesToObfuscate()), new HashSet(assemblySettings.GetObfuscationRelativeAssemblyNames())); var assemblySearchPaths = new List { - SettingsUtil.GetHotUpdateDllsOutputDirByTarget(target), + hotUpdateDllPath, }; Obfuscate(target, assemblySearchPaths, hotUpdateDllPath); }