提交RenameRecordMap
parent
13b032fde8
commit
225c613763
|
@ -164,5 +164,10 @@ namespace Obfuz
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static bool MayRenameCustomDataType(ElementType type)
|
||||||
|
{
|
||||||
|
return type == ElementType.Class || type == ElementType.ValueType || type == ElementType.Object || type == ElementType.SZArray;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,150 @@
|
||||||
|
using dnlib.DotNet;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace Obfuz
|
||||||
|
{
|
||||||
|
public class RenameRecordMap
|
||||||
|
{
|
||||||
|
private enum RenameStatus
|
||||||
|
{
|
||||||
|
NotRenamed,
|
||||||
|
Renamed,
|
||||||
|
}
|
||||||
|
|
||||||
|
private class RenameRecord
|
||||||
|
{
|
||||||
|
public RenameStatus status;
|
||||||
|
public string oldName;
|
||||||
|
public string newName;
|
||||||
|
}
|
||||||
|
|
||||||
|
private readonly Dictionary<ModuleDefMD, RenameRecord> _modRenames = new Dictionary<ModuleDefMD, RenameRecord>();
|
||||||
|
private readonly Dictionary<TypeDef, RenameRecord> _typeRenames = new Dictionary<TypeDef, RenameRecord>();
|
||||||
|
private readonly Dictionary<MethodDef, RenameRecord> _methodRenames = new Dictionary<MethodDef, RenameRecord>();
|
||||||
|
private readonly Dictionary<FieldDef, RenameRecord> _fieldRenames = new Dictionary<FieldDef, RenameRecord>();
|
||||||
|
private readonly Dictionary<PropertyDef, RenameRecord> _propertyRenames = new Dictionary<PropertyDef, RenameRecord>();
|
||||||
|
private readonly Dictionary<EventDef, RenameRecord> _eventRenames = new Dictionary<EventDef, RenameRecord>();
|
||||||
|
|
||||||
|
|
||||||
|
public void AddRenameRecord(ModuleDefMD mod, string oldName, string newName)
|
||||||
|
{
|
||||||
|
_modRenames.Add(mod, new RenameRecord
|
||||||
|
{
|
||||||
|
status = RenameStatus.Renamed,
|
||||||
|
oldName = oldName,
|
||||||
|
newName = newName
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddRenameRecord(TypeDef type, string oldName, string newName)
|
||||||
|
{
|
||||||
|
_typeRenames.Add(type, new RenameRecord
|
||||||
|
{
|
||||||
|
status = RenameStatus.Renamed,
|
||||||
|
oldName = oldName,
|
||||||
|
newName = newName
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddRenameRecord(MethodDef method, string oldName, string newName)
|
||||||
|
{
|
||||||
|
_methodRenames.Add(method, new RenameRecord
|
||||||
|
{
|
||||||
|
status = RenameStatus.Renamed,
|
||||||
|
oldName = oldName,
|
||||||
|
newName = newName
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddRenameRecord(FieldDef field, string oldName, string newName)
|
||||||
|
{
|
||||||
|
_fieldRenames.Add(field, new RenameRecord
|
||||||
|
{
|
||||||
|
status = RenameStatus.Renamed,
|
||||||
|
oldName = oldName,
|
||||||
|
newName = newName
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddRenameRecord(PropertyDef property, string oldName, string newName)
|
||||||
|
{
|
||||||
|
_propertyRenames.Add(property, new RenameRecord
|
||||||
|
{
|
||||||
|
status = RenameStatus.Renamed,
|
||||||
|
oldName = oldName,
|
||||||
|
newName = newName
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddRenameRecord(EventDef eventDef, string oldName, string newName)
|
||||||
|
{
|
||||||
|
_eventRenames.Add(eventDef, new RenameRecord
|
||||||
|
{
|
||||||
|
status = RenameStatus.Renamed,
|
||||||
|
oldName = oldName,
|
||||||
|
newName = newName
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddUnRenameRecord(ModuleDefMD mod)
|
||||||
|
{
|
||||||
|
_modRenames.Add(mod, new RenameRecord
|
||||||
|
{
|
||||||
|
status = RenameStatus.NotRenamed,
|
||||||
|
oldName = mod.Assembly.Name,
|
||||||
|
newName = null,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddUnRenameRecord(TypeDef typeDef)
|
||||||
|
{
|
||||||
|
_typeRenames.Add(typeDef, new RenameRecord
|
||||||
|
{
|
||||||
|
status = RenameStatus.NotRenamed,
|
||||||
|
oldName = typeDef.FullName,
|
||||||
|
newName = null,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddUnRenameRecord(MethodDef methodDef)
|
||||||
|
{
|
||||||
|
_methodRenames.Add(methodDef, new RenameRecord
|
||||||
|
{
|
||||||
|
status = RenameStatus.NotRenamed,
|
||||||
|
oldName = methodDef.Name,
|
||||||
|
newName = null,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddUnRenameRecord(FieldDef fieldDef)
|
||||||
|
{
|
||||||
|
_fieldRenames.Add(fieldDef, new RenameRecord
|
||||||
|
{
|
||||||
|
status = RenameStatus.NotRenamed,
|
||||||
|
oldName = fieldDef.Name,
|
||||||
|
newName = null,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddUnRenameRecord(PropertyDef propertyDef)
|
||||||
|
{
|
||||||
|
_propertyRenames.Add(propertyDef, new RenameRecord
|
||||||
|
{
|
||||||
|
status = RenameStatus.NotRenamed,
|
||||||
|
oldName = propertyDef.Name,
|
||||||
|
newName = null,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddUnRenameRecord(EventDef eventDef)
|
||||||
|
{
|
||||||
|
_eventRenames.Add(eventDef, new RenameRecord
|
||||||
|
{
|
||||||
|
status = RenameStatus.NotRenamed,
|
||||||
|
oldName = eventDef.Name,
|
||||||
|
newName = null,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -12,6 +12,7 @@ using UnityEngine;
|
||||||
namespace Obfuz
|
namespace Obfuz
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
public class SymbolRename
|
public class SymbolRename
|
||||||
{
|
{
|
||||||
private readonly ObfuscatorContext _ctx;
|
private readonly ObfuscatorContext _ctx;
|
||||||
|
@ -19,7 +20,7 @@ namespace Obfuz
|
||||||
private readonly IRenamePolicy _renamePolicy;
|
private readonly IRenamePolicy _renamePolicy;
|
||||||
private readonly INameMaker _nameMaker;
|
private readonly INameMaker _nameMaker;
|
||||||
private readonly Dictionary<ModuleDef, List<CustomAttributeInfo>> _customAttributeArgumentsWithTypeByMods = new Dictionary<ModuleDef, List<CustomAttributeInfo>>();
|
private readonly Dictionary<ModuleDef, List<CustomAttributeInfo>> _customAttributeArgumentsWithTypeByMods = new Dictionary<ModuleDef, List<CustomAttributeInfo>>();
|
||||||
|
private readonly RenameRecordMap _renameRecordMap = new RenameRecordMap();
|
||||||
|
|
||||||
class CustomAttributeInfo
|
class CustomAttributeInfo
|
||||||
{
|
{
|
||||||
|
@ -36,24 +37,18 @@ namespace Obfuz
|
||||||
BuildCustomAttributeArguments();
|
BuildCustomAttributeArguments();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private bool MayRenameType(ElementType type)
|
|
||||||
{
|
|
||||||
return type == ElementType.Class || type == ElementType.ValueType || type == ElementType.Object || type == ElementType.SZArray;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void CollectCArgumentWithTypeOf(IHasCustomAttribute meta, List<CustomAttributeInfo> customAttributes)
|
private void CollectCArgumentWithTypeOf(IHasCustomAttribute meta, List<CustomAttributeInfo> customAttributes)
|
||||||
{
|
{
|
||||||
int index = 0;
|
int index = 0;
|
||||||
foreach (CustomAttribute ca in meta.CustomAttributes)
|
foreach (CustomAttribute ca in meta.CustomAttributes)
|
||||||
{
|
{
|
||||||
List<CAArgument> arguments = null;
|
List<CAArgument> arguments = null;
|
||||||
if (ca.ConstructorArguments.Any(a => MayRenameType(a.Type.ElementType)))
|
if (ca.ConstructorArguments.Any(a => MetaUtil.MayRenameCustomDataType(a.Type.ElementType)))
|
||||||
{
|
{
|
||||||
arguments = ca.ConstructorArguments.ToList();
|
arguments = ca.ConstructorArguments.ToList();
|
||||||
}
|
}
|
||||||
List<CANamedArgument> namedArguments = null;
|
List<CANamedArgument> namedArguments = null;
|
||||||
if (ca.NamedArguments.Any(a => MayRenameType(a.Type.ElementType)))
|
if (ca.NamedArguments.Any(a => MetaUtil.MayRenameCustomDataType(a.Type.ElementType)))
|
||||||
{
|
{
|
||||||
namedArguments = ca.NamedArguments.ToList();
|
namedArguments = ca.NamedArguments.ToList();
|
||||||
}
|
}
|
||||||
|
@ -117,18 +112,30 @@ namespace Obfuz
|
||||||
{
|
{
|
||||||
Rename(ass.module);
|
Rename(ass.module);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_renameRecordMap.AddUnRenameRecord(ass.module);
|
||||||
|
}
|
||||||
foreach (TypeDef type in ass.module.GetTypes())
|
foreach (TypeDef type in ass.module.GetTypes())
|
||||||
{
|
{
|
||||||
if (!IsSystemReservedType(type) && _renamePolicy.NeedRename(type))
|
if (_renamePolicy.NeedRename(type))
|
||||||
{
|
{
|
||||||
Rename(type);
|
Rename(type);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_renameRecordMap.AddUnRenameRecord(type);
|
||||||
|
}
|
||||||
foreach (FieldDef field in type.Fields)
|
foreach (FieldDef field in type.Fields)
|
||||||
{
|
{
|
||||||
if (_renamePolicy.NeedRename(field))
|
if (_renamePolicy.NeedRename(field))
|
||||||
{
|
{
|
||||||
Rename(field);
|
Rename(field);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_renameRecordMap.AddUnRenameRecord(field);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
foreach (MethodDef method in type.Methods)
|
foreach (MethodDef method in type.Methods)
|
||||||
{
|
{
|
||||||
|
@ -143,6 +150,10 @@ namespace Obfuz
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_renameRecordMap.AddUnRenameRecord(method);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
foreach (EventDef eventDef in type.Events)
|
foreach (EventDef eventDef in type.Events)
|
||||||
{
|
{
|
||||||
|
@ -150,6 +161,10 @@ namespace Obfuz
|
||||||
{
|
{
|
||||||
Rename(eventDef);
|
Rename(eventDef);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_renameRecordMap.AddUnRenameRecord(eventDef);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
foreach (PropertyDef property in type.Properties)
|
foreach (PropertyDef property in type.Properties)
|
||||||
{
|
{
|
||||||
|
@ -157,18 +172,13 @@ namespace Obfuz
|
||||||
{
|
{
|
||||||
Rename(property);
|
Rename(property);
|
||||||
}
|
}
|
||||||
}
|
else
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private bool IsSystemReservedType(TypeDef type)
|
|
||||||
{
|
{
|
||||||
if (type.FullName == "<Module>")
|
_renameRecordMap.AddUnRenameRecord(property);
|
||||||
{
|
}
|
||||||
return true;
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<ObfuzAssemblyInfo> GetReferenceMeAssemblies(ModuleDef mod)
|
private List<ObfuzAssemblyInfo> GetReferenceMeAssemblies(ModuleDef mod)
|
||||||
|
@ -180,6 +190,7 @@ namespace Obfuz
|
||||||
{
|
{
|
||||||
string oldName = MetaUtil.GetModuleNameWithoutExt(mod.Name);
|
string oldName = MetaUtil.GetModuleNameWithoutExt(mod.Name);
|
||||||
string newName = _nameMaker.GetNewName(mod, oldName);
|
string newName = _nameMaker.GetNewName(mod, oldName);
|
||||||
|
_renameRecordMap.AddRenameRecord(mod, oldName, newName);
|
||||||
mod.Name = $"{newName}.dll";
|
mod.Name = $"{newName}.dll";
|
||||||
Debug.Log($"rename module. oldName:{oldName} newName:{newName}");
|
Debug.Log($"rename module. oldName:{oldName} newName:{newName}");
|
||||||
foreach (ObfuzAssemblyInfo ass in GetReferenceMeAssemblies(mod))
|
foreach (ObfuzAssemblyInfo ass in GetReferenceMeAssemblies(mod))
|
||||||
|
@ -243,6 +254,7 @@ namespace Obfuz
|
||||||
}
|
}
|
||||||
type.Name = newName;
|
type.Name = newName;
|
||||||
string newFullName = type.FullName;
|
string newFullName = type.FullName;
|
||||||
|
_renameRecordMap.AddRenameRecord(type, oldFullName, 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}");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -576,7 +588,7 @@ namespace Obfuz
|
||||||
RenameFieldNameInCustomAttributes(ass.module, (ModuleDefMD)field.DeclaringType.Module, field.Name, newName);
|
RenameFieldNameInCustomAttributes(ass.module, (ModuleDefMD)field.DeclaringType.Module, field.Name, newName);
|
||||||
}
|
}
|
||||||
field.Name = newName;
|
field.Name = newName;
|
||||||
|
_renameRecordMap.AddRenameRecord(field, oldName, newName);
|
||||||
|
|
||||||
Debug.Log($"rename field. {field} => {newName}");
|
Debug.Log($"rename field. {field} => {newName}");
|
||||||
}
|
}
|
||||||
|
@ -645,6 +657,7 @@ namespace Obfuz
|
||||||
}
|
}
|
||||||
|
|
||||||
method.Name = newName;
|
method.Name = newName;
|
||||||
|
_renameRecordMap.AddRenameRecord(method, oldName, newName);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void RenameMethodBody(MethodDef method)
|
private void RenameMethodBody(MethodDef method)
|
||||||
|
@ -663,7 +676,10 @@ namespace Obfuz
|
||||||
|
|
||||||
private void Rename(EventDef eventDef)
|
private void Rename(EventDef eventDef)
|
||||||
{
|
{
|
||||||
eventDef.Name = _nameMaker.GetNewName(eventDef, eventDef.Name);
|
string oldName = eventDef.Name;
|
||||||
|
string newName = _nameMaker.GetNewName(eventDef, eventDef.Name);
|
||||||
|
eventDef.Name = newName;
|
||||||
|
_renameRecordMap.AddRenameRecord(eventDef, oldName, newName);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Rename(PropertyDef property)
|
private void Rename(PropertyDef property)
|
||||||
|
@ -676,6 +692,7 @@ namespace Obfuz
|
||||||
{
|
{
|
||||||
RenameFieldNameInCustomAttributes(ass.module, mod, oldName, newName);
|
RenameFieldNameInCustomAttributes(ass.module, mod, oldName, newName);
|
||||||
}
|
}
|
||||||
|
_renameRecordMap.AddRenameRecord(property, oldName, newName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue