diff --git a/com.code-philosophy.obfuz/Editor/ObfusPasses/SymbolObfus/RenameRecordMap.cs b/com.code-philosophy.obfuz/Editor/ObfusPasses/SymbolObfus/RenameRecordMap.cs index 97c5b30..1188599 100644 --- a/com.code-philosophy.obfuz/Editor/ObfusPasses/SymbolObfus/RenameRecordMap.cs +++ b/com.code-philosophy.obfuz/Editor/ObfusPasses/SymbolObfus/RenameRecordMap.cs @@ -1,4 +1,5 @@ using dnlib.DotNet; +using NUnit.Framework; using Obfuz.Utils; using System; using System.Collections.Generic; @@ -407,6 +408,10 @@ namespace Obfuz.ObfusPasses.SymbolObfus typeNode.SetAttribute("fullName", record?.signature ?? type.FullName); typeNode.SetAttribute("newFullName", record != null && record.status == RenameStatus.Renamed ? record.newName : ""); typeNode.SetAttribute("status", record != null ? record.status.ToString() : RenameStatus.NotRenamed.ToString()); + if (record != null && record.status == RenameStatus.Renamed) + { + Assert.IsFalse(string.IsNullOrWhiteSpace(record.newName), "New name for type cannot be null or empty when status is Renamed."); + } foreach (FieldDef field in type.Fields) { @@ -622,6 +627,7 @@ namespace Obfuz.ObfusPasses.SymbolObfus if (_typeRenames.TryGetValue(type, out var record) && record.renameMappingData != null) { var rmt = (RenameMappingType)record.renameMappingData; + Assert.IsFalse(string.IsNullOrWhiteSpace(rmt.newFullName)); (newNamespace, newName) = MetaUtil.SplitNamespaceAndName(rmt.newFullName); return true; } diff --git a/com.code-philosophy.obfuz/Editor/ObfusPasses/SymbolObfus/SymbolRename.cs b/com.code-philosophy.obfuz/Editor/ObfusPasses/SymbolObfus/SymbolRename.cs index 4762c64..a38433d 100644 --- a/com.code-philosophy.obfuz/Editor/ObfusPasses/SymbolObfus/SymbolRename.cs +++ b/com.code-philosophy.obfuz/Editor/ObfusPasses/SymbolObfus/SymbolRename.cs @@ -396,6 +396,20 @@ namespace Obfuz.ObfusPasses.SymbolObfus } + private void RenameMethodRefOrMethodSpec(IMethod method, Dictionary refMethodMetasMap) + { + if (method is MemberRef memberRef) + { + RenameMethodRef(memberRef, refMethodMetasMap); + } + else if (method is MethodSpec methodSpec) + { + if (methodSpec.Method is MemberRef memberRef2) + { + RenameMethodRef(memberRef2, refMethodMetasMap); + } + } + } private void BuildRefMethodMetasMap(Dictionary refMethodMetasMap) { @@ -403,17 +417,7 @@ namespace Obfuz.ObfusPasses.SymbolObfus { foreach (IMethod method in WalkAllMethodInstructionOperand(mod)) { - if (method is MemberRef memberRef) - { - RenameMethodRef(memberRef, refMethodMetasMap); - } - else if (method is MethodSpec methodSpec) - { - if (methodSpec.Method is MemberRef memberRef2) - { - RenameMethodRef(memberRef2, refMethodMetasMap); - } - } + RenameMethodRefOrMethodSpec(method, refMethodMetasMap); } foreach (var type in mod.GetTypes()) @@ -424,26 +428,26 @@ namespace Obfuz.ObfusPasses.SymbolObfus { foreach (MethodOverride methodOverride in method.Overrides) { - if (methodOverride.MethodDeclaration is MemberRef memberRef) - { - RenameMethodRef(memberRef, refMethodMetasMap); - } - else - { - Assert.IsTrue(methodOverride.MethodDeclaration is MethodDef); - } - if (methodOverride.MethodBody is MemberRef memberRef2) - { - RenameMethodRef(memberRef2, refMethodMetasMap); - } - else - { - Assert.IsTrue(methodOverride.MethodBody is MethodDef); - } + RenameMethodRefOrMethodSpec(methodOverride.MethodDeclaration, refMethodMetasMap); + RenameMethodRefOrMethodSpec(methodOverride.MethodBody, refMethodMetasMap); } } } } + foreach (var e in _refTypeRefMetasMap) + { + TypeDef typeDef = e.Key; + var hierarchyFields = new List(); + BuildHierarchyFields(typeDef, hierarchyFields); + RefTypeDefMetas typeDefMetas = e.Value; + foreach (CustomAttribute ca in typeDefMetas.customAttributes) + { + if (ca.Constructor is IMethod method) + { + RenameMethodRefOrMethodSpec(method, refMethodMetasMap); + } + } + } } }