修复当一个Type之前为不需要混淆名字,后面改为需要混淆时,仍然使用mapping文件中的newFullname作为新名字,而它的newFullname为空字符串串,导致il2cpp生成代码出现问题的严重bug。

before-split
walon 2025-05-25 08:39:43 +08:00
parent e0da3da2bc
commit 6e989ccd36
1 changed files with 35 additions and 16 deletions

View File

@ -128,7 +128,7 @@ namespace Obfuz.ObfusPasses.SymbolObfus
nameMaker.AddPreservedNamespace(type, type.Namespace); nameMaker.AddPreservedNamespace(type, type.Namespace);
string fullTypeName = type.FullName; string fullTypeName = type.FullName;
RenameMappingType rmt = rma?.types.GetValueOrDefault(fullTypeName); RenameMappingType rmt = rma?.types.GetValueOrDefault(fullTypeName);
if (rmt != null) if (rmt != null && rmt.status == RenameStatus.Renamed)
{ {
var (newNamespace, newName) = MetaUtil.SplitNamespaceAndName(rmt.newFullName); var (newNamespace, newName) = MetaUtil.SplitNamespaceAndName(rmt.newFullName);
nameMaker.AddPreservedNamespace(type, newNamespace); nameMaker.AddPreservedNamespace(type, newNamespace);
@ -149,7 +149,7 @@ namespace Obfuz.ObfusPasses.SymbolObfus
string methodSig = TypeSigUtil.ComputeMethodDefSignature(method); string methodSig = TypeSigUtil.ComputeMethodDefSignature(method);
RenameMappingMethod rmm = rmt?.methods.GetValueOrDefault(methodSig); RenameMappingMethod rmm = rmt?.methods.GetValueOrDefault(methodSig);
if (rmm != null) if (rmm != null && rmm.status == RenameStatus.Renamed)
{ {
nameMaker.AddPreservedName(method, rmm.newName); nameMaker.AddPreservedName(method, rmm.newName);
} }
@ -168,7 +168,7 @@ namespace Obfuz.ObfusPasses.SymbolObfus
nameMaker.AddPreservedName(field, field.Name); nameMaker.AddPreservedName(field, field.Name);
string fieldSig = TypeSigUtil.ComputeFieldDefSignature(field); string fieldSig = TypeSigUtil.ComputeFieldDefSignature(field);
RenameMappingField rmf = rmt?.fields.GetValueOrDefault(fieldSig); RenameMappingField rmf = rmt?.fields.GetValueOrDefault(fieldSig);
if (rmf != null) if (rmf != null && rmf.status == RenameStatus.Renamed)
{ {
nameMaker.AddPreservedName(field, rmf.newName); nameMaker.AddPreservedName(field, rmf.newName);
} }
@ -186,7 +186,7 @@ namespace Obfuz.ObfusPasses.SymbolObfus
nameMaker.AddPreservedName(property, property.Name); nameMaker.AddPreservedName(property, property.Name);
string propertySig = TypeSigUtil.ComputePropertyDefSignature(property); string propertySig = TypeSigUtil.ComputePropertyDefSignature(property);
RenameMappingProperty rmp = rmt?.properties.GetValueOrDefault(propertySig); RenameMappingProperty rmp = rmt?.properties.GetValueOrDefault(propertySig);
if (rmp != null) if (rmp != null && rmp.status == RenameStatus.Renamed)
{ {
nameMaker.AddPreservedName(property, rmp.newName); nameMaker.AddPreservedName(property, rmp.newName);
} }
@ -204,7 +204,7 @@ namespace Obfuz.ObfusPasses.SymbolObfus
nameMaker.AddPreservedName(eventDef, eventDef.Name); nameMaker.AddPreservedName(eventDef, eventDef.Name);
string eventSig = TypeSigUtil.ComputeEventDefSignature(eventDef); string eventSig = TypeSigUtil.ComputeEventDefSignature(eventDef);
RenameMappingEvent rme = rmt?.events.GetValueOrDefault(eventSig); RenameMappingEvent rme = rmt?.events.GetValueOrDefault(eventSig);
if (rme != null) if (rme != null && rme.status == RenameStatus.Renamed)
{ {
nameMaker.AddPreservedName(eventDef, rme.newName); nameMaker.AddPreservedName(eventDef, rme.newName);
} }
@ -627,9 +627,12 @@ namespace Obfuz.ObfusPasses.SymbolObfus
if (_typeRenames.TryGetValue(type, out var record) && record.renameMappingData != null) if (_typeRenames.TryGetValue(type, out var record) && record.renameMappingData != null)
{ {
var rmt = (RenameMappingType)record.renameMappingData; var rmt = (RenameMappingType)record.renameMappingData;
Assert.IsFalse(string.IsNullOrWhiteSpace(rmt.newFullName)); if (rmt.status == RenameStatus.Renamed)
(newNamespace, newName) = MetaUtil.SplitNamespaceAndName(rmt.newFullName); {
return true; Assert.IsFalse(string.IsNullOrWhiteSpace(rmt.newFullName));
(newNamespace, newName) = MetaUtil.SplitNamespaceAndName(rmt.newFullName);
return true;
}
} }
newNamespace = null; newNamespace = null;
newName = null; newName = null;
@ -640,8 +643,12 @@ namespace Obfuz.ObfusPasses.SymbolObfus
{ {
if (_methodRenames.TryGetValue(method, out var record) && record.renameMappingData != null) if (_methodRenames.TryGetValue(method, out var record) && record.renameMappingData != null)
{ {
newName = ((RenameMappingMethod)record.renameMappingData).newName; RenameMappingMethod rmm = (RenameMappingMethod)record.renameMappingData;
return true; if (rmm.status == RenameStatus.Renamed)
{
newName = ((RenameMappingMethod)record.renameMappingData).newName;
return true;
}
} }
newName = null; newName = null;
return false; return false;
@ -651,8 +658,12 @@ namespace Obfuz.ObfusPasses.SymbolObfus
{ {
if (_fieldRenames.TryGetValue(field, out var record) && record.renameMappingData != null) if (_fieldRenames.TryGetValue(field, out var record) && record.renameMappingData != null)
{ {
newName = ((RenameMappingField)record.renameMappingData).newName; RenameMappingField rmm = (RenameMappingField)record.renameMappingData;
return true; if (rmm.status == RenameStatus.Renamed)
{
newName = ((RenameMappingField)record.renameMappingData).newName;
return true;
}
} }
newName = null; newName = null;
return false; return false;
@ -662,8 +673,12 @@ namespace Obfuz.ObfusPasses.SymbolObfus
{ {
if (_propertyRenames.TryGetValue(property, out var record) && record.renameMappingData != null) if (_propertyRenames.TryGetValue(property, out var record) && record.renameMappingData != null)
{ {
newName = ((RenameMappingProperty)record.renameMappingData).newName; RenameMappingProperty rmm = (RenameMappingProperty)record.renameMappingData;
return true; if (rmm.status == RenameStatus.Renamed)
{
newName = ((RenameMappingProperty)record.renameMappingData).newName;
return true;
}
} }
newName = null; newName = null;
return false; return false;
@ -673,8 +688,12 @@ namespace Obfuz.ObfusPasses.SymbolObfus
{ {
if (_eventRenames.TryGetValue(eventDef, out var record) && record.renameMappingData != null) if (_eventRenames.TryGetValue(eventDef, out var record) && record.renameMappingData != null)
{ {
newName = ((RenameMappingEvent)record.renameMappingData).newName; RenameMappingEvent rmm = (RenameMappingEvent)record.renameMappingData;
return true; if (rmm.status == RenameStatus.Renamed)
{
newName = ((RenameMappingEvent)record.renameMappingData).newName;
return true;
}
} }
newName = null; newName = null;
return false; return false;