符号混淆中method和field名全局唯一,方便还原混淆符号

1.x
walon 2025-06-09 13:25:04 +08:00
parent fea2e65075
commit 75a4e2cdad
1 changed files with 10 additions and 22 deletions

View File

@ -12,6 +12,8 @@ namespace Obfuz.ObfusPasses.SymbolObfus.NameMakers
private readonly object _namespaceScope = new object();
private readonly object _typeNameScope = new object();
private readonly object _methodNameScope = new object();
private readonly object _fieldNameScope = new object();
protected abstract INameScope CreateNameScope();
@ -32,12 +34,12 @@ namespace Obfuz.ObfusPasses.SymbolObfus.NameMakers
public void AddPreservedName(MethodDef methodDef, string name)
{
GetNameScope(methodDef.DeclaringType).AddPreservedName(name);
GetNameScope(_methodNameScope).AddPreservedName(name);
}
public void AddPreservedName(FieldDef fieldDef, string name)
{
GetNameScope(fieldDef.DeclaringType).AddPreservedName(name);
GetNameScope(_fieldNameScope).AddPreservedName(name);
}
public void AddPreservedName(PropertyDef propertyDef, string name)
@ -57,7 +59,8 @@ namespace Obfuz.ObfusPasses.SymbolObfus.NameMakers
public bool IsNamePreserved(VirtualMethodGroup virtualMethodGroup, string name)
{
return virtualMethodGroup.GetNameConflictTypeScopes().Any(m => GetNameScope(m).IsNamePreserved(name));
var scope = GetNameScope(_methodNameScope);
return scope.IsNamePreserved(name);
}
private string GetDefaultNewName(object scope, string originName)
@ -82,28 +85,13 @@ namespace Obfuz.ObfusPasses.SymbolObfus.NameMakers
public string GetNewName(MethodDef methodDef, string originalName)
{
Assert.IsFalse(methodDef.IsVirtual);
return GetDefaultNewName(methodDef.DeclaringType, originalName);
return GetDefaultNewName(_methodNameScope, originalName);
}
public string GetNewName(VirtualMethodGroup virtualMethodGroup, string originalName)
{
var scope = GetNameScope(virtualMethodGroup);
while (true)
{
string newName = scope.GetNewName(originalName, false);
if (virtualMethodGroup.GetNameConflictTypeScopes().Any(s => GetNameScope(s).IsNamePreserved(newName)))
{
continue;
}
else
{
foreach (var s in virtualMethodGroup.GetNameDeclaringTypeScopes())
{
GetNameScope(s).AddPreservedName(newName);
}
return newName;
}
}
var scope = GetNameScope(_methodNameScope);
return scope.GetNewName(originalName, false);
}
public virtual string GetNewName(ParamDef param, string originalName)
@ -113,7 +101,7 @@ namespace Obfuz.ObfusPasses.SymbolObfus.NameMakers
public string GetNewName(FieldDef fieldDef, string originalName)
{
return GetDefaultNewName(fieldDef.DeclaringType, originalName);
return GetDefaultNewName(_fieldNameScope, originalName);
}
public string GetNewName(PropertyDef propertyDef, string originalName)