From 13b032fde82272648496ad760e8b85d16f45cc9d Mon Sep 17 00:00:00 2001 From: walon Date: Sun, 13 Apr 2025 11:18:34 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E5=91=BD=E5=90=8D=E5=87=BD=E6=95=B0?= =?UTF-8?q?=EF=BC=8C=E6=9C=AA=E5=A4=84=E7=90=86=E8=99=9A=E5=87=BD=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Editor/Rename/SymbolRename.cs | 73 ++++++++++++++++++++++++++++- Editor/Rename/SystemRenamePolicy.cs | 14 ++++++ 2 files changed, 86 insertions(+), 1 deletion(-) diff --git a/Editor/Rename/SymbolRename.cs b/Editor/Rename/SymbolRename.cs index 1df4078..0b90634 100644 --- a/Editor/Rename/SymbolRename.cs +++ b/Editor/Rename/SymbolRename.cs @@ -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) diff --git a/Editor/Rename/SystemRenamePolicy.cs b/Editor/Rename/SystemRenamePolicy.cs index 9740f6f..b58d1b5 100644 --- a/Editor/Rename/SystemRenamePolicy.cs +++ b/Editor/Rename/SystemRenamePolicy.cs @@ -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; + } } }