重命名函数,未处理虚函数
parent
8b082a0905
commit
13b032fde8
|
@ -583,11 +583,82 @@ namespace Obfuz
|
|||
|
||||
private void Rename(MethodDef method)
|
||||
{
|
||||
string oldName = method.Name;
|
||||
string newName = _nameMaker.GetNewName(method, oldName);
|
||||
|
||||
ModuleDefMD mod = (ModuleDefMD)method.DeclaringType.Module;
|
||||
RenameMethodBody(method);
|
||||
foreach (ObfuzAssemblyInfo ass in GetReferenceMeAssemblies(mod))
|
||||
{
|
||||
foreach (MemberRef memberRef in ass.module.GetMemberRefs())
|
||||
{
|
||||
if (!memberRef.IsMethodRef)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if (oldName != memberRef.Name)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
IMemberRefParent parent = memberRef.Class;
|
||||
if (parent is ITypeDefOrRef typeDefOrRef)
|
||||
{
|
||||
if (typeDefOrRef.IsTypeDef)
|
||||
{
|
||||
if (typeDefOrRef != method.DeclaringType)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else if (typeDefOrRef.IsTypeRef)
|
||||
{
|
||||
if (typeDefOrRef.ResolveTypeDefThrow() != method.DeclaringType)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else if (typeDefOrRef.IsTypeSpec)
|
||||
{
|
||||
var typeSpec = (TypeSpec)typeDefOrRef;
|
||||
GenericInstSig gis = typeSpec.TryGetGenericInstSig();
|
||||
if (gis == null || gis.GenericType.ToTypeDefOrRef().ResolveTypeDef() != method.DeclaringType)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
// compare methodsig
|
||||
if (!new SigComparer(default).Equals(method.MethodSig, memberRef.MethodSig))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
string oldMethodFullName = memberRef.ToString();
|
||||
memberRef.Name = newName;
|
||||
|
||||
Debug.Log($"rename assembly:{ass.name} method:{oldMethodFullName} => {memberRef}");
|
||||
}
|
||||
}
|
||||
|
||||
method.Name = newName;
|
||||
}
|
||||
|
||||
private void RenameMethodBody(MethodDef method)
|
||||
{
|
||||
if (method.Body == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
private void Rename(ParamDef param)
|
||||
{
|
||||
param.Name = _nameMaker.GetNewName(param, param.Name);
|
||||
// let param name == 1 is more obfuscated
|
||||
param.Name = "1";// _nameMaker.GetNewName(param, param.Name);
|
||||
}
|
||||
|
||||
private void Rename(EventDef eventDef)
|
||||
|
|
|
@ -13,5 +13,19 @@ namespace Obfuz.Rename
|
|||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public override bool NeedRename(MethodDef methodDef)
|
||||
{
|
||||
return methodDef.Name != ".ctor" && methodDef.Name != ".cctor";
|
||||
}
|
||||
|
||||
public override bool NeedRename(FieldDef fieldDef)
|
||||
{
|
||||
if (fieldDef.DeclaringType.IsEnum && fieldDef.Name == "value__")
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue