重构 SymbolObfus配置
parent
d741eed042
commit
3c46760ac7
|
@ -9,6 +9,11 @@ namespace Obfuz.ObfusPasses.SymbolObfus
|
||||||
{
|
{
|
||||||
public static class NameMakerFactory
|
public static class NameMakerFactory
|
||||||
{
|
{
|
||||||
|
public static INameMaker CreateDebugNameMaker()
|
||||||
|
{
|
||||||
|
return new TestNameMaker();
|
||||||
|
}
|
||||||
|
|
||||||
public static INameMaker CreateNameMakerBaseASCIICharSet()
|
public static INameMaker CreateNameMakerBaseASCIICharSet()
|
||||||
{
|
{
|
||||||
var words = new List<string>();
|
var words = new List<string>();
|
||||||
|
|
|
@ -11,7 +11,7 @@ using UnityEngine;
|
||||||
namespace Obfuz.ObfusPasses.SymbolObfus
|
namespace Obfuz.ObfusPasses.SymbolObfus
|
||||||
{
|
{
|
||||||
|
|
||||||
public class ObfuscateRuleConfig : RenamePolicyBase
|
public class RuleBasedRenamePolicy : RenamePolicyBase
|
||||||
{
|
{
|
||||||
enum ObfuscationType
|
enum ObfuscationType
|
||||||
{
|
{
|
||||||
|
@ -707,7 +707,7 @@ namespace Obfuz.ObfusPasses.SymbolObfus
|
||||||
|
|
||||||
private readonly HashSet<string> _obfuscationAssemblyNames;
|
private readonly HashSet<string> _obfuscationAssemblyNames;
|
||||||
|
|
||||||
public ObfuscateRuleConfig(List<string> obfuscationAssemblyNames)
|
public RuleBasedRenamePolicy(List<string> obfuscationAssemblyNames)
|
||||||
{
|
{
|
||||||
this._obfuscationAssemblyNames = obfuscationAssemblyNames.ToHashSet();
|
this._obfuscationAssemblyNames = obfuscationAssemblyNames.ToHashSet();
|
||||||
}
|
}
|
|
@ -1,4 +1,5 @@
|
||||||
using System;
|
using Obfuz.Settings;
|
||||||
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
@ -6,13 +7,13 @@ using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace Obfuz.ObfusPasses.SymbolObfus
|
namespace Obfuz.ObfusPasses.SymbolObfus
|
||||||
{
|
{
|
||||||
public class RenameSymbolPass : ObfuscationPassBase
|
public class SymbolObfusPass : ObfuscationPassBase
|
||||||
{
|
{
|
||||||
private SymbolRename _symbolRename;
|
private SymbolRename _symbolRename;
|
||||||
|
|
||||||
public RenameSymbolPass(List<string> obfuscationRuleFiles, string mappingXmlPath)
|
public SymbolObfusPass(SymbolObfusSettings settings)
|
||||||
{
|
{
|
||||||
_symbolRename = new SymbolRename(mappingXmlPath, obfuscationRuleFiles);
|
_symbolRename = new SymbolRename(settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void Start(ObfuscationPassContext ctx)
|
public override void Start(ObfuscationPassContext ctx)
|
|
@ -1,5 +1,6 @@
|
||||||
using dnlib.DotNet;
|
using dnlib.DotNet;
|
||||||
using Obfuz.ObfusPasses.SymbolObfus;
|
using Obfuz.ObfusPasses.SymbolObfus;
|
||||||
|
using Obfuz.Settings;
|
||||||
using Obfuz.Utils;
|
using Obfuz.Utils;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
|
@ -36,7 +37,7 @@ namespace Obfuz.ObfusPasses.SymbolObfus
|
||||||
private List<ModuleDef> _obfuscatedAndNotObfuscatedModules;
|
private List<ModuleDef> _obfuscatedAndNotObfuscatedModules;
|
||||||
private List<AssemblyReferenceInfo> _obfuzAssemblies;
|
private List<AssemblyReferenceInfo> _obfuzAssemblies;
|
||||||
private HashSet<ModuleDef> _toObfuscatedModuleSet;
|
private HashSet<ModuleDef> _toObfuscatedModuleSet;
|
||||||
private ObfuscateRuleConfig _obfuscateRuleConfig;
|
private RuleBasedRenamePolicy _obfuscateRuleConfig;
|
||||||
private IRenamePolicy _renamePolicy;
|
private IRenamePolicy _renamePolicy;
|
||||||
private INameMaker _nameMaker;
|
private INameMaker _nameMaker;
|
||||||
private readonly Dictionary<ModuleDef, List<CustomAttributeInfo>> _customAttributeArgumentsWithTypeByMods = new Dictionary<ModuleDef, List<CustomAttributeInfo>>();
|
private readonly Dictionary<ModuleDef, List<CustomAttributeInfo>> _customAttributeArgumentsWithTypeByMods = new Dictionary<ModuleDef, List<CustomAttributeInfo>>();
|
||||||
|
@ -51,12 +52,13 @@ namespace Obfuz.ObfusPasses.SymbolObfus
|
||||||
public List<CANamedArgument> namedArguments;
|
public List<CANamedArgument> namedArguments;
|
||||||
}
|
}
|
||||||
|
|
||||||
public SymbolRename(string mappingXmlPath, List<string> obfuscationRuleFiles)
|
public SymbolRename(SymbolObfusSettings settings)
|
||||||
{
|
{
|
||||||
_mappingXmlPath = mappingXmlPath;
|
_mappingXmlPath = settings.mappingFile;
|
||||||
_obfuscationRuleFiles = obfuscationRuleFiles;
|
_obfuscationRuleFiles = settings.ruleFiles.ToList();
|
||||||
_renameRecordMap = new RenameRecordMap(mappingXmlPath);
|
_renameRecordMap = new RenameRecordMap(settings.mappingFile);
|
||||||
_virtualMethodGroupCalculator = new VirtualMethodGroupCalculator();
|
_virtualMethodGroupCalculator = new VirtualMethodGroupCalculator();
|
||||||
|
_nameMaker = settings.debug ? NameMakerFactory.CreateDebugNameMaker() : NameMakerFactory.CreateNameMakerBaseASCIICharSet();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Init(ObfuscationPassContext ctx)
|
public void Init(ObfuscationPassContext ctx)
|
||||||
|
@ -66,10 +68,9 @@ namespace Obfuz.ObfusPasses.SymbolObfus
|
||||||
_obfuscatedAndNotObfuscatedModules = ctx.obfuscatedAndNotObfuscatedModules;
|
_obfuscatedAndNotObfuscatedModules = ctx.obfuscatedAndNotObfuscatedModules;
|
||||||
_toObfuscatedModuleSet = ctx.toObfuscatedModules.ToHashSet();
|
_toObfuscatedModuleSet = ctx.toObfuscatedModules.ToHashSet();
|
||||||
_obfuzAssemblies = BuildAssemblyReferenceInfos(ctx);
|
_obfuzAssemblies = BuildAssemblyReferenceInfos(ctx);
|
||||||
_obfuscateRuleConfig = new ObfuscateRuleConfig(ctx.toObfuscatedAssemblyNames);
|
_obfuscateRuleConfig = new RuleBasedRenamePolicy(ctx.toObfuscatedAssemblyNames);
|
||||||
_obfuscateRuleConfig.LoadXmls(_obfuscationRuleFiles);
|
_obfuscateRuleConfig.LoadXmls(_obfuscationRuleFiles);
|
||||||
_renamePolicy = new CacheRenamePolicy(new CombineRenamePolicy(new SystemRenamePolicy(), new UnityRenamePolicy(), _obfuscateRuleConfig));
|
_renamePolicy = new CacheRenamePolicy(new CombineRenamePolicy(new SystemRenamePolicy(), new UnityRenamePolicy(), _obfuscateRuleConfig));
|
||||||
_nameMaker = NameMakerFactory.CreateNameMakerBaseASCIICharSet();
|
|
||||||
BuildCustomAttributeArguments();
|
BuildCustomAttributeArguments();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -93,7 +93,7 @@ namespace Obfuz
|
||||||
}
|
}
|
||||||
if (obfuscationPasses.HasFlag(ObfuscationPassType.SymbolObfuscation))
|
if (obfuscationPasses.HasFlag(ObfuscationPassType.SymbolObfuscation))
|
||||||
{
|
{
|
||||||
builder.AddPass(new RenameSymbolPass(settings.ruleFiles.ToList(), settings.mappingFile));
|
builder.AddPass(new SymbolObfusPass(settings.symbolObfusSettings));
|
||||||
}
|
}
|
||||||
builder.AddPass(new CleanUpInstructionPass());
|
builder.AddPass(new CleanUpInstructionPass());
|
||||||
return builder;
|
return builder;
|
||||||
|
|
|
@ -23,11 +23,8 @@ namespace Obfuz.Settings
|
||||||
[Tooltip("enable obfuscation pass")]
|
[Tooltip("enable obfuscation pass")]
|
||||||
public ObfuscationPassType enabledObfuscationPasses = ObfuscationPassType.All;
|
public ObfuscationPassType enabledObfuscationPasses = ObfuscationPassType.All;
|
||||||
|
|
||||||
[Tooltip("path of mapping.xml")]
|
[Tooltip("symbol obfuscation settings")]
|
||||||
public string mappingFile = "Assets/Obfuz/mapping.xml";
|
public SymbolObfusSettings symbolObfusSettings;
|
||||||
|
|
||||||
[Tooltip("obfuscation rule files for assemblies")]
|
|
||||||
public string[] ruleFiles;
|
|
||||||
|
|
||||||
[Tooltip("extra assembly search dirs")]
|
[Tooltip("extra assembly search dirs")]
|
||||||
public string[] extraAssemblySearchDirs;
|
public string[] extraAssemblySearchDirs;
|
||||||
|
|
|
@ -31,11 +31,12 @@ namespace Obfuz.Settings
|
||||||
private SerializedProperty _enable;
|
private SerializedProperty _enable;
|
||||||
private SerializedProperty _toObfuscatedAssemblyNames;
|
private SerializedProperty _toObfuscatedAssemblyNames;
|
||||||
private SerializedProperty _notObfuscatedAssemblyNamesReferencingObfuscated;
|
private SerializedProperty _notObfuscatedAssemblyNamesReferencingObfuscated;
|
||||||
private SerializedProperty _enabledObfuscationPasses;
|
|
||||||
private SerializedProperty _mappingFile;
|
|
||||||
private SerializedProperty _ruleFiles;
|
|
||||||
private SerializedProperty _extraAssemblySearchDirs;
|
private SerializedProperty _extraAssemblySearchDirs;
|
||||||
|
|
||||||
|
private SerializedProperty _enabledObfuscationPasses;
|
||||||
|
|
||||||
|
private SerializedProperty _symbolObfusSettings;
|
||||||
|
|
||||||
public ObfuzSettingsProvider() : base("Project/Obfuz", SettingsScope.Project)
|
public ObfuzSettingsProvider() : base("Project/Obfuz", SettingsScope.Project)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
@ -59,10 +60,10 @@ namespace Obfuz.Settings
|
||||||
_enable = _serializedObject.FindProperty("enable");
|
_enable = _serializedObject.FindProperty("enable");
|
||||||
_toObfuscatedAssemblyNames = _serializedObject.FindProperty("toObfuscatedAssemblyNames");
|
_toObfuscatedAssemblyNames = _serializedObject.FindProperty("toObfuscatedAssemblyNames");
|
||||||
_notObfuscatedAssemblyNamesReferencingObfuscated = _serializedObject.FindProperty("notObfuscatedAssemblyNamesReferencingObfuscated");
|
_notObfuscatedAssemblyNamesReferencingObfuscated = _serializedObject.FindProperty("notObfuscatedAssemblyNamesReferencingObfuscated");
|
||||||
_enabledObfuscationPasses = _serializedObject.FindProperty("enabledObfuscationPasses");
|
|
||||||
_mappingFile = _serializedObject.FindProperty("mappingFile");
|
|
||||||
_ruleFiles = _serializedObject.FindProperty("ruleFiles");
|
|
||||||
_extraAssemblySearchDirs = _serializedObject.FindProperty("extraAssemblySearchDirs");
|
_extraAssemblySearchDirs = _serializedObject.FindProperty("extraAssemblySearchDirs");
|
||||||
|
_enabledObfuscationPasses = _serializedObject.FindProperty("enabledObfuscationPasses");
|
||||||
|
|
||||||
|
_symbolObfusSettings = _serializedObject.FindProperty("symbolObfusSettings");
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void OnGUI(string searchContext)
|
public override void OnGUI(string searchContext)
|
||||||
|
@ -77,10 +78,10 @@ namespace Obfuz.Settings
|
||||||
EditorGUILayout.PropertyField(_enable);
|
EditorGUILayout.PropertyField(_enable);
|
||||||
EditorGUILayout.PropertyField(_toObfuscatedAssemblyNames);
|
EditorGUILayout.PropertyField(_toObfuscatedAssemblyNames);
|
||||||
EditorGUILayout.PropertyField(_notObfuscatedAssemblyNamesReferencingObfuscated);
|
EditorGUILayout.PropertyField(_notObfuscatedAssemblyNamesReferencingObfuscated);
|
||||||
EditorGUILayout.PropertyField(_enabledObfuscationPasses);
|
|
||||||
EditorGUILayout.PropertyField(_mappingFile);
|
|
||||||
EditorGUILayout.PropertyField(_ruleFiles);
|
|
||||||
EditorGUILayout.PropertyField(_extraAssemblySearchDirs);
|
EditorGUILayout.PropertyField(_extraAssemblySearchDirs);
|
||||||
|
EditorGUILayout.PropertyField(_enabledObfuscationPasses);
|
||||||
|
EditorGUILayout.PropertyField(_symbolObfusSettings);
|
||||||
|
|
||||||
|
|
||||||
if (EditorGUI.EndChangeCheck())
|
if (EditorGUI.EndChangeCheck())
|
||||||
{
|
{
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace Obfuz.Settings
|
||||||
|
{
|
||||||
|
[Serializable]
|
||||||
|
public class SymbolObfusSettings
|
||||||
|
{
|
||||||
|
public bool debug;
|
||||||
|
|
||||||
|
[Tooltip("path of mapping.xml")]
|
||||||
|
public string mappingFile = "Assets/Obfuz/SymbolObfus/mapping.xml";
|
||||||
|
|
||||||
|
[Tooltip("obfuscation rule files for assemblies")]
|
||||||
|
public string[] ruleFiles;
|
||||||
|
}
|
||||||
|
}
|
|
@ -24,7 +24,7 @@ namespace Obfuz.Utils
|
||||||
string assPath = Path.Combine(path, assemblyName + ".dll");
|
string assPath = Path.Combine(path, assemblyName + ".dll");
|
||||||
if (File.Exists(assPath))
|
if (File.Exists(assPath))
|
||||||
{
|
{
|
||||||
Debug.Log($"resolve {assemblyName} at {assPath}");
|
//Debug.Log($"resolve {assemblyName} at {assPath}");
|
||||||
return assPath;
|
return assPath;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue