using Obfuz.ObfusPasses; using Obfuz.ObfusPasses.CallObfus; using Obfuz.ObfusPasses.CleanUp; using Obfuz.ObfusPasses.ConstObfus; using Obfuz.ObfusPasses.ExprObfus; using Obfuz.ObfusPasses.MemEncrypt; using Obfuz.ObfusPasses.SymbolObfus; using Obfuz.Settings; using System.Collections.Generic; using System.Linq; using UnityEditor; namespace Obfuz { public class ObfuscatorBuilder { private List _toObfuscatedAssemblyNames = new List(); private List _notObfuscatedAssemblyNamesReferencingObfuscated = new List(); private List _assemblySearchDirs = new List(); private string _obfuscatedAssemblyOutputDir; private List _obfuscationPasses = new List(); public List ToObfuscatedAssemblyNames { get => _toObfuscatedAssemblyNames; set => _toObfuscatedAssemblyNames = value; } public List NotObfuscatedAssemblyNamesReferencingObfuscated { get => _notObfuscatedAssemblyNamesReferencingObfuscated; set => _notObfuscatedAssemblyNamesReferencingObfuscated = value; } public List AssemblySearchDirs { get => _assemblySearchDirs; set => _assemblySearchDirs = value; } public string ObfuscatedAssemblyOutputDir { get => _obfuscatedAssemblyOutputDir; set => _obfuscatedAssemblyOutputDir = value; } public void InsertTopPriorityAssemblySearchDirs(List assemblySearchDirs) { _assemblySearchDirs.InsertRange(0, assemblySearchDirs); } public ObfuscatorBuilder AddPass(IObfuscationPass pass) { _obfuscationPasses.Add(pass); return this; } public Obfuscator Build() { return new Obfuscator(_toObfuscatedAssemblyNames, _notObfuscatedAssemblyNamesReferencingObfuscated, _assemblySearchDirs, _obfuscatedAssemblyOutputDir, _obfuscationPasses); } public static ObfuscatorBuilder FromObfuzSettings(ObfuzSettings settings, BuildTarget target) { var builder = new ObfuscatorBuilder { _toObfuscatedAssemblyNames = settings.toObfuscatedAssemblyNames.ToList(), _notObfuscatedAssemblyNamesReferencingObfuscated = settings.notObfuscatedAssemblyNamesReferencingObfuscated.ToList(), _assemblySearchDirs = settings.extraAssemblySearchDirs.ToList(), _obfuscatedAssemblyOutputDir = settings.GetObfuscatedAssemblyOutputDir(target), }; ObfuscationPassType obfuscationPasses = settings.enabledObfuscationPasses; if (obfuscationPasses.HasFlag(ObfuscationPassType.MemoryEncryption)) { builder.AddPass(new MemoryEncryptionPass()); } if (obfuscationPasses.HasFlag(ObfuscationPassType.CallProxy)) { builder.AddPass(new ProxyCallPass()); } if (obfuscationPasses.HasFlag(ObfuscationPassType.ConstEncryption)) { builder.AddPass(new DataVirtualizationPass()); } if (obfuscationPasses.HasFlag(ObfuscationPassType.ExprObfuscation)) { builder.AddPass(new ExprObfuscationPass()); } if (obfuscationPasses.HasFlag(ObfuscationPassType.SymbolObfuscation)) { builder.AddPass(new RenameSymbolPass(settings.ruleFiles.ToList(), settings.mappingFile)); } builder.AddPass(new CleanUpInstructionPass()); return builder; } } }