obfuz/Editor/ObfuscatorBuilder.cs

150 lines
5.3 KiB
C#
Raw Normal View History

using Obfuz.EncryptionVM;
using Obfuz.ObfusPasses;
2025-05-04 19:55:10 +08:00
using Obfuz.ObfusPasses.CallObfus;
2025-05-09 19:26:59 +08:00
using Obfuz.ObfusPasses.ConstEncrypt;
2025-05-04 19:55:10 +08:00
using Obfuz.ObfusPasses.ExprObfus;
2025-05-10 19:09:44 +08:00
using Obfuz.ObfusPasses.FieldEncrypt;
2025-05-04 19:55:10 +08:00
using Obfuz.ObfusPasses.SymbolObfus;
using Obfuz.Settings;
2025-05-03 21:43:50 +08:00
using System.Collections.Generic;
using System.IO;
2025-05-03 21:43:50 +08:00
using System.Linq;
using UnityEditor;
namespace Obfuz
{
public class ObfuscatorBuilder
{
private string _secret;
private string _secretOutputPath;
private int _randomSeed;
2025-05-11 12:48:53 +08:00
private string _encryptionVmGenerationSecretKey;
2025-05-11 17:36:58 +08:00
private int _encryptionVmOpCodeCount;
private string _encryptionVmCodeFile;
2025-05-03 21:43:50 +08:00
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 string Secret
2025-05-11 09:17:04 +08:00
{
get => _secret;
set => _secret = value;
2025-05-11 09:17:04 +08:00
}
public string SecretOutputPath
2025-05-11 09:17:04 +08:00
{
get => _secretOutputPath;
set => _secretOutputPath = value;
}
public int RandomSeed
{
get => _randomSeed;
set => _randomSeed = value;
2025-05-11 09:17:04 +08:00
}
2025-05-11 12:48:53 +08:00
public string EncryptionVmGenerationSecretKey
{
get => _encryptionVmGenerationSecretKey;
set => _encryptionVmGenerationSecretKey = value;
}
2025-05-11 17:36:58 +08:00
public int EncryptionVmOpCodeCount
{
get => _encryptionVmOpCodeCount;
set => _encryptionVmOpCodeCount = value;
}
public string EncryptionVmCodeFile
{
get => _encryptionVmCodeFile;
set => _encryptionVmCodeFile = value;
}
2025-05-03 21:43:50 +08:00
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;
}
2025-05-11 17:36:58 +08:00
public List<IObfuscationPass> ObfuscationPasses { get => _obfuscationPasses; set => _obfuscationPasses = value; }
2025-05-03 21:43:50 +08:00
public void InsertTopPriorityAssemblySearchDirs(List<string> assemblySearchDirs)
{
_assemblySearchDirs.InsertRange(0, assemblySearchDirs);
}
public ObfuscatorBuilder AddPass(IObfuscationPass pass)
{
_obfuscationPasses.Add(pass);
return this;
}
public Obfuscator Build()
{
2025-05-11 17:36:58 +08:00
return new Obfuscator(this);
2025-05-03 21:43:50 +08:00
}
public static ObfuscatorBuilder FromObfuzSettings(ObfuzSettings settings, BuildTarget target)
{
var builder = new ObfuscatorBuilder
{
2025-05-12 08:46:44 +08:00
_secret = settings.secretSettings.secret,
_secretOutputPath = settings.secretSettings.secretOutputPath,
_randomSeed = settings.secretSettings.randomSeed,
_encryptionVmGenerationSecretKey = settings.encryptionVMSettings.codeGenerationSecret,
2025-05-11 17:36:58 +08:00
_encryptionVmOpCodeCount = settings.encryptionVMSettings.encryptionOpCodeCount,
_encryptionVmCodeFile = settings.encryptionVMSettings.codeOutputPath,
2025-05-12 08:46:44 +08:00
_toObfuscatedAssemblyNames = settings.assemblySettings.toObfuscatedAssemblyNames.ToList(),
_notObfuscatedAssemblyNamesReferencingObfuscated = settings.assemblySettings.notObfuscatedAssemblyNamesReferencingObfuscated.ToList(),
_assemblySearchDirs = settings.assemblySettings.extraAssemblySearchDirs.ToList(),
2025-05-03 21:43:50 +08:00
_obfuscatedAssemblyOutputDir = settings.GetObfuscatedAssemblyOutputDir(target),
};
2025-05-12 08:46:44 +08:00
ObfuscationPassType obfuscationPasses = settings.obfuscationPassSettings.enabledPasses;
2025-05-11 12:48:53 +08:00
if (obfuscationPasses.HasFlag(ObfuscationPassType.ConstEncrypt))
{
builder.AddPass(new ConstEncryptPass(settings.constEncryptSettings));
}
2025-05-11 08:24:23 +08:00
if (obfuscationPasses.HasFlag(ObfuscationPassType.FieldEncrypt))
{
2025-05-10 19:50:03 +08:00
builder.AddPass(new FieldEncryptPass(settings.fieldEncryptSettings));
}
2025-05-11 08:24:23 +08:00
if (obfuscationPasses.HasFlag(ObfuscationPassType.CallObfus))
{
2025-05-09 20:18:24 +08:00
builder.AddPass(new CallObfusPass(settings.callObfusSettings));
}
2025-05-11 08:24:23 +08:00
if (obfuscationPasses.HasFlag(ObfuscationPassType.ExprObfus))
{
2025-05-10 18:25:43 +08:00
builder.AddPass(new ExprObfusPass());
}
2025-05-11 08:24:23 +08:00
if (obfuscationPasses.HasFlag(ObfuscationPassType.SymbolObfus))
{
2025-05-05 09:09:53 +08:00
builder.AddPass(new SymbolObfusPass(settings.symbolObfusSettings));
}
2025-05-03 21:43:50 +08:00
return builder;
}
}
}