重构 RenameRecordMap

backup
walon 2025-04-16 13:34:53 +08:00
parent caf7cbe040
commit def8fb168c
3 changed files with 118 additions and 209 deletions

View File

@ -118,13 +118,69 @@ namespace Obfuz
oldName = name,
newName = null,
});
_modRenames.Add(mod, new RenameRecord
foreach (TypeDef type in mod.GetTypes())
{
status = RenameStatus.NotRenamed,
signature = mod.Assembly.Name,
oldName = mod.Assembly.Name,
newName = null,
});
_typeRenames.Add(type, new RenameRecord
{
status = RenameStatus.NotRenamed,
signature = type.FullName,
oldName = type.FullName,
newName = null,
});
foreach (MethodDef method in type.Methods)
{
_methodRenames.Add(method, new RenameRecord
{
status = RenameStatus.NotRenamed,
signature = TypeSigUtil.ComputeMethodDefSignature(method),
oldName = method.Name,
newName = null,
});
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)
{
_fieldRenames.Add(field, new RenameRecord
{
status = RenameStatus.NotRenamed,
signature = TypeSigUtil.ComputeFieldDefSignature(field),
oldName = field.Name,
newName = null,
});
}
foreach (PropertyDef property in type.Properties)
{
_propertyRenames.Add(property, new RenameRecord
{
status = RenameStatus.NotRenamed,
signature = TypeSigUtil.ComputePropertyDefSignature(property),
oldName = property.Name,
newName = null,
});
}
foreach (EventDef eventDef in type.Events)
{
_eventRenames.Add(eventDef, new RenameRecord
{
status = RenameStatus.NotRenamed,
signature = TypeSigUtil.ComputeEventDefSignature(eventDef),
oldName = eventDef.Name,
newName = null,
});
}
}
}
}
@ -215,7 +271,7 @@ namespace Obfuz
{
signature = signature,
newName = newName,
status = System.Enum.Parse<RenameStatus>(ele.Attributes["status"].Value),
status = RenameStatus.Renamed,
};
foreach (XmlNode node in ele.ChildNodes)
{
@ -240,7 +296,7 @@ namespace Obfuz
{
index = int.Parse(index),
newName = newName,
status = System.Enum.Parse<RenameStatus>(ele.Attributes["status"].Value),
status = RenameStatus.Renamed,
};
method.parameters.Add(rmp);
}
@ -253,7 +309,7 @@ namespace Obfuz
{
signature = signature,
newName = newName,
status = System.Enum.Parse<RenameStatus>(ele.Attributes["status"].Value),
status = RenameStatus.Renamed,
};
type.fields.Add(signature, rmf);
}
@ -266,7 +322,7 @@ namespace Obfuz
{
signature = signature,
newName = newName,
status = System.Enum.Parse<RenameStatus>(ele.Attributes["status"].Value),
status = RenameStatus.Renamed,
};
type.properties.Add(signature, rmp);
}
@ -279,7 +335,7 @@ namespace Obfuz
{
signature = signature,
newName = newName,
status = System.Enum.Parse<RenameStatus>(ele.Attributes["status"].Value),
status = RenameStatus.Renamed,
};
type.events.Add(signature, rme);
}
@ -408,194 +464,76 @@ namespace Obfuz
methodEle.AppendChild(paramNode);
}
public void AddRenameRecord(ModuleDefMD mod, string oldName, string newName)
public void AddRename(ModuleDefMD mod, string newName)
{
_modRenames.Add(mod, new RenameRecord
{
status = RenameStatus.Renamed,
signature = oldName,
oldName = oldName,
newName = newName
});
RenameRecord record = _modRenames[mod];
record.status = RenameStatus.Renamed;
record.newName = newName;
}
public void AddRenameRecord(TypeDef type, string oldName, string newName)
public void AddRename(TypeDef type, string newName)
{
_typeRenames.Add(type, new RenameRecord
{
status = RenameStatus.Renamed,
signature = oldName,
oldName = oldName,
newName = newName
});
RenameRecord record = _typeRenames[type];
record.status = RenameStatus.Renamed;
record.newName = newName;
}
public void AddRenameRecord(MethodDef method, string signature, string oldName, string newName)
public void AddRename(MethodDef method, string newName)
{
_methodRenames.Add(method, new RenameRecord
{
status = RenameStatus.Renamed,
signature = signature,
oldName = oldName,
newName = newName
});
RenameRecord record = _methodRenames[method];
record.status = RenameStatus.Renamed;
record.newName = newName;
}
public void AddRenameRecord(ParamDef paramDef, string oldName, string newName)
public void AddRename(ParamDef paramDef, string newName)
{
_paramRenames.Add(paramDef, new RenameRecord
{
status = RenameStatus.Renamed,
signature = oldName,
oldName = oldName,
newName = newName
});
RenameRecord record = _paramRenames[paramDef];
record.status = RenameStatus.Renamed;
record.newName = newName;
}
public void AddRenameRecord(VirtualMethodGroup methodGroup, string signature, string oldName, string newName)
public void InitAndAddRename(VirtualMethodGroup methodGroup, string newName)
{
RenameRecord methodRecord = _methodRenames[methodGroup.methods[0]];
_virtualMethodGroups.Add(methodGroup, new RenameRecord
{
status = RenameStatus.Renamed,
signature = signature,
oldName = oldName,
newName = newName
signature = methodRecord.signature,
oldName = methodRecord.oldName,
newName = newName,
});
}
public bool TryGetRenameRecord(VirtualMethodGroup group, out string oldName, out string newName)
public bool TryGetRename(VirtualMethodGroup group, out string newName)
{
if (_virtualMethodGroups.TryGetValue(group, out var record))
{
oldName = record.oldName;
newName = record.newName;
return true;
}
oldName = null;
newName = null;
return false;
}
public void AddRenameRecord(FieldDef field, string signature, string oldName, string newName)
public void AddRename(FieldDef field, string newName)
{
_fieldRenames.Add(field, new RenameRecord
{
status = RenameStatus.Renamed,
signature = signature,
oldName = oldName,
newName = newName
});
RenameRecord record = _fieldRenames[field];
record.status = RenameStatus.Renamed;
record.newName = newName;
}
public void AddRenameRecord(PropertyDef property, string signature, string oldName, string newName)
public void AddRename(PropertyDef property, string newName)
{
_propertyRenames.Add(property, new RenameRecord
{
status = RenameStatus.Renamed,
signature = signature,
oldName = oldName,
newName = newName
});
RenameRecord record = _propertyRenames[property];
record.status = RenameStatus.Renamed;
record.newName = newName;
}
public void AddRenameRecord(EventDef eventDef, string signature, string oldName, string newName)
public void AddRename(EventDef eventDef, string newName)
{
_eventRenames.Add(eventDef, new RenameRecord
{
status = RenameStatus.Renamed,
signature = signature,
oldName = oldName,
newName = newName
});
RenameRecord record = _eventRenames[eventDef];
record.status = RenameStatus.Renamed;
record.newName = newName;
}
public void AddUnRenameRecord(ModuleDefMD mod)
{
_modRenames.Add(mod, new RenameRecord
{
status = RenameStatus.NotRenamed,
signature = mod.Assembly.Name,
oldName = mod.Assembly.Name,
newName = null,
});
}
public void AddUnRenameRecord(TypeDef typeDef)
{
_typeRenames.Add(typeDef, new RenameRecord
{
status = RenameStatus.NotRenamed,
signature = typeDef.FullName,
oldName = typeDef.FullName,
newName = null,
});
}
public void AddUnRenameRecord(MethodDef methodDef)
{
_methodRenames.Add(methodDef, new RenameRecord
{
status = RenameStatus.NotRenamed,
signature = methodDef.FullName,
oldName = methodDef.Name,
newName = null,
});
}
public void AddUnRenameRecord(ParamDef paramDef)
{
_paramRenames.Add(paramDef, new RenameRecord
{
status = RenameStatus.NotRenamed,
signature = paramDef.Name,
oldName = paramDef.Name,
newName = null,
});
}
public void AddUnRenameRecord(VirtualMethodGroup methodGroup)
{
_virtualMethodGroups.Add(methodGroup, new RenameRecord
{
status = RenameStatus.NotRenamed,
signature = methodGroup.methods[0].FullName,
oldName = methodGroup.methods[0].Name,
newName = null,
});
}
public void AddUnRenameRecord(FieldDef fieldDef)
{
_fieldRenames.Add(fieldDef, new RenameRecord
{
status = RenameStatus.NotRenamed,
signature = fieldDef.FullName,
oldName = fieldDef.Name,
newName = null,
});
}
public void AddUnRenameRecord(PropertyDef propertyDef)
{
_propertyRenames.Add(propertyDef, new RenameRecord
{
status = RenameStatus.NotRenamed,
signature = propertyDef.FullName,
oldName = propertyDef.Name,
newName = null,
});
}
public void AddUnRenameRecord(EventDef eventDef)
{
_eventRenames.Add(eventDef, new RenameRecord
{
status = RenameStatus.NotRenamed,
signature = eventDef.FullName,
oldName = eventDef.Name,
newName = null,
});
}
}
}

View File

@ -118,6 +118,7 @@ namespace Obfuz
public void Process()
{
_renameRecordMap.Init(_obfuzAssemblies);
RenameModules();
RenameTypes();
RenameFields();
@ -140,10 +141,6 @@ namespace Obfuz
{
Rename(ass.module);
}
else
{
_renameRecordMap.AddUnRenameRecord(ass.module);
}
}
Debug.Log("Rename Modules end");
}
@ -241,10 +238,6 @@ namespace Obfuz
{
Rename(type, _refTypeRefMetasMap.TryGetValue(type, out var typeDefMetas) ? typeDefMetas : null);
}
else
{
_renameRecordMap.AddUnRenameRecord(type);
}
}
}
@ -351,10 +344,6 @@ namespace Obfuz
{
Rename(field, refFieldMetasMap.TryGetValue(field, out var fieldMetas) ? fieldMetas : null);
}
else
{
_renameRecordMap.AddUnRenameRecord(field);
}
}
}
}
@ -423,10 +412,6 @@ namespace Obfuz
{
Rename(method, refMethodMetasMap.TryGetValue(method, out var refMethodMetas) ? refMethodMetas : null);
}
else
{
_renameRecordMap.AddUnRenameRecord(method);
}
}
}
}
@ -449,21 +434,16 @@ namespace Obfuz
groupNeedRenames.Add(group, needRename);
if (needRename)
{
_renameRecordMap.AddRenameRecord(group, method.FullName, method.Name, _nameMaker.GetNewName(method, method.Name));
}
else
{
_renameRecordMap.AddUnRenameRecord(group);
_renameRecordMap.InitAndAddRename(group, _nameMaker.GetNewName(method, method.Name));
}
}
if (!needRename)
{
_renameRecordMap.AddUnRenameRecord(method);
continue;
}
if (_renameRecordMap.TryGetRenameRecord(group, out var oldName, out var newName))
if (_renameRecordMap.TryGetRename(group, out var newName))
{
Rename(method, refMethodMetasMap.TryGetValue(method, out var refMethodMetas) ? refMethodMetas : null, oldName, newName);
Rename(method, refMethodMetasMap.TryGetValue(method, out var refMethodMetas) ? refMethodMetas : null, newName);
}
else
{
@ -538,10 +518,6 @@ namespace Obfuz
{
Rename(property, refPropertyMetasMap.TryGetValue(property, out var refPropertyMeta) ? refPropertyMeta : null);
}
else
{
_renameRecordMap.AddUnRenameRecord(property);
}
}
}
}
@ -561,10 +537,6 @@ namespace Obfuz
{
Rename(eventDef);
}
else
{
_renameRecordMap.AddUnRenameRecord(eventDef);
}
}
}
}
@ -575,7 +547,7 @@ namespace Obfuz
{
string oldName = MetaUtil.GetModuleNameWithoutExt(mod.Name);
string newName = _nameMaker.GetNewName(mod, oldName);
_renameRecordMap.AddRenameRecord(mod, oldName, newName);
_renameRecordMap.AddRename(mod, newName);
mod.Name = $"{newName}.dll";
//Debug.Log($"rename module. oldName:{oldName} newName:{newName}");
foreach (ObfuzAssemblyInfo ass in GetReferenceMeAssemblies(mod))
@ -626,7 +598,7 @@ namespace Obfuz
}
type.Name = newName;
string newFullName = type.FullName;
_renameRecordMap.AddRenameRecord(type, oldFullName, newFullName);
_renameRecordMap.AddRename(type, newFullName);
//Debug.Log($"rename typedef. assembly:{type.Module.Name} oldName:{oldFullName} => newName:{newFullName}");
}
@ -653,7 +625,7 @@ namespace Obfuz
}
}
//Debug.Log($"rename field. {field} => {newName}");
_renameRecordMap.AddRenameRecord(field, field.FullName, oldName, newName);
_renameRecordMap.AddRename(field, newName);
field.Name = newName;
}
@ -662,10 +634,10 @@ namespace Obfuz
{
string oldName = method.Name;
string newName = _nameMaker.GetNewName(method, oldName);
Rename(method, refMethodMetas, oldName, newName);
Rename(method, refMethodMetas, newName);
}
private void Rename(MethodDef method, RefMethodMetas refMethodMetas, string oldName, string newName)
private void Rename(MethodDef method, RefMethodMetas refMethodMetas, string newName)
{
ModuleDefMD mod = (ModuleDefMD)method.DeclaringType.Module;
@ -680,7 +652,7 @@ namespace Obfuz
//Debug.Log($"rename assembly:{memberRef.Module.Name} method:{oldMethodFullName} => {memberRef}");
}
}
_renameRecordMap.AddRenameRecord(method, method.FullName, oldName, newName);
_renameRecordMap.AddRename(method, newName);
method.Name = newName;
}
@ -708,20 +680,16 @@ namespace Obfuz
if (_renamePolicy.NeedRename(param))
{
string newName = _nameMaker.GetNewName(param, param.Name);
_renameRecordMap.AddRenameRecord(param, param.Name, newName);
_renameRecordMap.AddRename(param, newName);
param.Name = newName;
}
else
{
_renameRecordMap.AddUnRenameRecord(param);
}
}
private void Rename(EventDef eventDef)
{
string oldName = eventDef.Name;
string newName = _nameMaker.GetNewName(eventDef, eventDef.Name);
_renameRecordMap.AddRenameRecord(eventDef, eventDef.FullName, oldName, newName);
_renameRecordMap.AddRename(eventDef, newName);
eventDef.Name = newName;
}
@ -743,7 +711,7 @@ namespace Obfuz
}
}
}
_renameRecordMap.AddRenameRecord(property, property.FullName, oldName, newName);
_renameRecordMap.AddRename(property, newName);
property.Name = newName;
}

View File

@ -101,7 +101,10 @@ namespace Obfuz
{
var valueOrClassType = type.ToClassOrValueTypeSig();
var typeDef = valueOrClassType.ToTypeDefOrRef().ResolveTypeDefThrow();
result.Append($"[{typeDef.Module.Assembly.Name}]");
if (typeDef.Module.IsCoreLibraryModule != true)
{
result.Append($"[{typeDef.Module.Assembly.Name}]");
}
result.Append(typeDef.FullName);
break;
}