diff --git a/Editor/Rename/NameMaker.cs b/Editor/Rename/NameMaker.cs index 32c113d..8423240 100644 --- a/Editor/Rename/NameMaker.cs +++ b/Editor/Rename/NameMaker.cs @@ -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); diff --git a/Editor/Rename/RenamePolicy.cs b/Editor/Rename/RenamePolicy.cs index 8ed60ce..e8cd06f 100644 --- a/Editor/Rename/RenamePolicy.cs +++ b/Editor/Rename/RenamePolicy.cs @@ -26,7 +26,7 @@ namespace Obfuz.Rename { public bool NeedRename(ModuleDefMD mod) { - return true; + return false; } public bool NeedRename(TypeDef typeDef) diff --git a/Editor/Rename/SymbolRename.cs b/Editor/Rename/SymbolRename.cs index 83425da..2985047 100644 --- a/Editor/Rename/SymbolRename.cs +++ b/Editor/Rename/SymbolRename.cs @@ -31,7 +31,7 @@ namespace Obfuz } foreach (TypeDef type in ass.module.GetTypes()) { - if (type.FullName != "" && _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 == "") + { + return true; + } + return false; + } + private List 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)