重构SymbolObfus,将NameMaker和Policy移到子目录下
parent
214767623f
commit
ebce42a8d6
|
@ -4,7 +4,7 @@ using System.Linq;
|
|||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Obfuz.ObfusPasses
|
||||
namespace Obfuz
|
||||
{
|
||||
public interface IObfuscationPass
|
||||
{
|
|
@ -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();
|
||||
}
|
||||
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
namespace Obfuz.ObfusPasses.ConstObfus
|
||||
{
|
||||
public abstract class DataObfuscationPolicyBase : IDataObfuscationPolicy
|
||||
public abstract class ConstObfuscationPolicyBase : IConstObfuscationPolicy
|
||||
{
|
||||
public virtual bool NeedObfuscateMethod(MethodDef method)
|
||||
{
|
|
@ -7,7 +7,7 @@ using System.Threading.Tasks;
|
|||
|
||||
namespace Obfuz.ObfusPasses.ConstObfus
|
||||
{
|
||||
public interface IDataObfuscationPolicy
|
||||
public interface IConstObfuscationPolicy
|
||||
{
|
||||
bool NeedObfuscateMethod(MethodDef method);
|
||||
|
|
@ -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)
|
||||
{
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
namespace Obfuz.ObfusPasses.SymbolObfus
|
||||
{
|
||||
public interface IRenamePolicy
|
||||
public interface IObfuscationPolicy
|
||||
{
|
||||
bool NeedRename(TypeDef typeDef);
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
using dnlib.DotNet;
|
||||
using System.Text;
|
||||
|
||||
namespace Obfuz.ObfusPasses.SymbolObfus
|
||||
namespace Obfuz.ObfusPasses.SymbolObfus.NameMakers
|
||||
{
|
||||
public class DebugNameMaker : NameMakerBase
|
||||
{
|
|
@ -1,4 +1,4 @@
|
|||
namespace Obfuz.ObfusPasses.SymbolObfus
|
||||
namespace Obfuz.ObfusPasses.SymbolObfus.NameMakers
|
||||
{
|
||||
public interface INameScope
|
||||
{
|
|
@ -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
|
||||
{
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -2,7 +2,7 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace Obfuz.ObfusPasses.SymbolObfus
|
||||
namespace Obfuz.ObfusPasses.SymbolObfus.NameMakers
|
||||
{
|
||||
|
||||
public class NameScope : NameScopeBase
|
|
@ -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
|
||||
{
|
|
@ -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;
|
|
@ -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;
|
||||
}
|
|
@ -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;
|
||||
}
|
|
@ -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)
|
|
@ -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)
|
|
@ -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)
|
||||
{
|
|
@ -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",
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@ using System.Linq;
|
|||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Obfuz.ObfusPasses
|
||||
namespace Obfuz
|
||||
{
|
||||
|
||||
public class ObfuscationPassContext
|
|
@ -85,7 +85,7 @@ namespace Obfuz
|
|||
}
|
||||
if (obfuscationPasses.HasFlag(ObfuscationPassType.ConstEncryption))
|
||||
{
|
||||
builder.AddPass(new DataVirtualizationPass());
|
||||
builder.AddPass(new ConstObfusPass());
|
||||
}
|
||||
if (obfuscationPasses.HasFlag(ObfuscationPassType.ExprObfuscation))
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue