支持增量混淆,优先从remapping.xml中读取映射

backup
walon 2025-04-16 18:30:51 +08:00
parent 4cb3b88d24
commit 338543c5a0
2 changed files with 109 additions and 31 deletions

View File

@ -24,6 +24,7 @@ namespace Obfuz
public string signature; public string signature;
public string oldName; public string oldName;
public string newName; public string newName;
public object renameMappingData;
} }
private class RenameMappingField private class RenameMappingField
@ -112,13 +113,6 @@ namespace Obfuz
ModuleDefMD mod = ObfuzAssemblyInfo.module; ModuleDefMD mod = ObfuzAssemblyInfo.module;
string name = mod.Assembly.Name; string name = mod.Assembly.Name;
nameMaker.AddPreservedName(mod, name); nameMaker.AddPreservedName(mod, name);
_modRenames.Add(mod, new RenameRecord
{
status = RenameStatus.NotRenamed,
signature = name,
oldName = name,
newName = null,
});
RenameMappingAssembly rma = _assemblies.GetValueOrDefault(name); RenameMappingAssembly rma = _assemblies.GetValueOrDefault(name);
if (rma != null && rma.status == RenameStatus.Renamed) if (rma != null && rma.status == RenameStatus.Renamed)
@ -126,6 +120,15 @@ namespace Obfuz
nameMaker.AddPreservedName(mod, rma.newAssName); nameMaker.AddPreservedName(mod, rma.newAssName);
} }
_modRenames.Add(mod, new RenameRecord
{
status = RenameStatus.NotRenamed,
signature = name,
oldName = name,
newName = null,
renameMappingData = rma,
});
foreach (TypeDef type in mod.GetTypes()) foreach (TypeDef type in mod.GetTypes())
{ {
nameMaker.AddPreservedName(type, name); nameMaker.AddPreservedName(type, name);
@ -145,6 +148,7 @@ namespace Obfuz
signature = fullTypeName, signature = fullTypeName,
oldName = fullTypeName, oldName = fullTypeName,
newName = null, newName = null,
renameMappingData = rmt,
}); });
foreach (MethodDef method in type.Methods) foreach (MethodDef method in type.Methods)
{ {
@ -163,6 +167,7 @@ namespace Obfuz
signature = methodSig, signature = methodSig,
oldName = method.Name, oldName = method.Name,
newName = null, newName = null,
renameMappingData = rmm,
}); });
foreach (Parameter param in method.Parameters) foreach (Parameter param in method.Parameters)
{ {
@ -193,6 +198,7 @@ namespace Obfuz
signature = fieldSig, signature = fieldSig,
oldName = field.Name, oldName = field.Name,
newName = null, newName = null,
renameMappingData = rmf,
}); });
} }
foreach (PropertyDef property in type.Properties) foreach (PropertyDef property in type.Properties)
@ -210,6 +216,7 @@ namespace Obfuz
signature = propertySig, signature = propertySig,
oldName = property.Name, oldName = property.Name,
newName = null, newName = null,
renameMappingData = rmp,
}); });
} }
foreach (EventDef eventDef in type.Events) foreach (EventDef eventDef in type.Events)
@ -227,6 +234,7 @@ namespace Obfuz
signature = eventSig, signature = eventSig,
oldName = eventDef.Name, oldName = eventDef.Name,
newName = null, newName = null,
renameMappingData = rme,
}); });
} }
} }
@ -551,17 +559,6 @@ namespace Obfuz
}); });
} }
public bool TryGetRename(VirtualMethodGroup group, out string newName)
{
if (_virtualMethodGroups.TryGetValue(group, out var record))
{
newName = record.newName;
return true;
}
newName = null;
return false;
}
public void AddRename(FieldDef field, string newName) public void AddRename(FieldDef field, string newName)
{ {
RenameRecord record = _fieldRenames[field]; RenameRecord record = _fieldRenames[field];
@ -582,5 +579,84 @@ namespace Obfuz
record.status = RenameStatus.Renamed; record.status = RenameStatus.Renamed;
record.newName = newName; record.newName = newName;
} }
public bool TryGetExistRenameMapping(ModuleDefMD mod, out string newName)
{
if (_modRenames.TryGetValue(mod, out var record) && record.renameMappingData != null)
{
newName = ((RenameMappingAssembly)record.renameMappingData).newAssName;
return true;
}
newName = null;
return false;
}
public bool TryGetExistRenameMapping(TypeDef type, out string newNamespace, out string newName)
{
if (_typeRenames.TryGetValue(type, out var record) && record.renameMappingData != null)
{
var rmt = (RenameMappingType)record.renameMappingData;
(newNamespace, newName) = MetaUtil.SplitNamespaceAndName(rmt.newFullName);
return true;
}
newNamespace = null;
newName = null;
return false;
}
public bool TryGetExistRenameMapping(MethodDef method, out string newName)
{
if (_methodRenames.TryGetValue(method, out var record) && record.renameMappingData != null)
{
newName = ((RenameMappingMethod)record.renameMappingData).newName;
return true;
}
newName = null;
return false;
}
public bool TryGetExistRenameMapping(FieldDef field, out string newName)
{
if (_fieldRenames.TryGetValue(field, out var record) && record.renameMappingData != null)
{
newName = ((RenameMappingField)record.renameMappingData).newName;
return true;
}
newName = null;
return false;
}
public bool TryGetExistRenameMapping(PropertyDef property, out string newName)
{
if (_propertyRenames.TryGetValue(property, out var record) && record.renameMappingData != null)
{
newName = ((RenameMappingProperty)record.renameMappingData).newName;
return true;
}
newName = null;
return false;
}
public bool TryGetExistRenameMapping(EventDef eventDef, out string newName)
{
if (_eventRenames.TryGetValue(eventDef, out var record) && record.renameMappingData != null)
{
newName = ((RenameMappingEvent)record.renameMappingData).newName;
return true;
}
newName = null;
return false;
}
public bool TryGetRename(VirtualMethodGroup group, out string newName)
{
if (_virtualMethodGroups.TryGetValue(group, out var record))
{
newName = record.newName;
return true;
}
newName = null;
return false;
}
} }
} }

View File

@ -434,7 +434,7 @@ namespace Obfuz
groupNeedRenames.Add(group, needRename); groupNeedRenames.Add(group, needRename);
if (needRename) if (needRename)
{ {
_renameRecordMap.InitAndAddRename(group, _nameMaker.GetNewName(method, method.Name)); _renameRecordMap.InitAndAddRename(group, _renameRecordMap.TryGetExistRenameMapping(method, out var nn) ? nn : _nameMaker.GetNewName(method, method.Name));
} }
} }
if (!needRename) if (!needRename)
@ -546,7 +546,7 @@ namespace Obfuz
private void Rename(ModuleDefMD mod) private void Rename(ModuleDefMD mod)
{ {
string oldName = mod.Assembly.Name; string oldName = mod.Assembly.Name;
string newName = _nameMaker.GetNewName(mod, oldName); string newName = _renameRecordMap.TryGetExistRenameMapping(mod, out var n) ? n : _nameMaker.GetNewName(mod, oldName);
_renameRecordMap.AddRename(mod, newName); _renameRecordMap.AddRename(mod, newName);
mod.Assembly.Name = newName; mod.Assembly.Name = newName;
mod.Name = $"{newName}.dll"; mod.Name = $"{newName}.dll";
@ -570,20 +570,22 @@ namespace Obfuz
string moduleName = MetaUtil.GetModuleNameWithoutExt(type.Module.Name); string moduleName = MetaUtil.GetModuleNameWithoutExt(type.Module.Name);
string oldFullName = type.FullName; string oldFullName = type.FullName;
string oldNamespace = type.Namespace; string oldNamespace = type.Namespace;
string oldName = type.Name;
string newNamespace; string newNamespace;
if (string.IsNullOrEmpty(oldNamespace)) string newName;
if (_renameRecordMap.TryGetExistRenameMapping(type, out var nns, out var nn))
{ {
newNamespace = oldNamespace; newNamespace = nns;
newName = nn;
} }
else else
{ {
newNamespace = _nameMaker.GetNewNamespace(type, oldNamespace, true); newNamespace = _nameMaker.GetNewNamespace(type, oldNamespace, true);
type.Namespace = newNamespace; newName = _nameMaker.GetNewName(type, oldName);
} }
string oldName = type.Name;
string newName = _nameMaker.GetNewName(type, oldName);
if (refTypeDefMeta != null) if (refTypeDefMeta != null)
{ {
foreach (TypeRef typeRef in refTypeDefMeta.typeRefs) foreach (TypeRef typeRef in refTypeDefMeta.typeRefs)
@ -599,6 +601,7 @@ namespace Obfuz
} }
} }
type.Name = newName; type.Name = newName;
type.Namespace = newNamespace;
string newFullName = type.FullName; string newFullName = type.FullName;
_renameRecordMap.AddRename(type, newFullName); _renameRecordMap.AddRename(type, newFullName);
//Debug.Log($"rename typedef. assembly:{type.Module.Name} oldName:{oldFullName} => newName:{newFullName}"); //Debug.Log($"rename typedef. assembly:{type.Module.Name} oldName:{oldFullName} => newName:{newFullName}");
@ -607,7 +610,7 @@ namespace Obfuz
private void Rename(FieldDef field, RefFieldMetas fieldMetas) private void Rename(FieldDef field, RefFieldMetas fieldMetas)
{ {
string oldName = field.Name; string oldName = field.Name;
string newName = _nameMaker.GetNewName(field, oldName); string newName = _renameRecordMap.TryGetExistRenameMapping(field, out var nn) ? nn : _nameMaker.GetNewName(field, oldName);
if (fieldMetas != null) if (fieldMetas != null)
{ {
foreach (var memberRef in fieldMetas.fieldRefs) foreach (var memberRef in fieldMetas.fieldRefs)
@ -635,13 +638,12 @@ namespace Obfuz
private void Rename(MethodDef method, RefMethodMetas refMethodMetas) private void Rename(MethodDef method, RefMethodMetas refMethodMetas)
{ {
string oldName = method.Name; string oldName = method.Name;
string newName = _nameMaker.GetNewName(method, oldName); string newName = _renameRecordMap.TryGetExistRenameMapping(method, out var nn) ? nn : _nameMaker.GetNewName(method, oldName);
Rename(method, refMethodMetas, newName); Rename(method, refMethodMetas, newName);
} }
private void Rename(MethodDef method, RefMethodMetas refMethodMetas, string newName) private void Rename(MethodDef method, RefMethodMetas refMethodMetas, string newName)
{ {
ModuleDefMD mod = (ModuleDefMD)method.DeclaringType.Module; ModuleDefMD mod = (ModuleDefMD)method.DeclaringType.Module;
RenameMethodParams(method); RenameMethodParams(method);
RenameMethodBody(method); RenameMethodBody(method);
@ -690,7 +692,7 @@ namespace Obfuz
private void Rename(EventDef eventDef) private void Rename(EventDef eventDef)
{ {
string oldName = eventDef.Name; string oldName = eventDef.Name;
string newName = _nameMaker.GetNewName(eventDef, eventDef.Name); string newName = _renameRecordMap.TryGetExistRenameMapping(eventDef, out var nn) ? nn : _nameMaker.GetNewName(eventDef, eventDef.Name);
_renameRecordMap.AddRename(eventDef, newName); _renameRecordMap.AddRename(eventDef, newName);
eventDef.Name = newName; eventDef.Name = newName;
} }
@ -698,7 +700,7 @@ namespace Obfuz
private void Rename(PropertyDef property, RefPropertyMetas refPropertyMetas) private void Rename(PropertyDef property, RefPropertyMetas refPropertyMetas)
{ {
string oldName = property.Name; string oldName = property.Name;
string newName = _nameMaker.GetNewName(property, oldName); string newName = _renameRecordMap.TryGetExistRenameMapping(property, out var nn) ? nn : _nameMaker.GetNewName(property, oldName);
if (refPropertyMetas != null) if (refPropertyMetas != null)
{ {