rename TypeDef

backup
walon 2025-04-05 23:21:24 +08:00
parent 177896026e
commit e260319bba
3 changed files with 58 additions and 2 deletions

View File

@ -13,6 +13,8 @@ namespace Obfuz.Rename
string GetNewName(TypeDef typeDef, string originalName);
string GetNewNamespace(TypeDef typeDef, string originalNamespace);
string GetNewName(MethodDef methodDef, string originalName);
string GetNewName(FieldDef fieldDef, string originalName);
@ -34,6 +36,11 @@ namespace Obfuz.Rename
return GetDefaultNewName(originalName);
}
public string GetNewNamespace(TypeDef typeDef, string originalNamespace)
{
return GetDefaultNewName(originalNamespace);
}
public string GetNewName(TypeDef typeDef, string originalName)
{
return GetDefaultNewName(originalName);

View File

@ -26,7 +26,7 @@ namespace Obfuz.Rename
{
public bool NeedRename(ModuleDefMD mod)
{
return true;
return false;
}
public bool NeedRename(TypeDef typeDef)

View File

@ -31,7 +31,7 @@ namespace Obfuz
}
foreach (TypeDef type in ass.module.GetTypes())
{
if (type.FullName != "<Module>" && _renamePolicy.NeedRename(type))
if (!IsSystemReservedType(type) && _renamePolicy.NeedRename(type))
{
Rename(type);
}
@ -71,6 +71,15 @@ namespace Obfuz
}
}
private bool IsSystemReservedType(TypeDef type)
{
if (type.FullName == "<Module>")
{
return true;
}
return false;
}
private List<ObfuzAssemblyInfo> GetReferenceMeAssemblies(ModuleDefMD mod)
{
return _ctx.assemblies.Find(ass => ass.module == mod).referenceMeAssemblies;
@ -97,6 +106,46 @@ namespace Obfuz
private void Rename(TypeDef type)
{
string moduleName = MetaUtil.GetModuleNameWithoutExt(type.Module.Name);
string oldFullName = type.FullName;
string oldNamespace = type.Namespace;
string newNamespace;
if (string.IsNullOrEmpty(oldNamespace))
{
newNamespace = oldNamespace;
}
else
{
newNamespace = _ctx.nameMaker.GetNewNamespace(type, oldNamespace);
type.Namespace = newNamespace;
}
string oldName = type.Name;
string newName = _ctx.nameMaker.GetNewName(type, oldName);
type.Name = newName;
string newFullName = type.FullName;
Debug.Log($"rename typedef. assembly:{type.Module.Name} oldName:{oldFullName} => newName:{newFullName}");
foreach (ObfuzAssemblyInfo ass in GetReferenceMeAssemblies((ModuleDefMD)type.Module))
{
foreach (TypeRef typeRef in ass.module.GetTypeRefs())
{
if (typeRef.FullName != oldFullName)
{
continue;
}
if (typeRef.DefinitionAssembly.Name != moduleName)
{
continue;
}
if (!string.IsNullOrEmpty(oldNamespace))
{
typeRef.Namespace = newNamespace;
}
typeRef.Name = newName;
Debug.Log($"rename assembly:{typeRef.DefinitionAssembly.Name} reference {oldFullName} => {typeRef.FullName}");
}
}
}
private void Rename(FieldDef field)