SymbolObfus: 不混淆Unity.Behaviour.BlackboardEnum特性标注的枚举类型名及其枚举项名

before-split
walon 2025-05-23 08:31:43 +08:00
parent c1beb962f5
commit e19dbe1dc8
2 changed files with 36 additions and 8 deletions

View File

@ -125,17 +125,35 @@ namespace Obfuz.ObfusPasses.SymbolObfus.Policies
"OnSubmit", "OnSubmit",
"OnCancel", "OnCancel",
}; };
private bool IsUnitySourceGeneratedAssemblyType(TypeDef typeDef)
{
if (typeDef.Name.StartsWith("UnitySourceGeneratedAssemblyMonoScriptTypes_"))
{
return true;
}
if (typeDef.DeclaringType != null)
{
return IsUnitySourceGeneratedAssemblyType(typeDef.DeclaringType);
}
return false;
}
public override bool NeedRename(TypeDef typeDef) public override bool NeedRename(TypeDef typeDef)
{ {
if (MetaUtil.IsScriptOrSerializableType(typeDef)) if (MetaUtil.IsScriptOrSerializableType(typeDef))
{ {
return false; return false;
} }
if (typeDef.FullName.StartsWith("UnitySourceGeneratedAssemblyMonoScriptTypes_")) if (typeDef.Methods.Any(m => MetaUtil.HasRuntimeInitializeOnLoadMethodAttribute(m)))
{ {
return false; return false;
} }
if (typeDef.Methods.Any(m => MetaUtil.HasRuntimeInitializeOnLoadMethodAttribute(m))) if (typeDef.IsEnum && MetaUtil.HasBlackboardEnumAttribute(typeDef))
{
return false;
}
if (IsUnitySourceGeneratedAssemblyType(typeDef))
{ {
return false; return false;
} }
@ -144,7 +162,8 @@ namespace Obfuz.ObfusPasses.SymbolObfus.Policies
public override bool NeedRename(MethodDef methodDef) public override bool NeedRename(MethodDef methodDef)
{ {
if (MetaUtil.IsInheritFromUnityObject(methodDef.DeclaringType)) TypeDef typeDef = methodDef.DeclaringType;
if (MetaUtil.IsInheritFromUnityObject(typeDef))
{ {
return !s_monoBehaviourEvents.Contains(methodDef.Name); return !s_monoBehaviourEvents.Contains(methodDef.Name);
} }
@ -152,7 +171,7 @@ namespace Obfuz.ObfusPasses.SymbolObfus.Policies
{ {
return false; return false;
} }
if (methodDef.DeclaringType.FullName.StartsWith("UnitySourceGeneratedAssemblyMonoScriptTypes_")) if (IsUnitySourceGeneratedAssemblyType(typeDef))
{ {
return false; return false;
} }
@ -166,7 +185,11 @@ namespace Obfuz.ObfusPasses.SymbolObfus.Policies
{ {
return !MetaUtil.IsSerializableField(fieldDef); return !MetaUtil.IsSerializableField(fieldDef);
} }
if (fieldDef.DeclaringType.FullName.StartsWith("UnitySourceGeneratedAssemblyMonoScriptTypes_")) if (typeDef.IsEnum && MetaUtil.HasBlackboardEnumAttribute(typeDef))
{
return false;
}
if (IsUnitySourceGeneratedAssemblyType(typeDef))
{ {
return false; return false;
} }

View File

@ -853,17 +853,22 @@ namespace Obfuz.Utils
public static bool HasCompilerGeneratedAttribute(IHasCustomAttribute obj) public static bool HasCompilerGeneratedAttribute(IHasCustomAttribute obj)
{ {
return obj.CustomAttributes.Any(ca => ca.AttributeType.FullName == "System.Runtime.CompilerServices.CompilerGeneratedAttribute"); return obj.CustomAttributes.Find("System.Runtime.CompilerServices.CompilerGeneratedAttribute") != null;
} }
public static bool HasEncryptFieldAttribute(IHasCustomAttribute obj) public static bool HasEncryptFieldAttribute(IHasCustomAttribute obj)
{ {
return obj.CustomAttributes.Any(ca => ca.AttributeType.FullName == "Obfuz.EncryptFieldAttribute"); return obj.CustomAttributes.Find("Obfuz.EncryptFieldAttribute") != null;
} }
public static bool HasRuntimeInitializeOnLoadMethodAttribute(MethodDef method) public static bool HasRuntimeInitializeOnLoadMethodAttribute(MethodDef method)
{ {
return method.CustomAttributes.Any(ca => ca.AttributeType.FullName == "UnityEngine.RuntimeInitializeOnLoadMethodAttribute"); return method.CustomAttributes.Find("UnityEngine.RuntimeInitializeOnLoadMethodAttribute") != null;
}
public static bool HasBlackboardEnumAttribute(TypeDef typeDef)
{
return typeDef.CustomAttributes.Find("Unity.Behavior.BlackboardEnumAttribute") != null;
} }
} }
} }