2025-05-04 19:55:10 +08:00
|
|
|
|
using Obfuz.ObfusPasses;
|
|
|
|
|
using Obfuz.ObfusPasses.CallObfus;
|
|
|
|
|
using Obfuz.ObfusPasses.CleanUp;
|
2025-05-09 19:26:59 +08:00
|
|
|
|
using Obfuz.ObfusPasses.ConstEncrypt;
|
2025-05-04 19:55:10 +08:00
|
|
|
|
using Obfuz.ObfusPasses.ExprObfus;
|
|
|
|
|
using Obfuz.ObfusPasses.MemEncrypt;
|
|
|
|
|
using Obfuz.ObfusPasses.SymbolObfus;
|
|
|
|
|
using Obfuz.Settings;
|
2025-05-03 21:43:50 +08:00
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using UnityEditor;
|
|
|
|
|
|
|
|
|
|
namespace Obfuz
|
|
|
|
|
{
|
|
|
|
|
public class ObfuscatorBuilder
|
|
|
|
|
{
|
|
|
|
|
private List<string> _toObfuscatedAssemblyNames = new List<string>();
|
|
|
|
|
private List<string> _notObfuscatedAssemblyNamesReferencingObfuscated = new List<string>();
|
|
|
|
|
private List<string> _assemblySearchDirs = new List<string>();
|
|
|
|
|
|
|
|
|
|
private string _obfuscatedAssemblyOutputDir;
|
|
|
|
|
private List<IObfuscationPass> _obfuscationPasses = new List<IObfuscationPass>();
|
|
|
|
|
|
|
|
|
|
public List<string> ToObfuscatedAssemblyNames
|
|
|
|
|
{
|
|
|
|
|
get => _toObfuscatedAssemblyNames;
|
|
|
|
|
set => _toObfuscatedAssemblyNames = value;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public List<string> NotObfuscatedAssemblyNamesReferencingObfuscated
|
|
|
|
|
{
|
|
|
|
|
get => _notObfuscatedAssemblyNamesReferencingObfuscated;
|
|
|
|
|
set => _notObfuscatedAssemblyNamesReferencingObfuscated = value;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public List<string> AssemblySearchDirs
|
|
|
|
|
{
|
|
|
|
|
get => _assemblySearchDirs;
|
|
|
|
|
set => _assemblySearchDirs = value;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public string ObfuscatedAssemblyOutputDir
|
|
|
|
|
{
|
|
|
|
|
get => _obfuscatedAssemblyOutputDir;
|
|
|
|
|
set => _obfuscatedAssemblyOutputDir = value;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void InsertTopPriorityAssemblySearchDirs(List<string> 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),
|
|
|
|
|
};
|
2025-05-03 22:00:59 +08:00
|
|
|
|
ObfuscationPassType obfuscationPasses = settings.enabledObfuscationPasses;
|
|
|
|
|
if (obfuscationPasses.HasFlag(ObfuscationPassType.MemoryEncryption))
|
|
|
|
|
{
|
|
|
|
|
builder.AddPass(new MemoryEncryptionPass());
|
|
|
|
|
}
|
|
|
|
|
if (obfuscationPasses.HasFlag(ObfuscationPassType.CallProxy))
|
|
|
|
|
{
|
2025-05-09 20:18:24 +08:00
|
|
|
|
builder.AddPass(new CallObfusPass(settings.callObfusSettings));
|
2025-05-03 22:00:59 +08:00
|
|
|
|
}
|
|
|
|
|
if (obfuscationPasses.HasFlag(ObfuscationPassType.ConstEncryption))
|
|
|
|
|
{
|
2025-05-09 19:26:59 +08:00
|
|
|
|
builder.AddPass(new ConstEncryptPass(settings.constEncryptSettings));
|
2025-05-03 22:00:59 +08:00
|
|
|
|
}
|
|
|
|
|
if (obfuscationPasses.HasFlag(ObfuscationPassType.ExprObfuscation))
|
|
|
|
|
{
|
|
|
|
|
builder.AddPass(new ExprObfuscationPass());
|
|
|
|
|
}
|
|
|
|
|
if (obfuscationPasses.HasFlag(ObfuscationPassType.SymbolObfuscation))
|
|
|
|
|
{
|
2025-05-05 09:09:53 +08:00
|
|
|
|
builder.AddPass(new SymbolObfusPass(settings.symbolObfusSettings));
|
2025-05-03 22:00:59 +08:00
|
|
|
|
}
|
2025-05-04 19:55:10 +08:00
|
|
|
|
builder.AddPass(new CleanUpInstructionPass());
|
2025-05-03 21:43:50 +08:00
|
|
|
|
return builder;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|