重构SymbolObfus,将NameMaker和Policy移到子目录下
parent
214767623f
commit
ebce42a8d6
|
@ -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
|
||||||
{
|
{
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
|
@ -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);
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
{
|
{
|
|
@ -1,4 +1,4 @@
|
||||||
namespace Obfuz.ObfusPasses.SymbolObfus
|
namespace Obfuz.ObfusPasses.SymbolObfus.NameMakers
|
||||||
{
|
{
|
||||||
public interface INameScope
|
public interface INameScope
|
||||||
{
|
{
|
|
@ -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
|
||||||
{
|
{
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -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
|
|
@ -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
|
||||||
{
|
{
|
|
@ -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;
|
|
@ -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;
|
||||||
}
|
}
|
|
@ -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;
|
||||||
}
|
}
|
|
@ -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)
|
|
@ -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)
|
|
@ -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)
|
||||||
{
|
{
|
|
@ -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",
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
|
@ -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))
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue