fix: 修复非混淆的程序集中虚函数override混淆程序集中函数,当基类虚函数名被混淆后没有同步修改非混淆程序集中override函数名的bug

remove: 删除 RenameRecordMap中维护parameter映射的代码
before-split
walon 2025-05-23 11:13:45 +08:00
parent 4d8737f01c
commit f5b45a0543
2 changed files with 20 additions and 39 deletions

View File

@ -92,7 +92,6 @@ namespace Obfuz.ObfusPasses.SymbolObfus
private readonly Dictionary<ModuleDef, RenameRecord> _modRenames = new Dictionary<ModuleDef, RenameRecord>(); private readonly Dictionary<ModuleDef, RenameRecord> _modRenames = new Dictionary<ModuleDef, RenameRecord>();
private readonly Dictionary<TypeDef, RenameRecord> _typeRenames = new Dictionary<TypeDef, RenameRecord>(); private readonly Dictionary<TypeDef, RenameRecord> _typeRenames = new Dictionary<TypeDef, RenameRecord>();
private readonly Dictionary<MethodDef, RenameRecord> _methodRenames = new Dictionary<MethodDef, RenameRecord>(); private readonly Dictionary<MethodDef, RenameRecord> _methodRenames = new Dictionary<MethodDef, RenameRecord>();
private readonly Dictionary<ParamDef, RenameRecord> _paramRenames = new Dictionary<ParamDef, RenameRecord>();
private readonly Dictionary<FieldDef, RenameRecord> _fieldRenames = new Dictionary<FieldDef, RenameRecord>(); private readonly Dictionary<FieldDef, RenameRecord> _fieldRenames = new Dictionary<FieldDef, RenameRecord>();
private readonly Dictionary<PropertyDef, RenameRecord> _propertyRenames = new Dictionary<PropertyDef, RenameRecord>(); private readonly Dictionary<PropertyDef, RenameRecord> _propertyRenames = new Dictionary<PropertyDef, RenameRecord>();
private readonly Dictionary<EventDef, RenameRecord> _eventRenames = new Dictionary<EventDef, RenameRecord>(); private readonly Dictionary<EventDef, RenameRecord> _eventRenames = new Dictionary<EventDef, RenameRecord>();
@ -147,7 +146,6 @@ namespace Obfuz.ObfusPasses.SymbolObfus
{ {
nameMaker.AddPreservedName(method, method.Name); nameMaker.AddPreservedName(method, method.Name);
string methodSig = TypeSigUtil.ComputeMethodDefSignature(method); string methodSig = TypeSigUtil.ComputeMethodDefSignature(method);
nameMaker.AddPreservedName(method, method.Name);
RenameMappingMethod rmm = rmt?.methods.GetValueOrDefault(methodSig); RenameMappingMethod rmm = rmt?.methods.GetValueOrDefault(methodSig);
if (rmm != null) if (rmm != null)
@ -163,19 +161,6 @@ namespace Obfuz.ObfusPasses.SymbolObfus
renameMappingData = rmm, renameMappingData = rmm,
oldStackTraceSignature = MetaUtil.CreateMethodDefIl2CppStackTraceSignature(method), oldStackTraceSignature = MetaUtil.CreateMethodDefIl2CppStackTraceSignature(method),
}); });
foreach (Parameter param in method.Parameters)
{
if (param.ParamDef != null)
{
_paramRenames.Add(param.ParamDef, new RenameRecord
{
status = RenameStatus.NotRenamed,
signature = param.Name,
oldName = param.Name,
newName = null,
});
}
}
} }
foreach (FieldDef field in type.Fields) foreach (FieldDef field in type.Fields)
{ {
@ -550,13 +535,6 @@ namespace Obfuz.ObfusPasses.SymbolObfus
methodNode.SetAttribute("oldStackTraceSignature", record.oldStackTraceSignature); methodNode.SetAttribute("oldStackTraceSignature", record.oldStackTraceSignature);
methodNode.SetAttribute("newStackTraceSignature", MetaUtil.CreateMethodDefIl2CppStackTraceSignature(method)); methodNode.SetAttribute("newStackTraceSignature", MetaUtil.CreateMethodDefIl2CppStackTraceSignature(method));
//methodNode.SetAttribute("status", record != null ? record.status.ToString() : RenameStatus.NotRenamed.ToString()); //methodNode.SetAttribute("status", record != null ? record.status.ToString() : RenameStatus.NotRenamed.ToString());
foreach (Parameter param in method.Parameters)
{
if (param.ParamDef != null)
{
WriteMethodParamMapping(methodNode, param.ParamDef);
}
}
typeEle.AppendChild(methodNode); typeEle.AppendChild(methodNode);
} }
@ -568,19 +546,6 @@ namespace Obfuz.ObfusPasses.SymbolObfus
typeEle.AppendChild(methodNode); typeEle.AppendChild(methodNode);
} }
private void WriteMethodParamMapping(XmlElement methodEle, ParamDef param)
{
if (!_paramRenames.TryGetValue(param, out var record) || record.status == RenameStatus.NotRenamed)
{
return;
}
var paramNode = methodEle.OwnerDocument.CreateElement("param");
paramNode.SetAttribute("index", param.Sequence.ToString());
paramNode.SetAttribute("newName", record.newName);
//paramNode.SetAttribute("status", record.status.ToString());
methodEle.AppendChild(paramNode);
}
public void AddRename(ModuleDef mod, string newName) public void AddRename(ModuleDef mod, string newName)
{ {
RenameRecord record = _modRenames[mod]; RenameRecord record = _modRenames[mod];
@ -597,9 +562,25 @@ namespace Obfuz.ObfusPasses.SymbolObfus
public void AddRename(MethodDef method, string newName) public void AddRename(MethodDef method, string newName)
{ {
RenameRecord record = _methodRenames[method]; if (_methodRenames.TryGetValue(method, out RenameRecord record))
{
record.status = RenameStatus.Renamed; record.status = RenameStatus.Renamed;
record.newName = newName; record.newName = newName;
return;
}
else
{
string methodSig = TypeSigUtil.ComputeMethodDefSignature(method);
_methodRenames.Add(method, new RenameRecord
{
status = RenameStatus.Renamed,
signature = methodSig,
oldName = method.Name,
newName = newName,
renameMappingData = null,
oldStackTraceSignature = MetaUtil.CreateMethodDefIl2CppStackTraceSignature(method),
});
}
} }
public void InitAndAddRename(VirtualMethodGroup methodGroup, string newName) public void InitAndAddRename(VirtualMethodGroup methodGroup, string newName)

View File

@ -475,7 +475,7 @@ namespace Obfuz.ObfusPasses.SymbolObfus
VirtualMethodGroup group = _virtualMethodGroupCalculator.GetMethodGroup(method); VirtualMethodGroup group = _virtualMethodGroupCalculator.GetMethodGroup(method);
if (!groupNeedRenames.TryGetValue(group, out var needRename)) if (!groupNeedRenames.TryGetValue(group, out var needRename))
{ {
needRename = group.methods.All(m => _toObfuscatedModuleSet.Contains(m.DeclaringType.Module) && _renamePolicy.NeedRename(m)); needRename = group.methods.All(m => _obfuscatedAndNotObfuscatedModules.Contains(m.Module) && (!_toObfuscatedModuleSet.Contains(m.DeclaringType.Module) || _renamePolicy.NeedRename(m)));
groupNeedRenames.Add(group, needRename); groupNeedRenames.Add(group, needRename);
if (needRename) if (needRename)
{ {