rename流程按照module, typedef, method等等分为多个流程

backup
walon 2025-04-15 09:52:28 +08:00
parent b24ae72a04
commit 12a290a0c7
1 changed files with 113 additions and 33 deletions

View File

@ -113,7 +113,22 @@ namespace Obfuz
public void Process() public void Process()
{ {
var virtualMethods = new List<MethodDef>(); RenameModules();
RenameTypes();
RenameFields();
RenameMethods();
RenameProperties();
RenameEvents();
}
private List<ObfuzAssemblyInfo> GetReferenceMeAssemblies(ModuleDef mod)
{
return _ctx.assemblies.Find(ass => ass.module == mod).referenceMeAssemblies;
}
private void RenameModules()
{
Debug.Log("Rename Modules begin");
foreach (ObfuzAssemblyInfo ass in _ctx.assemblies) foreach (ObfuzAssemblyInfo ass in _ctx.assemblies)
{ {
if (_renamePolicy.NeedRename(ass.module)) if (_renamePolicy.NeedRename(ass.module))
@ -124,9 +139,17 @@ namespace Obfuz
{ {
_renameRecordMap.AddUnRenameRecord(ass.module); _renameRecordMap.AddUnRenameRecord(ass.module);
} }
}
Debug.Log("Rename Modules end");
}
private void RenameTypes()
{
Debug.Log("RenameTypes begin");
foreach (ObfuzAssemblyInfo ass in _ctx.assemblies)
{
foreach (TypeDef type in ass.module.GetTypes()) foreach (TypeDef type in ass.module.GetTypes())
{ {
_virtualMethodGroupCalculator.CalculateType(type);
if (_renamePolicy.NeedRename(type)) if (_renamePolicy.NeedRename(type))
{ {
Rename(type); Rename(type);
@ -135,6 +158,18 @@ namespace Obfuz
{ {
_renameRecordMap.AddUnRenameRecord(type); _renameRecordMap.AddUnRenameRecord(type);
} }
}
}
Debug.Log("Rename Types end");
}
private void RenameFields()
{
Debug.Log("Rename fields begin");
foreach (ObfuzAssemblyInfo ass in _ctx.assemblies)
{
foreach (TypeDef type in ass.module.GetTypes())
{
foreach (FieldDef field in type.Fields) foreach (FieldDef field in type.Fields)
{ {
if (_renamePolicy.NeedRename(field)) if (_renamePolicy.NeedRename(field))
@ -146,6 +181,21 @@ namespace Obfuz
_renameRecordMap.AddUnRenameRecord(field); _renameRecordMap.AddUnRenameRecord(field);
} }
} }
}
}
Debug.Log("Rename fields end");
}
private void RenameMethods()
{
Debug.Log("Rename methods begin");
Debug.Log("Rename not virtual methods begin");
var virtualMethods = new List<MethodDef>();
foreach (ObfuzAssemblyInfo ass in _ctx.assemblies)
{
foreach (TypeDef type in ass.module.GetTypes())
{
_virtualMethodGroupCalculator.CalculateType(type);
foreach (MethodDef method in type.Methods) foreach (MethodDef method in type.Methods)
{ {
if (method.IsVirtual) if (method.IsVirtual)
@ -156,44 +206,18 @@ namespace Obfuz
if (_renamePolicy.NeedRename(method)) if (_renamePolicy.NeedRename(method))
{ {
Rename(method); Rename(method);
foreach (Parameter param in method.Parameters)
{
if (param.ParamDef != null)
{
Rename(param.ParamDef);
}
}
} }
else else
{ {
_renameRecordMap.AddUnRenameRecord(method); _renameRecordMap.AddUnRenameRecord(method);
} }
} }
foreach (EventDef eventDef in type.Events)
{
if (_renamePolicy.NeedRename(eventDef))
{
Rename(eventDef);
}
else
{
_renameRecordMap.AddUnRenameRecord(eventDef);
}
}
foreach (PropertyDef property in type.Properties)
{
if (_renamePolicy.NeedRename(property))
{
Rename(property);
}
else
{
_renameRecordMap.AddUnRenameRecord(property);
}
}
} }
} }
Debug.Log("Rename not virtual methods end");
Debug.Log("Rename virtual methods begin");
var visitedVirtualMethods = new HashSet<MethodDef>(); var visitedVirtualMethods = new HashSet<MethodDef>();
var groupNeedRenames = new Dictionary<VirtualMethodGroup, bool>(); var groupNeedRenames = new Dictionary<VirtualMethodGroup, bool>();
foreach (var method in virtualMethods) foreach (var method in virtualMethods)
@ -230,11 +254,54 @@ namespace Obfuz
throw new Exception($"group:{group} method:{method} not found in rename record map"); throw new Exception($"group:{group} method:{method} not found in rename record map");
} }
} }
Debug.Log("Rename virtual methods end");
Debug.Log("Rename methods end");
} }
private List<ObfuzAssemblyInfo> GetReferenceMeAssemblies(ModuleDef mod) private void RenameProperties()
{ {
return _ctx.assemblies.Find(ass => ass.module == mod).referenceMeAssemblies; Debug.Log("Rename properties begin");
foreach (ObfuzAssemblyInfo ass in _ctx.assemblies)
{
foreach (TypeDef type in ass.module.GetTypes())
{
foreach (PropertyDef property in type.Properties)
{
if (_renamePolicy.NeedRename(property))
{
Rename(property);
}
else
{
_renameRecordMap.AddUnRenameRecord(property);
}
}
}
}
Debug.Log("Rename properties end");
}
private void RenameEvents()
{
Debug.Log("Rename events begin");
foreach (ObfuzAssemblyInfo ass in _ctx.assemblies)
{
foreach (TypeDef type in ass.module.GetTypes())
{
foreach (EventDef eventDef in type.Events)
{
if (_renamePolicy.NeedRename(eventDef))
{
Rename(eventDef);
}
else
{
_renameRecordMap.AddUnRenameRecord(eventDef);
}
}
}
}
Debug.Log("Rename events begin");
} }
private void Rename(ModuleDefMD mod) private void Rename(ModuleDefMD mod)
@ -655,6 +722,7 @@ namespace Obfuz
{ {
ModuleDefMD mod = (ModuleDefMD)method.DeclaringType.Module; ModuleDefMD mod = (ModuleDefMD)method.DeclaringType.Module;
RenameMethodParams(method);
RenameMethodBody(method); RenameMethodBody(method);
foreach (ObfuzAssemblyInfo ass in GetReferenceMeAssemblies(mod)) foreach (ObfuzAssemblyInfo ass in GetReferenceMeAssemblies(mod))
{ {
@ -714,6 +782,7 @@ namespace Obfuz
method.Name = newName; method.Name = newName;
_renameRecordMap.AddRenameRecord(method, oldName, newName); _renameRecordMap.AddRenameRecord(method, oldName, newName);
} }
private void RenameMethodBody(MethodDef method) private void RenameMethodBody(MethodDef method)
@ -724,6 +793,17 @@ namespace Obfuz
} }
} }
private void RenameMethodParams(MethodDef method)
{
foreach (Parameter param in method.Parameters)
{
if (param.ParamDef != null)
{
Rename(param.ParamDef);
}
}
}
private void Rename(ParamDef param) private void Rename(ParamDef param)
{ {
// let param name == 1 is more obfuscated // let param name == 1 is more obfuscated