Benutzerdefinierte Attribute
Babel unterstützt die deklarative Verschleierung mit den benutzerdefinierten Attributen System.Reflection.ObfuscationAttribute und System.Reflection.ObfuscateAssemblyAttribute, die .NET Framework und .NET bereitstellen.
Das Attribut ObfuscateAssembly
System.Reflection.ObfuscateAssemblyAttribute ist ein Attribut auf Assemblyebene. Es weist Babel Obfuscator an, die Verschleierungsregeln für private Assemblys anzuwenden.
Eine private Assembly ist eine Assembly, die nicht als Bibliothek dient: Keine andere Softwarekomponente verwendet sie. Babel verschleiert private Assemblys vollständig und benennt dabei alle öffentlichen Symbole um.
[assembly: ObfuscateAssembly(true)]Das boolesche Konstruktorargument assemblyIsPrivate=true teilt Babel mit, dass die Assembly nur innerhalb einer einzigen Anwendung verwendet wird und die öffentliche Schnittstelle gefahrlos umbenannt werden kann.
Das Attribut Obfuscation
Das Attribut System.Reflection.ObfuscationAttribute lässt sich auf Member einer Assembly wie Typen, Methoden, Ereignisse, Eigenschaften und Felder anwenden. Es legt fest, wie eine bestimmte Verschleierungsfunktion mit ihnen verfährt.
Das Attribut Obfuscation hat die folgenden Eigenschaften:
Feature
Die Eigenschaft Feature ordnet einen Zeichenfolgenwert einer bestimmten Funktion des Obfuscators oder einer Liste von Funktionen zu. Der Standardwert der Eigenschaft Feature ist „all“.
Babel verwendet „all“ für die Gesamtheit der verfügbaren Funktionen und „default“ für die Umbenennung.
Weitere Informationen finden Sie in der Tabelle der Funktionen.
Exclude
Gibt an, ob die Verschleierungsfunktion für den zugehörigen Member ausgeschlossen wird.
ApplyToMembers
Legt fest, ob die Aktion, die der Obfuscator für den zugehörigen Typ ausführt, auch auf alle Member dieses Typs angewendet wird.
StripAfterObfuscation
Legt fest, ob das Attribut nach der Verarbeitung entfernt wird.
Das folgende Codebeispiel zeigt, wie ObfuscationAttribute auf eine Methode angewendet wird, um für sie die Codeverschlüsselung einzuschalten:
[Obfuscation(Feature="msil encryption", Exclude=false)]
public string DoSomething()
{Erweiterte Syntax der Eigenschaft Feature
Babel Obfuscator unterstützt für die Zeichenfolgen der Funktionen eine erweiterte Syntax. Mit ihr lassen sich nach dem Namen jeder Funktion deren Eigenschaften als Liste von Schlüssel-Wert-Paaren angeben.
[Obfuscation(Feature="msil encryption:source=opt;cache=true", Exclude=false)]#Mit der erweiterten Syntax lässt sich ObfuscationAttribute auch auf Assemblyebene setzen, um Funktionen für die gesamte Assembly zu konfigurieren:
Umbenennung
[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)]Verschleierungs-Agent
Schaltet den Verschleierungs-Agent für die Aufgaben Serializable types und Reflected enums aus.
[assembly: Obfuscation(Feature="agent:tasknamelist=Serializable types,Reflected enums", Exclude=true)]Wertverschlüsselung
Verschlüsselt Werte und Arrays in Methoden, die zwischen 10 und 100 Anweisungen enthalten.
[assembly: Obfuscation(Feature="value encryption:min instruction count=10; max instruction count=100", Exclude=false)]Das Attribut Obfuscation allein reicht nicht aus, um die gewählte Funktion einzuschalten. Es wirkt nur, wenn die Funktion in der Konfiguration global eingeschaltet ist.
Weitere Beispiele
Verschleiert vom Compiler generierten Code nicht.
[assembly: Obfuscation(Feature="all:compilergenerated=true", Exclude=true)]