Atributos personalizados
Babel admite la ofuscación declarativa mediante los atributos personalizados System.Reflection.ObfuscationAttribute y System.Reflection.ObfuscateAssemblyAttribute que proporcionan .NET Framework y .NET.
El atributo ObfuscateAssembly
System.Reflection.ObfuscateAssemblyAttribute es un atributo de nivel de ensamblado que indica a Babel Obfuscator que use las reglas de ofuscación reservadas a los ensamblados privados.
Un ensamblado privado es un ensamblado que no se va a usar como biblioteca: ningún otro componente de software lo utilizará. Babel ofusca por completo los ensamblados privados, lo que supone renombrar todos los símbolos públicos.
[assembly: ObfuscateAssembly(true)]El argumento booleano del constructor assemblyIsPrivate=true indica a Babel que el ensamblado se usa dentro del ámbito de una sola aplicación y que la interfaz pública se puede renombrar sin riesgo.
El atributo Obfuscation
El atributo System.Reflection.ObfuscationAttribute se puede aplicar a miembros del ensamblado, como tipos, métodos, eventos, propiedades y campos, para configurar la acción que se realiza con una función de ofuscación concreta.
El atributo Obfuscation tiene las propiedades siguientes:
Feature
La propiedad Feature asigna un valor de cadena a una función concreta del ofuscador o a una lista de funciones. El valor predeterminado de la propiedad Feature es «all».
Babel usa «all» para referirse al conjunto completo de funciones disponibles y «default» para referirse a la función de renombrado.
Para obtener más información, consulte la tabla de funciones de ofuscación.
Exclude
Indica si la función de ofuscación debe excluirse para el miembro asociado.
ApplyToMembers
Especifica si la acción que realiza el ofuscador sobre el tipo asociado debe aplicarse a todos sus miembros.
StripAfterObfuscation
Especifica si el atributo debe eliminarse después del procesamiento.
El ejemplo de código siguiente muestra cómo usar ObfuscationAttribute en un método para activar el cifrado de código:
[Obfuscation(Feature="msil encryption", Exclude=false)]
public string DoSomething()
{Sintaxis extendida de Feature
Babel Obfuscator admite una sintaxis extendida para las cadenas de función, que permite establecer las propiedades de una función como una lista de pares clave-valor después del nombre de cada función.
[Obfuscation(Feature="msil encryption:source=opt;cache=true", Exclude=false)]#La sintaxis extendida de Feature permite aplicar ObfuscationAttribute en el nivel de ensamblado para configurar las funciones de todo el ensamblado:
Renombrado
[assembly: Obfuscation(Feature="renaming:flatten namespaces=ACME.Test.*", Exclude=false)]
[assembly: Obfuscation(Feature="renaming:flattenNamespaces=ACME.Data.*", Exclude=false)]
[assembly: Obfuscation(Feature="renaming:internalize=true;rename parameters=true", Exclude=false)]
[assembly: Obfuscation(Feature="renaming:overloaded=true;unicode=false", Exclude=false)]
[assembly: Obfuscation(Feature="renaming:name length=5;name prefix=Acme_", Exclude=false)]Agente de ofuscación
Desactivar el agente de ofuscación para las tareas Serializable types y Reflected enums.
[assembly: Obfuscation(Feature="agent:tasknamelist=Serializable types,Reflected enums", Exclude=true)]Cifrado de valores
Cifra los valores y las matrices de los métodos que tienen entre 10 y 100 instrucciones.
[assembly: Obfuscation(Feature="value encryption:min instruction count=10; max instruction count=100", Exclude=false)]El atributo Obfuscation no basta por sí solo para activar la función elegida. El atributo solo surte efecto si la función está activada de forma global en la configuración.
Otros ejemplos
No ofuscar el código generado por el compilador.
[assembly: Obfuscation(Feature="all:compilergenerated=true", Exclude=true)]