支持增量混淆,优先从remapping.xml中读取映射
parent
4cb3b88d24
commit
338543c5a0
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue