重构Rename

backup
walon 2025-05-03 23:23:16 +08:00
parent fafc7d11a9
commit 0686c0e6da
15 changed files with 125 additions and 111 deletions

View File

@ -21,9 +21,9 @@ namespace Obfuz
public override void Process(ObfuscatorContext ctx) public override void Process(ObfuscatorContext ctx)
{ {
foreach (var ass in ctx.assemblies) foreach (ModuleDef mod in ctx.toObfuscatedModules)
{ {
foreach (TypeDef type in ass.module.GetTypes()) foreach (TypeDef type in mod.GetTypes())
{ {
foreach (MethodDef method in type.Methods) foreach (MethodDef method in type.Methods)
{ {

View File

@ -11,10 +11,10 @@ namespace Obfuz
public override void Process(ObfuscatorContext ctx) public override void Process(ObfuscatorContext ctx)
{ {
foreach (var ass in ctx.assemblies) foreach (ModuleDef mod in ctx.toObfuscatedModules)
{ {
// ToArray to avoid modify list exception // ToArray to avoid modify list exception
foreach (TypeDef type in ass.module.GetTypes().ToArray()) foreach (TypeDef type in mod.GetTypes().ToArray())
{ {
if (type.Name.StartsWith("$Obfuz$")) if (type.Name.StartsWith("$Obfuz$"))
{ {

View File

@ -16,11 +16,10 @@ namespace Obfuz
private readonly string _obfuscatedAssemblyOutputDir; private readonly string _obfuscatedAssemblyOutputDir;
private readonly AssemblyCache _assemblyCache; private readonly AssemblyCache _assemblyCache;
private readonly List<ObfuzAssemblyInfo> _obfuzAssemblies = new List<ObfuzAssemblyInfo>();
private readonly List<string> _toObfuscatedAssemblyNames; private readonly List<string> _toObfuscatedAssemblyNames;
private readonly List<string> _notObfuscatedAssemblyNamesReferencingObfuscated; private readonly List<string> _notObfuscatedAssemblyNamesReferencingObfuscated;
private readonly List<ModuleDef> _toObfuscatedModules = new List<ModuleDef>();
private readonly List<ModuleDef> _obfuscatedAndNotObfuscatedModules = new List<ModuleDef>();
private readonly ObfuzPipeline _pipeline = new ObfuzPipeline(); private readonly ObfuzPipeline _pipeline = new ObfuzPipeline();
@ -63,7 +62,8 @@ namespace Obfuz
_ctx = new ObfuscatorContext _ctx = new ObfuscatorContext
{ {
assemblyCache = _assemblyCache, assemblyCache = _assemblyCache,
assemblies = _obfuzAssemblies, toObfuscatedModules = _toObfuscatedModules,
obfuscatedAndNotObfuscatedModules = _obfuscatedAndNotObfuscatedModules,
toObfuscatedAssemblyNames = _toObfuscatedAssemblyNames, toObfuscatedAssemblyNames = _toObfuscatedAssemblyNames,
notObfuscatedAssemblyNamesReferencingObfuscated = _notObfuscatedAssemblyNamesReferencingObfuscated, notObfuscatedAssemblyNamesReferencingObfuscated = _notObfuscatedAssemblyNamesReferencingObfuscated,
obfuscatedAssemblyOutputDir = _obfuscatedAssemblyOutputDir, obfuscatedAssemblyOutputDir = _obfuscatedAssemblyOutputDir,
@ -73,7 +73,7 @@ namespace Obfuz
private void LoadAssemblies() private void LoadAssemblies()
{ {
foreach (string assName in _toObfuscatedAssemblyNames) foreach (string assName in _toObfuscatedAssemblyNames.Concat(_notObfuscatedAssemblyNamesReferencingObfuscated))
{ {
ModuleDefMD mod = _assemblyCache.TryLoadModule(assName); ModuleDefMD mod = _assemblyCache.TryLoadModule(assName);
if (mod == null) if (mod == null)
@ -81,28 +81,11 @@ namespace Obfuz
Debug.Log($"assembly: {assName} not found! ignore."); Debug.Log($"assembly: {assName} not found! ignore.");
continue; continue;
} }
var obfuzAsm = new ObfuzAssemblyInfo if (_toObfuscatedAssemblyNames.Contains(assName))
{ {
name = assName, _toObfuscatedModules.Add(mod);
module = mod,
referenceMeAssemblies = new List<ObfuzAssemblyInfo>(),
};
obfuzAsm.referenceMeAssemblies.Add(obfuzAsm);
_obfuzAssemblies.Add(obfuzAsm);
}
var assByName = _obfuzAssemblies.ToDictionary(x => x.name);
foreach (var ass in _obfuzAssemblies)
{
foreach (var refAss in ass.module.GetAssemblyRefs())
{
string refAssName = refAss.Name.ToString();
if (assByName.TryGetValue(refAssName, out var refAssembly))
{
//UnityEngine.Debug.Log($"assembly:{ass.name} reference to {refAssName}");
refAssembly.referenceMeAssemblies.Add(ass);
}
} }
_obfuscatedAndNotObfuscatedModules.Add(mod);
} }
} }
@ -117,11 +100,12 @@ namespace Obfuz
{ {
_pipeline.Stop(_ctx); _pipeline.Stop(_ctx);
foreach (var ass in _obfuzAssemblies) foreach (ModuleDef mod in _obfuscatedAndNotObfuscatedModules)
{ {
string outputFile = $"{_obfuscatedAssemblyOutputDir}/{ass.module.Name}"; string assNameWithExt = mod.Name;
ass.module.Write(outputFile); string outputFile = $"{_obfuscatedAssemblyOutputDir}/{assNameWithExt}";
Debug.Log($"save module. oldName:{ass.name} newName:{ass.module.Name} output:{outputFile}"); mod.Write(outputFile);
Debug.Log($"save module. name:{mod.Assembly.Name} output:{outputFile}");
} }
} }
} }

View File

@ -1,4 +1,5 @@
using Obfuz.Rename; using dnlib.DotNet;
using Obfuz.Rename;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@ -12,10 +13,10 @@ namespace Obfuz
{ {
public AssemblyCache assemblyCache; public AssemblyCache assemblyCache;
public List<ObfuzAssemblyInfo> assemblies; public List<ModuleDef> toObfuscatedModules;
public List<ModuleDef> obfuscatedAndNotObfuscatedModules;
public List<string> toObfuscatedAssemblyNames; public List<string> toObfuscatedAssemblyNames;
public List<string> notObfuscatedAssemblyNamesReferencingObfuscated; public List<string> notObfuscatedAssemblyNamesReferencingObfuscated;
public string obfuscatedAssemblyOutputDir; public string obfuscatedAssemblyOutputDir;

View File

@ -1,14 +0,0 @@
using dnlib.DotNet;
using System.Collections.Generic;
namespace Obfuz
{
public class ObfuzAssemblyInfo
{
public string name;
public ModuleDefMD module;
public List<ObfuzAssemblyInfo> referenceMeAssemblies;
}
}

View File

@ -15,7 +15,7 @@ namespace Obfuz.Rename
_underlyingPolicy = underlyingPolicy; _underlyingPolicy = underlyingPolicy;
} }
public override bool NeedRename(ModuleDefMD mod) public override bool NeedRename(ModuleDef mod)
{ {
if (!_computeCache.TryGetValue(mod, out var value)) if (!_computeCache.TryGetValue(mod, out var value))
{ {

View File

@ -12,7 +12,7 @@ namespace Obfuz.Rename
_policies = policies; _policies = policies;
} }
public bool NeedRename(ModuleDefMD mod) public bool NeedRename(ModuleDef mod)
{ {
return _policies.All(policy => policy.NeedRename(mod)); return _policies.All(policy => policy.NeedRename(mod));
} }

View File

@ -4,7 +4,7 @@ namespace Obfuz.Rename
{ {
public interface INameMaker public interface INameMaker
{ {
void AddPreservedName(ModuleDefMD mod, string name); void AddPreservedName(ModuleDef mod, string name);
void AddPreservedName(TypeDef typeDef, string name); void AddPreservedName(TypeDef typeDef, string name);
@ -20,7 +20,7 @@ namespace Obfuz.Rename
void AddPreservedName(EventDef eventDef, string name); void AddPreservedName(EventDef eventDef, string name);
string GetNewName(ModuleDefMD mod, string originalName); string GetNewName(ModuleDef mod, string originalName);
string GetNewName(TypeDef typeDef, string originalName); string GetNewName(TypeDef typeDef, string originalName);

View File

@ -4,7 +4,7 @@ namespace Obfuz.Rename
{ {
public interface IRenamePolicy public interface IRenamePolicy
{ {
bool NeedRename(ModuleDefMD mod); bool NeedRename(ModuleDef mod);
bool NeedRename(TypeDef typeDef); bool NeedRename(TypeDef typeDef);

View File

@ -26,7 +26,7 @@ namespace Obfuz.Rename
return nameScope; return nameScope;
} }
public void AddPreservedName(ModuleDefMD mod, string name) public void AddPreservedName(ModuleDef mod, string name)
{ {
GetNameScope(mod).AddPreservedName(name); GetNameScope(mod).AddPreservedName(name);
} }
@ -67,7 +67,7 @@ namespace Obfuz.Rename
} }
public string GetNewName(ModuleDefMD mod, string originalName) public string GetNewName(ModuleDef mod, string originalName)
{ {
return GetDefaultNewName(this, originalName); return GetDefaultNewName(this, originalName);
} }

View File

@ -11,7 +11,7 @@ using UnityEngine;
namespace Obfuz namespace Obfuz
{ {
public class ObfuscateRuleConfig : IRenamePolicy public class ObfuscateRuleConfig : RenamePolicyBase
{ {
enum ObfuscationType enum ObfuscationType
{ {
@ -610,7 +610,7 @@ namespace Obfuz
} }
} }
public bool NeedRename(ModuleDefMD mod) public override bool NeedRename(ModuleDef mod)
{ {
//string name = mod.Assembly.Name; //string name = mod.Assembly.Name;
//if (!_assemblyRuleSpecs.TryGetValue(name, out var assemblyRuleSpec)) //if (!_assemblyRuleSpecs.TryGetValue(name, out var assemblyRuleSpec))
@ -839,13 +839,13 @@ namespace Obfuz
return cache; return cache;
} }
public bool NeedRename(TypeDef typeDef) public override bool NeedRename(TypeDef typeDef)
{ {
TypeDefComputeCache cache = GetOrCreateTypeDefRenameComputeCache(typeDef); TypeDefComputeCache cache = GetOrCreateTypeDefRenameComputeCache(typeDef);
return cache.obfuscateName; return cache.obfuscateName;
} }
public bool NeedRename(MethodDef methodDef) public override bool NeedRename(MethodDef methodDef)
{ {
TypeDef typeDef = methodDef.DeclaringType; TypeDef typeDef = methodDef.DeclaringType;
TypeDefComputeCache cache = GetOrCreateTypeDefRenameComputeCache(typeDef); TypeDefComputeCache cache = GetOrCreateTypeDefRenameComputeCache(typeDef);
@ -856,28 +856,28 @@ namespace Obfuz
return methodCache.obfuscateName; return methodCache.obfuscateName;
} }
public bool NeedRename(FieldDef fieldDef) public override bool NeedRename(FieldDef fieldDef)
{ {
TypeDef typeDef = fieldDef.DeclaringType; TypeDef typeDef = fieldDef.DeclaringType;
TypeDefComputeCache cache = GetOrCreateTypeDefRenameComputeCache(typeDef); TypeDefComputeCache cache = GetOrCreateTypeDefRenameComputeCache(typeDef);
return !cache.notObfuscatedFields.Contains(fieldDef); return !cache.notObfuscatedFields.Contains(fieldDef);
} }
public bool NeedRename(PropertyDef propertyDef) public override bool NeedRename(PropertyDef propertyDef)
{ {
TypeDef typeDef = propertyDef.DeclaringType; TypeDef typeDef = propertyDef.DeclaringType;
TypeDefComputeCache cache = GetOrCreateTypeDefRenameComputeCache(typeDef); TypeDefComputeCache cache = GetOrCreateTypeDefRenameComputeCache(typeDef);
return !cache.notObfuscatedProperties.Contains(propertyDef); return !cache.notObfuscatedProperties.Contains(propertyDef);
} }
public bool NeedRename(EventDef eventDef) public override bool NeedRename(EventDef eventDef)
{ {
TypeDef typeDef = eventDef.DeclaringType; TypeDef typeDef = eventDef.DeclaringType;
TypeDefComputeCache cache = GetOrCreateTypeDefRenameComputeCache(typeDef); TypeDefComputeCache cache = GetOrCreateTypeDefRenameComputeCache(typeDef);
return !cache.notObfuscatedEvents.Contains(eventDef); return !cache.notObfuscatedEvents.Contains(eventDef);
} }
public bool NeedRename(ParamDef paramDef) public override bool NeedRename(ParamDef paramDef)
{ {
MethodDef methodDef = paramDef.DeclaringMethod; MethodDef methodDef = paramDef.DeclaringMethod;
TypeDef typeDef = methodDef.DeclaringType; TypeDef typeDef = methodDef.DeclaringType;

View File

@ -4,9 +4,9 @@ namespace Obfuz.Rename
{ {
public abstract class RenamePolicyBase : IRenamePolicy public abstract class RenamePolicyBase : IRenamePolicy
{ {
public virtual bool NeedRename(ModuleDefMD mod) public virtual bool NeedRename(ModuleDef mod)
{ {
return true; return false;
} }
public virtual bool NeedRename(TypeDef typeDef) public virtual bool NeedRename(TypeDef typeDef)

View File

@ -93,7 +93,7 @@ namespace Obfuz
private readonly Dictionary<string, RenameMappingAssembly> _assemblies = new Dictionary<string, RenameMappingAssembly>(); private readonly Dictionary<string, RenameMappingAssembly> _assemblies = new Dictionary<string, RenameMappingAssembly>();
private readonly Dictionary<ModuleDefMD, RenameRecord> _modRenames = new Dictionary<ModuleDefMD, RenameRecord>(); private readonly Dictionary<ModuleDef, RenameRecord> _modRenames = new Dictionary<ModuleDef, RenameRecord>();
private readonly Dictionary<TypeDef, RenameRecord> _typeRenames = new Dictionary<TypeDef, RenameRecord>(); private readonly Dictionary<TypeDef, RenameRecord> _typeRenames = new Dictionary<TypeDef, RenameRecord>();
private readonly Dictionary<MethodDef, RenameRecord> _methodRenames = new Dictionary<MethodDef, RenameRecord>(); private readonly Dictionary<MethodDef, RenameRecord> _methodRenames = new Dictionary<MethodDef, RenameRecord>();
private readonly Dictionary<ParamDef, RenameRecord> _paramRenames = new Dictionary<ParamDef, RenameRecord>(); private readonly Dictionary<ParamDef, RenameRecord> _paramRenames = new Dictionary<ParamDef, RenameRecord>();
@ -108,12 +108,11 @@ namespace Obfuz
_mappingFile = mappingFile; _mappingFile = mappingFile;
} }
public void Init(List<ObfuzAssemblyInfo> assemblies, INameMaker nameMaker) public void Init(List<ModuleDef> assemblies, INameMaker nameMaker)
{ {
LoadXmlMappingFile(_mappingFile); LoadXmlMappingFile(_mappingFile);
foreach (var ObfuzAssemblyInfo in assemblies) foreach (ModuleDef mod in assemblies)
{ {
ModuleDefMD mod = ObfuzAssemblyInfo.module;
string name = mod.Assembly.Name; string name = mod.Assembly.Name;
nameMaker.AddPreservedName(mod, name); nameMaker.AddPreservedName(mod, name);
@ -406,7 +405,7 @@ namespace Obfuz
doc.AppendChild(root); doc.AppendChild(root);
foreach (var kvp in _modRenames) foreach (var kvp in _modRenames)
{ {
ModuleDefMD mod = kvp.Key; ModuleDef mod = kvp.Key;
RenameRecord record = kvp.Value; RenameRecord record = kvp.Value;
var assemblyNode = doc.CreateElement("assembly"); var assemblyNode = doc.CreateElement("assembly");
assemblyNode.SetAttribute("name", mod.Assembly.Name); assemblyNode.SetAttribute("name", mod.Assembly.Name);
@ -619,7 +618,7 @@ namespace Obfuz
methodEle.AppendChild(paramNode); methodEle.AppendChild(paramNode);
} }
public void AddRename(ModuleDefMD mod, string newName) public void AddRename(ModuleDef mod, string newName)
{ {
RenameRecord record = _modRenames[mod]; RenameRecord record = _modRenames[mod];
record.status = RenameStatus.Renamed; record.status = RenameStatus.Renamed;
@ -680,7 +679,7 @@ namespace Obfuz
record.newName = newName; record.newName = newName;
} }
public bool TryGetExistRenameMapping(ModuleDefMD mod, out string newName) public bool TryGetExistRenameMapping(ModuleDef mod, out string newName)
{ {
if (_modRenames.TryGetValue(mod, out var record) && record.renameMappingData != null) if (_modRenames.TryGetValue(mod, out var record) && record.renameMappingData != null)
{ {

View File

@ -18,12 +18,26 @@ namespace Obfuz
public class SymbolRename public class SymbolRename
{ {
class AssemblyReferenceInfo
{
public string name;
public bool needObfuscated;
public ModuleDef module;
public List<AssemblyReferenceInfo> referenceMeAssemblies;
}
private readonly List<string> _obfuscationRuleFiles; private readonly List<string> _obfuscationRuleFiles;
private readonly string _mappingXmlPath; private readonly string _mappingXmlPath;
private AssemblyCache _assemblyCache; private AssemblyCache _assemblyCache;
private List<ObfuzAssemblyInfo> _obfuzAssemblies;
private HashSet<ModuleDef> _obfuscatedModules = new HashSet<ModuleDef>(); private List<ModuleDef> _toObfuscatedModules;
private List<ModuleDef> _obfuscatedAndNotObfuscatedModules;
private List<AssemblyReferenceInfo> _obfuzAssemblies;
private HashSet<ModuleDef> _toObfuscatedModuleSet;
private ObfuscateRuleConfig _obfuscateRuleConfig; private ObfuscateRuleConfig _obfuscateRuleConfig;
private IRenamePolicy _renamePolicy; private IRenamePolicy _renamePolicy;
private INameMaker _nameMaker; private INameMaker _nameMaker;
@ -50,19 +64,49 @@ namespace Obfuz
public void Init(ObfuscatorContext ctx) public void Init(ObfuscatorContext ctx)
{ {
_assemblyCache = ctx.assemblyCache; _assemblyCache = ctx.assemblyCache;
_obfuzAssemblies = ctx.assemblies; _toObfuscatedModules = ctx.toObfuscatedModules;
_obfuscatedAndNotObfuscatedModules = ctx.obfuscatedAndNotObfuscatedModules;
_toObfuscatedModuleSet = ctx.toObfuscatedModules.ToHashSet();
_obfuzAssemblies = BuildAssemblyReferenceInfos(ctx);
_obfuscateRuleConfig = new ObfuscateRuleConfig(ctx.toObfuscatedAssemblyNames); _obfuscateRuleConfig = new ObfuscateRuleConfig(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(); _nameMaker = NameMakerFactory.CreateNameMakerBaseASCIICharSet();
foreach (var mod in ctx.assemblies)
{
_obfuscatedModules.Add(mod.module);
}
BuildCustomAttributeArguments(); BuildCustomAttributeArguments();
} }
private static List<AssemblyReferenceInfo> BuildAssemblyReferenceInfos(ObfuscatorContext ctx)
{
var obfuzAssemblies = new List<AssemblyReferenceInfo>();
foreach (ModuleDef mod in ctx.obfuscatedAndNotObfuscatedModules)
{
var obfuzAsm = new AssemblyReferenceInfo
{
name = mod.Assembly.Name,
needObfuscated = ctx.toObfuscatedModules.Contains(mod),
module = mod,
referenceMeAssemblies = new List<AssemblyReferenceInfo>(),
};
obfuzAsm.referenceMeAssemblies.Add(obfuzAsm);
obfuzAssemblies.Add(obfuzAsm);
}
var assByName = obfuzAssemblies.ToDictionary(x => x.name);
foreach (var ass in obfuzAssemblies)
{
foreach (var refAss in ass.module.GetAssemblyRefs())
{
string refAssName = refAss.Name;
if (assByName.TryGetValue(refAssName, out var refAssembly))
{
//UnityEngine.Debug.Log($"assembly:{ass.name} reference to {refAssName}");
refAssembly.referenceMeAssemblies.Add(ass);
}
}
}
return obfuzAssemblies;
}
private void CollectCArgumentWithTypeOf(IHasCustomAttribute meta, List<CustomAttributeInfo> customAttributes) private void CollectCArgumentWithTypeOf(IHasCustomAttribute meta, List<CustomAttributeInfo> customAttributes)
{ {
int index = 0; int index = 0;
@ -94,11 +138,11 @@ namespace Obfuz
private void BuildCustomAttributeArguments() private void BuildCustomAttributeArguments()
{ {
foreach (ObfuzAssemblyInfo ass in _obfuzAssemblies) foreach (ModuleDef mod in _obfuscatedAndNotObfuscatedModules)
{ {
var customAttributes = new List<CustomAttributeInfo>(); var customAttributes = new List<CustomAttributeInfo>();
CollectCArgumentWithTypeOf(ass.module, customAttributes); CollectCArgumentWithTypeOf(mod, customAttributes);
foreach (TypeDef type in ass.module.GetTypes()) foreach (TypeDef type in mod.GetTypes())
{ {
CollectCArgumentWithTypeOf(type, customAttributes); CollectCArgumentWithTypeOf(type, customAttributes);
foreach (FieldDef field in type.Fields) foreach (FieldDef field in type.Fields)
@ -126,13 +170,13 @@ namespace Obfuz
} }
} }
_customAttributeArgumentsWithTypeByMods.Add(ass.module, customAttributes); _customAttributeArgumentsWithTypeByMods.Add(mod, customAttributes);
} }
} }
public void Process() public void Process()
{ {
_renameRecordMap.Init(_obfuzAssemblies, _nameMaker); _renameRecordMap.Init(_toObfuscatedModules, _nameMaker);
RenameModules(); RenameModules();
RenameTypes(); RenameTypes();
RenameFields(); RenameFields();
@ -141,7 +185,7 @@ namespace Obfuz
RenameEvents(); RenameEvents();
} }
private List<ObfuzAssemblyInfo> GetReferenceMeAssemblies(ModuleDef mod) private List<AssemblyReferenceInfo> GetReferenceMeAssemblies(ModuleDef mod)
{ {
return _obfuzAssemblies.Find(ass => ass.module == mod).referenceMeAssemblies; return _obfuzAssemblies.Find(ass => ass.module == mod).referenceMeAssemblies;
} }
@ -149,11 +193,11 @@ namespace Obfuz
private void RenameModules() private void RenameModules()
{ {
Debug.Log("Rename Modules begin"); Debug.Log("Rename Modules begin");
foreach (ObfuzAssemblyInfo ass in _obfuzAssemblies) foreach (ModuleDef mod in _toObfuscatedModules)
{ {
if (_renamePolicy.NeedRename(ass.module)) if (_renamePolicy.NeedRename(mod))
{ {
Rename(ass.module); Rename(mod);
} }
} }
Debug.Log("Rename Modules end"); Debug.Log("Rename Modules end");
@ -169,9 +213,9 @@ namespace Obfuz
private void BuildRefTypeDefMetasMap(Dictionary<TypeDef, RefTypeDefMetas> refTypeDefMetasMap) private void BuildRefTypeDefMetasMap(Dictionary<TypeDef, RefTypeDefMetas> refTypeDefMetasMap)
{ {
foreach (ObfuzAssemblyInfo ass in _obfuzAssemblies) foreach (ModuleDef mod in _toObfuscatedModules)
{ {
foreach (TypeRef typeRef in ass.module.GetTypeRefs()) foreach (TypeRef typeRef in mod.GetTypeRefs())
{ {
TypeDef typeDef = typeRef.ResolveThrow(); TypeDef typeDef = typeRef.ResolveThrow();
if (!refTypeDefMetasMap.TryGetValue(typeDef, out var typeDefMetas)) if (!refTypeDefMetasMap.TryGetValue(typeDef, out var typeDefMetas))
@ -244,9 +288,9 @@ namespace Obfuz
BuildRefTypeDefMetasMap(_refTypeRefMetasMap); BuildRefTypeDefMetasMap(_refTypeRefMetasMap);
_assemblyCache.EnableTypeDefCache = false; _assemblyCache.EnableTypeDefCache = false;
foreach (ObfuzAssemblyInfo ass in _obfuzAssemblies) foreach (ModuleDef mod in _toObfuscatedModules)
{ {
foreach (TypeDef type in ass.module.GetTypes()) foreach (TypeDef type in mod.GetTypes())
{ {
if (_renamePolicy.NeedRename(type)) if (_renamePolicy.NeedRename(type))
{ {
@ -279,9 +323,9 @@ namespace Obfuz
private void BuildRefFieldMetasMap(Dictionary<FieldDef, RefFieldMetas> refFieldMetasMap) private void BuildRefFieldMetasMap(Dictionary<FieldDef, RefFieldMetas> refFieldMetasMap)
{ {
foreach (ObfuzAssemblyInfo ass in _obfuzAssemblies) foreach (ModuleDef mod in _toObfuscatedModules)
{ {
foreach (MemberRef memberRef in ass.module.GetMemberRefs()) foreach (MemberRef memberRef in mod.GetMemberRefs())
{ {
if (!memberRef.IsFieldRef) if (!memberRef.IsFieldRef)
{ {
@ -348,9 +392,9 @@ namespace Obfuz
var refFieldMetasMap = new Dictionary<FieldDef, RefFieldMetas>(); var refFieldMetasMap = new Dictionary<FieldDef, RefFieldMetas>();
BuildRefFieldMetasMap(refFieldMetasMap); BuildRefFieldMetasMap(refFieldMetasMap);
foreach (ObfuzAssemblyInfo ass in _obfuzAssemblies) foreach (ModuleDef mod in _toObfuscatedModules)
{ {
foreach (TypeDef type in ass.module.GetTypes()) foreach (TypeDef type in mod.GetTypes())
{ {
foreach (FieldDef field in type.Fields) foreach (FieldDef field in type.Fields)
{ {
@ -371,9 +415,9 @@ namespace Obfuz
private void BuildRefMethodMetasMap(Dictionary<MethodDef, RefMethodMetas> refMethodMetasMap) private void BuildRefMethodMetasMap(Dictionary<MethodDef, RefMethodMetas> refMethodMetasMap)
{ {
foreach (ObfuzAssemblyInfo ass in _obfuzAssemblies) foreach (ModuleDef mod in _toObfuscatedModules)
{ {
foreach (MemberRef memberRef in ass.module.GetMemberRefs()) foreach (MemberRef memberRef in mod.GetMemberRefs())
{ {
if (!memberRef.IsMethodRef) if (!memberRef.IsMethodRef)
{ {
@ -410,9 +454,9 @@ namespace Obfuz
var virtualMethods = new List<MethodDef>(); var virtualMethods = new List<MethodDef>();
var refMethodMetasMap = new Dictionary<MethodDef, RefMethodMetas>(); var refMethodMetasMap = new Dictionary<MethodDef, RefMethodMetas>();
BuildRefMethodMetasMap(refMethodMetasMap); BuildRefMethodMetasMap(refMethodMetasMap);
foreach (ObfuzAssemblyInfo ass in _obfuzAssemblies) foreach (ModuleDef mod in _toObfuscatedModules)
{ {
foreach (TypeDef type in ass.module.GetTypes()) foreach (TypeDef type in mod.GetTypes())
{ {
_virtualMethodGroupCalculator.CalculateType(type); _virtualMethodGroupCalculator.CalculateType(type);
foreach (MethodDef method in type.Methods) foreach (MethodDef method in type.Methods)
@ -444,7 +488,7 @@ namespace Obfuz
VirtualMethodGroup group = _virtualMethodGroupCalculator.GetMethodGroup(method); VirtualMethodGroup group = _virtualMethodGroupCalculator.GetMethodGroup(method);
if (!groupNeedRenames.TryGetValue(group, out var needRename)) if (!groupNeedRenames.TryGetValue(group, out var needRename))
{ {
needRename = group.methods.All(m => _obfuscatedModules.Contains(m.DeclaringType.Module) && _renamePolicy.NeedRename(m)); needRename = group.methods.All(m => _toObfuscatedModuleSet.Contains(m.DeclaringType.Module) && _renamePolicy.NeedRename(m));
groupNeedRenames.Add(group, needRename); groupNeedRenames.Add(group, needRename);
if (needRename) if (needRename)
{ {
@ -522,9 +566,9 @@ namespace Obfuz
Debug.Log("Rename properties begin"); Debug.Log("Rename properties begin");
var refPropertyMetasMap = new Dictionary<PropertyDef, RefPropertyMetas>(); var refPropertyMetasMap = new Dictionary<PropertyDef, RefPropertyMetas>();
BuildRefPropertyMetasMap(refPropertyMetasMap); BuildRefPropertyMetasMap(refPropertyMetasMap);
foreach (ObfuzAssemblyInfo ass in _obfuzAssemblies) foreach (ModuleDef mod in _toObfuscatedModules)
{ {
foreach (TypeDef type in ass.module.GetTypes()) foreach (TypeDef type in mod.GetTypes())
{ {
foreach (PropertyDef property in type.Properties) foreach (PropertyDef property in type.Properties)
{ {
@ -541,9 +585,9 @@ namespace Obfuz
private void RenameEvents() private void RenameEvents()
{ {
Debug.Log("Rename events begin"); Debug.Log("Rename events begin");
foreach (ObfuzAssemblyInfo ass in _obfuzAssemblies) foreach (ModuleDef mod in _toObfuscatedModules)
{ {
foreach (TypeDef type in ass.module.GetTypes()) foreach (TypeDef type in mod.GetTypes())
{ {
foreach (EventDef eventDef in type.Events) foreach (EventDef eventDef in type.Events)
{ {
@ -557,7 +601,7 @@ namespace Obfuz
Debug.Log("Rename events begin"); Debug.Log("Rename events begin");
} }
private void Rename(ModuleDefMD mod) private void Rename(ModuleDef mod)
{ {
string oldName = mod.Assembly.Name; string oldName = mod.Assembly.Name;
string newName = _renameRecordMap.TryGetExistRenameMapping(mod, out var n) ? n : _nameMaker.GetNewName(mod, oldName); string newName = _renameRecordMap.TryGetExistRenameMapping(mod, out var n) ? n : _nameMaker.GetNewName(mod, oldName);
@ -565,7 +609,7 @@ namespace Obfuz
mod.Assembly.Name = newName; mod.Assembly.Name = newName;
mod.Name = $"{newName}.dll"; mod.Name = $"{newName}.dll";
//Debug.Log($"rename module. oldName:{oldName} newName:{newName}"); //Debug.Log($"rename module. oldName:{oldName} newName:{newName}");
foreach (ObfuzAssemblyInfo ass in GetReferenceMeAssemblies(mod)) foreach (AssemblyReferenceInfo ass in GetReferenceMeAssemblies(mod))
{ {
foreach (AssemblyRef assRef in ass.module.GetAssemblyRefs()) foreach (AssemblyRef assRef in ass.module.GetAssemblyRefs())
{ {

View File

@ -24,7 +24,7 @@ namespace Obfuz
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;
} }
} }