支持增量混淆,优先从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 oldName;
public string newName;
public object renameMappingData;
}
private class RenameMappingField
@ -112,13 +113,6 @@ namespace Obfuz
ModuleDefMD mod = ObfuzAssemblyInfo.module;
string name = mod.Assembly.Name;
nameMaker.AddPreservedName(mod, name);
_modRenames.Add(mod, new RenameRecord
{
status = RenameStatus.NotRenamed,
signature = name,
oldName = name,
newName = null,
});
RenameMappingAssembly rma = _assemblies.GetValueOrDefault(name);
if (rma != null && rma.status == RenameStatus.Renamed)
@ -126,6 +120,15 @@ namespace Obfuz
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())
{
nameMaker.AddPreservedName(type, name);
@ -145,6 +148,7 @@ namespace Obfuz
signature = fullTypeName,
oldName = fullTypeName,
newName = null,
renameMappingData = rmt,
});
foreach (MethodDef method in type.Methods)
{
@ -163,6 +167,7 @@ namespace Obfuz
signature = methodSig,
oldName = method.Name,
newName = null,
renameMappingData = rmm,
});
foreach (Parameter param in method.Parameters)
{
@ -193,6 +198,7 @@ namespace Obfuz
signature = fieldSig,
oldName = field.Name,
newName = null,
renameMappingData = rmf,
});
}
foreach (PropertyDef property in type.Properties)
@ -210,6 +216,7 @@ namespace Obfuz
signature = propertySig,
oldName = property.Name,
newName = null,
renameMappingData = rmp,
});
}
foreach (EventDef eventDef in type.Events)
@ -227,6 +234,7 @@ namespace Obfuz
signature = eventSig,
oldName = eventDef.Name,
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)
{
RenameRecord record = _fieldRenames[field];
@ -582,5 +579,84 @@ namespace Obfuz
record.status = RenameStatus.Renamed;
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);
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)
@ -546,7 +546,7 @@ namespace Obfuz
private void Rename(ModuleDefMD mod)
{
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);
mod.Assembly.Name = newName;
mod.Name = $"{newName}.dll";
@ -570,20 +570,22 @@ namespace Obfuz
string moduleName = MetaUtil.GetModuleNameWithoutExt(type.Module.Name);
string oldFullName = type.FullName;
string oldNamespace = type.Namespace;
string oldName = type.Name;
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
{
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)
{
foreach (TypeRef typeRef in refTypeDefMeta.typeRefs)
@ -599,6 +601,7 @@ namespace Obfuz
}
}
type.Name = newName;
type.Namespace = newNamespace;
string newFullName = type.FullName;
_renameRecordMap.AddRename(type, 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)
{
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)
{
foreach (var memberRef in fieldMetas.fieldRefs)
@ -635,13 +638,12 @@ namespace Obfuz
private void Rename(MethodDef method, RefMethodMetas refMethodMetas)
{
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);
}
private void Rename(MethodDef method, RefMethodMetas refMethodMetas, string newName)
{
ModuleDefMD mod = (ModuleDefMD)method.DeclaringType.Module;
RenameMethodParams(method);
RenameMethodBody(method);
@ -690,7 +692,7 @@ namespace Obfuz
private void Rename(EventDef eventDef)
{
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);
eventDef.Name = newName;
}
@ -698,7 +700,7 @@ namespace Obfuz
private void Rename(PropertyDef property, RefPropertyMetas refPropertyMetas)
{
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)
{