重构SymbolObfus,将NameMaker和Policy移到子目录下

backup
walon 2025-05-05 12:38:52 +08:00
parent 214767623f
commit ebce42a8d6
22 changed files with 44 additions and 43 deletions

View File

@ -4,7 +4,7 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace Obfuz.ObfusPasses namespace Obfuz
{ {
public interface IObfuscationPass public interface IObfuscationPass
{ {

View File

@ -11,14 +11,14 @@ using UnityEngine.Assertions;
namespace Obfuz.ObfusPasses.ConstObfus namespace Obfuz.ObfusPasses.ConstObfus
{ {
public class DataVirtualizationPass : InstructionObfuscationPassBase public class ConstObfusPass : InstructionObfuscationPassBase
{ {
private IDataObfuscationPolicy _dataObfuscatorPolicy; private IConstObfuscationPolicy _dataObfuscatorPolicy;
private IDataObfuscator _dataObfuscator; private IDataObfuscator _dataObfuscator;
public override void Start(ObfuscationPassContext ctx) public override void Start(ObfuscationPassContext ctx)
{ {
_dataObfuscatorPolicy = new ConfigDataObfuscationPolicy(); _dataObfuscatorPolicy = new RuleBasedObfuscationPolicy();
_dataObfuscator = new DefaultDataObfuscator(); _dataObfuscator = new DefaultDataObfuscator();
} }

View File

@ -2,7 +2,7 @@
namespace Obfuz.ObfusPasses.ConstObfus namespace Obfuz.ObfusPasses.ConstObfus
{ {
public abstract class DataObfuscationPolicyBase : IDataObfuscationPolicy public abstract class ConstObfuscationPolicyBase : IConstObfuscationPolicy
{ {
public virtual bool NeedObfuscateMethod(MethodDef method) public virtual bool NeedObfuscateMethod(MethodDef method)
{ {

View File

@ -7,7 +7,7 @@ using System.Threading.Tasks;
namespace Obfuz.ObfusPasses.ConstObfus namespace Obfuz.ObfusPasses.ConstObfus
{ {
public interface IDataObfuscationPolicy public interface IConstObfuscationPolicy
{ {
bool NeedObfuscateMethod(MethodDef method); bool NeedObfuscateMethod(MethodDef method);

View File

@ -7,7 +7,7 @@ using System.Threading.Tasks;
namespace Obfuz.ObfusPasses.ConstObfus namespace Obfuz.ObfusPasses.ConstObfus
{ {
public class ConfigDataObfuscationPolicy : DataObfuscationPolicyBase public class RuleBasedObfuscationPolicy : ConstObfuscationPolicyBase
{ {
public override bool NeedObfuscateMethod(MethodDef method) public override bool NeedObfuscateMethod(MethodDef method)
{ {

View File

@ -2,7 +2,7 @@
namespace Obfuz.ObfusPasses.SymbolObfus namespace Obfuz.ObfusPasses.SymbolObfus
{ {
public interface IRenamePolicy public interface IObfuscationPolicy
{ {
bool NeedRename(TypeDef typeDef); bool NeedRename(TypeDef typeDef);

View File

@ -1,7 +1,7 @@
using dnlib.DotNet; using dnlib.DotNet;
using System.Text; using System.Text;
namespace Obfuz.ObfusPasses.SymbolObfus namespace Obfuz.ObfusPasses.SymbolObfus.NameMakers
{ {
public class DebugNameMaker : NameMakerBase public class DebugNameMaker : NameMakerBase
{ {

View File

@ -1,4 +1,4 @@
namespace Obfuz.ObfusPasses.SymbolObfus namespace Obfuz.ObfusPasses.SymbolObfus.NameMakers
{ {
public interface INameScope public interface INameScope
{ {

View File

@ -5,7 +5,7 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace Obfuz.ObfusPasses.SymbolObfus namespace Obfuz.ObfusPasses.SymbolObfus.NameMakers
{ {
public abstract class NameMakerBase : INameMaker public abstract class NameMakerBase : INameMaker
{ {

View File

@ -5,7 +5,7 @@ using System.Runtime.Remoting.Messaging;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace Obfuz.ObfusPasses.SymbolObfus namespace Obfuz.ObfusPasses.SymbolObfus.NameMakers
{ {
public static class NameMakerFactory public static class NameMakerFactory
{ {
@ -22,7 +22,7 @@ namespace Obfuz.ObfusPasses.SymbolObfus
words.Add(((char)('a' + i)).ToString()); words.Add(((char)('a' + i)).ToString());
words.Add(((char)('A' + i)).ToString()); words.Add(((char)('A' + i)).ToString());
} }
return new NameMaker(namePrefix, words); return new WordSetNameMaker(namePrefix, words);
} }
} }
} }

View File

@ -2,7 +2,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
namespace Obfuz.ObfusPasses.SymbolObfus namespace Obfuz.ObfusPasses.SymbolObfus.NameMakers
{ {
public class NameScope : NameScopeBase public class NameScope : NameScopeBase

View File

@ -1,7 +1,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
namespace Obfuz.ObfusPasses.SymbolObfus namespace Obfuz.ObfusPasses.SymbolObfus.NameMakers
{ {
public abstract class NameScopeBase : INameScope public abstract class NameScopeBase : INameScope
{ {

View File

@ -4,15 +4,15 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace Obfuz.ObfusPasses.SymbolObfus namespace Obfuz.ObfusPasses.SymbolObfus.NameMakers
{ {
public class NameMaker : NameMakerBase public class WordSetNameMaker : NameMakerBase
{ {
private readonly string _namePrefix; private readonly string _namePrefix;
private readonly List<string> _wordSet; private readonly List<string> _wordSet;
public NameMaker(string namePrefix, List<string> wordSet) public WordSetNameMaker(string namePrefix, List<string> wordSet)
{ {
_namePrefix = namePrefix; _namePrefix = namePrefix;
_wordSet = wordSet; _wordSet = wordSet;

View File

@ -2,15 +2,15 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
namespace Obfuz.ObfusPasses.SymbolObfus namespace Obfuz.ObfusPasses.SymbolObfus.Policies
{ {
public class CacheRenamePolicy : RenamePolicyBase public class CacheRenamePolicy : ObfuscationPolicyBase
{ {
private readonly IRenamePolicy _underlyingPolicy; private readonly IObfuscationPolicy _underlyingPolicy;
private readonly Dictionary<object, bool> _computeCache = new Dictionary<object, bool>(); private readonly Dictionary<object, bool> _computeCache = new Dictionary<object, bool>();
public CacheRenamePolicy(IRenamePolicy underlyingPolicy) public CacheRenamePolicy(IObfuscationPolicy underlyingPolicy)
{ {
_underlyingPolicy = underlyingPolicy; _underlyingPolicy = underlyingPolicy;
} }

View File

@ -1,13 +1,13 @@
using dnlib.DotNet; using dnlib.DotNet;
using System.Linq; using System.Linq;
namespace Obfuz.ObfusPasses.SymbolObfus namespace Obfuz.ObfusPasses.SymbolObfus.Policies
{ {
public class CombineRenamePolicy : IRenamePolicy public class CombineRenamePolicy : IObfuscationPolicy
{ {
private readonly IRenamePolicy[] _policies; private readonly IObfuscationPolicy[] _policies;
public CombineRenamePolicy(params IRenamePolicy[] policies) public CombineRenamePolicy(params IObfuscationPolicy[] policies)
{ {
_policies = policies; _policies = policies;
} }

View File

@ -1,8 +1,8 @@
using dnlib.DotNet; using dnlib.DotNet;
namespace Obfuz.ObfusPasses.SymbolObfus namespace Obfuz.ObfusPasses.SymbolObfus.Policies
{ {
public abstract class RenamePolicyBase : IRenamePolicy public abstract class ObfuscationPolicyBase : IObfuscationPolicy
{ {
public virtual bool NeedRename(TypeDef typeDef) public virtual bool NeedRename(TypeDef typeDef)

View File

@ -9,10 +9,10 @@ using System.Xml;
using System.Xml.Linq; using System.Xml.Linq;
using UnityEngine; using UnityEngine;
namespace Obfuz.ObfusPasses.SymbolObfus namespace Obfuz.ObfusPasses.SymbolObfus.Policies
{ {
public class RuleBasedRenamePolicy : RenamePolicyBase public class RuleBasedRenamePolicy : ObfuscationPolicyBase
{ {
enum ObfuscationType enum ObfuscationType
{ {
@ -500,7 +500,7 @@ namespace Obfuz.ObfusPasses.SymbolObfus
return rule; return rule;
} }
public void LoadXmls(List<string> xmlFiles) private void LoadXmls(List<string> xmlFiles)
{ {
var rawAssemblySpecElements = new List<XmlElement>(); var rawAssemblySpecElements = new List<XmlElement>();
foreach (string file in xmlFiles) foreach (string file in xmlFiles)
@ -709,9 +709,10 @@ namespace Obfuz.ObfusPasses.SymbolObfus
private readonly HashSet<string> _obfuscationAssemblyNames; private readonly HashSet<string> _obfuscationAssemblyNames;
public RuleBasedRenamePolicy(List<string> obfuscationAssemblyNames) public RuleBasedRenamePolicy(List<string> obfuscationAssemblyNames, List<string> xmlFiles)
{ {
this._obfuscationAssemblyNames = obfuscationAssemblyNames.ToHashSet(); this._obfuscationAssemblyNames = obfuscationAssemblyNames.ToHashSet();
LoadXmls(xmlFiles);
} }
private TypeDefComputeCache GetOrCreateTypeDefRenameComputeCache(TypeDef typeDef) private TypeDefComputeCache GetOrCreateTypeDefRenameComputeCache(TypeDef typeDef)

View File

@ -1,8 +1,8 @@
using dnlib.DotNet; using dnlib.DotNet;
namespace Obfuz.ObfusPasses.SymbolObfus namespace Obfuz.ObfusPasses.SymbolObfus.Policies
{ {
public class SystemRenamePolicy : RenamePolicyBase public class SystemRenamePolicy : ObfuscationPolicyBase
{ {
public override bool NeedRename(TypeDef typeDef) public override bool NeedRename(TypeDef typeDef)
{ {

View File

@ -6,10 +6,10 @@ using System.Runtime.InteropServices;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace Obfuz.ObfusPasses.SymbolObfus namespace Obfuz.ObfusPasses.SymbolObfus.Policies
{ {
public class UnityRenamePolicy : RenamePolicyBase public class UnityRenamePolicy : ObfuscationPolicyBase
{ {
private static HashSet<string> s_monoBehaviourEvents = new HashSet<string> { private static HashSet<string> s_monoBehaviourEvents = new HashSet<string> {
"Awake", "Awake",

View File

@ -1,5 +1,7 @@
using dnlib.DotNet; using dnlib.DotNet;
using Obfuz.ObfusPasses.SymbolObfus; using Obfuz.ObfusPasses.SymbolObfus;
using Obfuz.ObfusPasses.SymbolObfus.NameMakers;
using Obfuz.ObfusPasses.SymbolObfus.Policies;
using Obfuz.Settings; using Obfuz.Settings;
using Obfuz.Utils; using Obfuz.Utils;
using System; using System;
@ -38,8 +40,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 RuleBasedRenamePolicy _obfuscateRuleConfig; private IObfuscationPolicy _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>>();
private readonly RenameRecordMap _renameRecordMap; private readonly RenameRecordMap _renameRecordMap;
@ -70,9 +71,8 @@ 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 RuleBasedRenamePolicy(ctx.toObfuscatedAssemblyNames); var obfuscateRuleConfig = new RuleBasedRenamePolicy(ctx.toObfuscatedAssemblyNames, _obfuscationRuleFiles);
_obfuscateRuleConfig.LoadXmls(_obfuscationRuleFiles); _renamePolicy = new CacheRenamePolicy(new CombineRenamePolicy(new SystemRenamePolicy(), new UnityRenamePolicy(), obfuscateRuleConfig));
_renamePolicy = new CacheRenamePolicy(new CombineRenamePolicy(new SystemRenamePolicy(), new UnityRenamePolicy(), _obfuscateRuleConfig));
BuildCustomAttributeArguments(); BuildCustomAttributeArguments();
} }

View File

@ -7,7 +7,7 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace Obfuz.ObfusPasses namespace Obfuz
{ {
public class ObfuscationPassContext public class ObfuscationPassContext

View File

@ -85,7 +85,7 @@ namespace Obfuz
} }
if (obfuscationPasses.HasFlag(ObfuscationPassType.ConstEncryption)) if (obfuscationPasses.HasFlag(ObfuscationPassType.ConstEncryption))
{ {
builder.AddPass(new DataVirtualizationPass()); builder.AddPass(new ConstObfusPass());
} }
if (obfuscationPasses.HasFlag(ObfuscationPassType.ExprObfuscation)) if (obfuscationPasses.HasFlag(ObfuscationPassType.ExprObfuscation))
{ {