支持rename field
parent
e260319bba
commit
53681bd14a
|
@ -67,7 +67,7 @@ namespace Obfuz
|
||||||
{
|
{
|
||||||
//Debug.Log($"do load module:{dllPath}");
|
//Debug.Log($"do load module:{dllPath}");
|
||||||
ModuleDefMD mod = ModuleDefMD.Load(File.ReadAllBytes(dllPath), _modCtx);
|
ModuleDefMD mod = ModuleDefMD.Load(File.ReadAllBytes(dllPath), _modCtx);
|
||||||
mod.EnableTypeDefFindCache = true;
|
//mod.EnableTypeDefFindCache = true;
|
||||||
_asmResolver.AddToCache(mod);
|
_asmResolver.AddToCache(mod);
|
||||||
return mod;
|
return mod;
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,7 +28,7 @@ namespace Obfuz.Rename
|
||||||
{
|
{
|
||||||
private string GetDefaultNewName(string originName)
|
private string GetDefaultNewName(string originName)
|
||||||
{
|
{
|
||||||
return originName + "_generated_obfuz";
|
return originName + "_xxx__";
|
||||||
}
|
}
|
||||||
|
|
||||||
public string GetNewName(ModuleDefMD mod, string originalName)
|
public string GetNewName(ModuleDefMD mod, string originalName)
|
||||||
|
|
|
@ -80,7 +80,7 @@ namespace Obfuz
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<ObfuzAssemblyInfo> GetReferenceMeAssemblies(ModuleDefMD mod)
|
private List<ObfuzAssemblyInfo> GetReferenceMeAssemblies(ModuleDef mod)
|
||||||
{
|
{
|
||||||
return _ctx.assemblies.Find(ass => ass.module == mod).referenceMeAssemblies;
|
return _ctx.assemblies.Find(ass => ass.module == mod).referenceMeAssemblies;
|
||||||
}
|
}
|
||||||
|
@ -126,7 +126,7 @@ namespace Obfuz
|
||||||
string newFullName = type.FullName;
|
string newFullName = type.FullName;
|
||||||
Debug.Log($"rename typedef. assembly:{type.Module.Name} oldName:{oldFullName} => newName:{newFullName}");
|
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())
|
foreach (TypeRef typeRef in ass.module.GetTypeRefs())
|
||||||
{
|
{
|
||||||
|
@ -143,13 +143,66 @@ namespace Obfuz
|
||||||
typeRef.Namespace = newNamespace;
|
typeRef.Namespace = newNamespace;
|
||||||
}
|
}
|
||||||
typeRef.Name = newName;
|
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)
|
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)
|
private void Rename(MethodDef method)
|
||||||
|
|
Loading…
Reference in New Issue