重构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.Threading.Tasks;
namespace Obfuz.ObfusPasses
namespace Obfuz
{
public interface IObfuscationPass
{

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -5,7 +5,7 @@ using System.Runtime.Remoting.Messaging;
using System.Text;
using System.Threading.Tasks;
namespace Obfuz.ObfusPasses.SymbolObfus
namespace Obfuz.ObfusPasses.SymbolObfus.NameMakers
{
public static class NameMakerFactory
{
@ -22,7 +22,7 @@ namespace Obfuz.ObfusPasses.SymbolObfus
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.Text;
namespace Obfuz.ObfusPasses.SymbolObfus
namespace Obfuz.ObfusPasses.SymbolObfus.NameMakers
{
public class NameScope : NameScopeBase

View File

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

View File

@ -4,15 +4,15 @@ using System.Collections.Generic;
using System.Linq;
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 List<string> _wordSet;
public NameMaker(string namePrefix, List<string> wordSet)
public WordSetNameMaker(string namePrefix, List<string> wordSet)
{
_namePrefix = namePrefix;
_wordSet = wordSet;

View File

@ -2,15 +2,15 @@
using System.Collections.Generic;
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>();
public CacheRenamePolicy(IRenamePolicy underlyingPolicy)
public CacheRenamePolicy(IObfuscationPolicy underlyingPolicy)
{
_underlyingPolicy = underlyingPolicy;
}

View File

@ -1,13 +1,13 @@
using dnlib.DotNet;
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;
}

View File

@ -1,8 +1,8 @@
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)

View File

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

View File

@ -1,8 +1,8 @@
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)
{

View File

@ -6,10 +6,10 @@ using System.Runtime.InteropServices;
using System.Text;
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> {
"Awake",

View File

@ -1,5 +1,7 @@
using dnlib.DotNet;
using Obfuz.ObfusPasses.SymbolObfus;
using Obfuz.ObfusPasses.SymbolObfus.NameMakers;
using Obfuz.ObfusPasses.SymbolObfus.Policies;
using Obfuz.Settings;
using Obfuz.Utils;
using System;
@ -38,8 +40,7 @@ namespace Obfuz.ObfusPasses.SymbolObfus
private List<ModuleDef> _obfuscatedAndNotObfuscatedModules;
private List<AssemblyReferenceInfo> _obfuzAssemblies;
private HashSet<ModuleDef> _toObfuscatedModuleSet;
private RuleBasedRenamePolicy _obfuscateRuleConfig;
private IRenamePolicy _renamePolicy;
private IObfuscationPolicy _renamePolicy;
private INameMaker _nameMaker;
private readonly Dictionary<ModuleDef, List<CustomAttributeInfo>> _customAttributeArgumentsWithTypeByMods = new Dictionary<ModuleDef, List<CustomAttributeInfo>>();
private readonly RenameRecordMap _renameRecordMap;
@ -70,9 +71,8 @@ namespace Obfuz.ObfusPasses.SymbolObfus
_obfuscatedAndNotObfuscatedModules = ctx.obfuscatedAndNotObfuscatedModules;
_toObfuscatedModuleSet = ctx.toObfuscatedModules.ToHashSet();
_obfuzAssemblies = BuildAssemblyReferenceInfos(ctx);
_obfuscateRuleConfig = new RuleBasedRenamePolicy(ctx.toObfuscatedAssemblyNames);
_obfuscateRuleConfig.LoadXmls(_obfuscationRuleFiles);
_renamePolicy = new CacheRenamePolicy(new CombineRenamePolicy(new SystemRenamePolicy(), new UnityRenamePolicy(), _obfuscateRuleConfig));
var obfuscateRuleConfig = new RuleBasedRenamePolicy(ctx.toObfuscatedAssemblyNames, _obfuscationRuleFiles);
_renamePolicy = new CacheRenamePolicy(new CombineRenamePolicy(new SystemRenamePolicy(), new UnityRenamePolicy(), obfuscateRuleConfig));
BuildCustomAttributeArguments();
}

View File

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

View File

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