支持rename field

backup
walon 2025-04-07 08:04:29 +08:00
parent e260319bba
commit 53681bd14a
3 changed files with 58 additions and 5 deletions

View File

@ -67,7 +67,7 @@ namespace Obfuz
{
//Debug.Log($"do load module:{dllPath}");
ModuleDefMD mod = ModuleDefMD.Load(File.ReadAllBytes(dllPath), _modCtx);
mod.EnableTypeDefFindCache = true;
//mod.EnableTypeDefFindCache = true;
_asmResolver.AddToCache(mod);
return mod;
}

View File

@ -28,7 +28,7 @@ namespace Obfuz.Rename
{
private string GetDefaultNewName(string originName)
{
return originName + "_generated_obfuz";
return originName + "_xxx__";
}
public string GetNewName(ModuleDefMD mod, string originalName)

View File

@ -80,7 +80,7 @@ namespace Obfuz
return false;
}
private List<ObfuzAssemblyInfo> GetReferenceMeAssemblies(ModuleDefMD mod)
private List<ObfuzAssemblyInfo> GetReferenceMeAssemblies(ModuleDef mod)
{
return _ctx.assemblies.Find(ass => ass.module == mod).referenceMeAssemblies;
}
@ -126,7 +126,7 @@ namespace Obfuz
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 (ObfuzAssemblyInfo ass in GetReferenceMeAssemblies(type.Module))
{
foreach (TypeRef typeRef in ass.module.GetTypeRefs())
{
@ -143,13 +143,66 @@ namespace Obfuz
typeRef.Namespace = newNamespace;
}
typeRef.Name = newName;
Debug.Log($"rename assembly:{typeRef.DefinitionAssembly.Name} reference {oldFullName} => {typeRef.FullName}");
Debug.Log($"rename assembly:{ass.module.Name} reference {oldFullName} => {typeRef.FullName}");
}
}
}
private void Rename(FieldDef field)
{
string oldName = field.Name;
string newName = _ctx.nameMaker.GetNewName(field, oldName);
foreach (ObfuzAssemblyInfo ass in GetReferenceMeAssemblies(field.DeclaringType.Module))
{
foreach (MemberRef memberRef in ass.module.GetMemberRefs())
{
if (!memberRef.IsFieldRef)
{
continue;
}
if (oldName != memberRef.Name || !TypeEqualityComparer.Instance.Equals(memberRef.FieldSig.Type, field.FieldSig.Type))
{
continue;
}
IMemberRefParent parent = memberRef.Class;
if (parent is ITypeDefOrRef typeDefOrRef)
{
if (typeDefOrRef.IsTypeDef)
{
if (typeDefOrRef != field.DeclaringType)
{
continue;
}
}
else if (typeDefOrRef.IsTypeRef)
{
if (typeDefOrRef.ResolveTypeDefThrow() != field.DeclaringType)
{
continue;
}
}
else if (typeDefOrRef.IsTypeSpec)
{
var typeSpec = (TypeSpec)typeDefOrRef;
GenericInstSig gis = typeSpec.TryGetGenericInstSig();
if (gis == null || gis.GenericType.ToTypeDefOrRef().ResolveTypeDef() != field.DeclaringType)
{
continue;
}
}
else
{
continue;
}
}
string oldFieldFullName = memberRef.ToString();
memberRef.Name = newName;
Debug.Log($"rename assembly:{ass.name} field:{oldFieldFullName} => {memberRef}");
}
}
field.Name = newName;
Debug.Log($"rename field. {field} => {newName}");
}
private void Rename(MethodDef method)