Skip to Content
Neue Version 12 verfügbar 🎉

XML-Regeln

Zusätzlich zu den Optionen der Befehlszeile oder der MSBuild-Aufgabe Babel lässt sich Babel Obfuscator über Regeln steuern und konfigurieren, die in externen XML-Dateien definiert sind. Diese XML-Regeln erlauben eine feine Steuerung der Verschleierung und können für bestimmte Assemblys, Typen, Methoden und andere Codeelemente gelten.

Regeldateien

Die Regeldateien von Babel sind XML-Dokumente mit Konfigurationsangaben, die die Verschleierung anpassen und steuern. In diesen Dateien legen Sie genau fest, welche Verschleierungsfunktionen auf welche Teile Ihres Codes angewendet werden, und steuern so den Schutz Ihrer Assemblys im Detail.

XML
<Rules xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <Rule name="rule 1" feature="default" exclude="false"> </Rule> <Rule name="rule 2" feature="control flow" exclude="true"> </Rule> </Rules>

Das Element Rules kann ein Attribut targetAssembly definieren, das den Geltungsbereich der enthaltenen Regeln auf eine bestimmte Assembly beschränkt. Fehlt das Attribut targetAssembly, gelten die Regeln für alle verarbeiteten Assemblys. Beispiel:

XML
<Rules xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" targetAssembly="ACME.Data">

In der XML-Regeldatei werden die Regeln der Reihe nach von oben nach unten verarbeitet, in der Reihenfolge, in der sie stehen. Dadurch können Sie vorhandene Regeln durch spezifischere Regeln außer Kraft setzen, die weiter unten stehen, und erhalten eine flexible, hierarchische Regelstruktur.

Das Element Rules

Das Element Rules ist der Wurzelcontainer, der einen Satz von Regeln für die Ziel-Assembly definiert. Es kann mehrere Kindelemente Rule enthalten, die jeweils ein anderes Verschleierungsverhalten festlegen.

AttributBeschreibung
targetAssemblyGibt den vollqualifizierten Namen der Assembly an, auf die die Regeln angewendet werden. Fehlt die Angabe, gelten die Regeln für alle Assemblys, die an der Verschleierung beteiligt sind.

Das Element Rule

Das Element Rule definiert eine Babel-Verschleierungsregel, die für eine oder mehrere Funktionen von Babel Obfuscator gelten kann. Jede Regel legt fest, welche Codeelemente betroffen sind und wie die Verschleierungsfunktionen auf sie angewendet werden.

AttributBeschreibung
nameEin sprechender, beschreibender Name der Regel, an dem ihr Zweck erkennbar ist
featureDer Name der Funktion des Obfuscators, für die die Regel gilt, oder eine durch Kommas getrennte Liste solcher Namen. Mit mehreren Funktionen gilt dieselbe Regel für verschiedene Aspekte der Verschleierung
excludeBoolescher Wert, der angibt, ob die Regel die Ausführung der angegebenen Funktion(en) verhindert. Mit „true“ werden Symbole von der Verschleierung ausgeschlossen, mit „false“ ausdrücklich eingeschlossen
applyToMembersBoolescher Wert, der angibt, ob die Regel auf alle Member eines Symbols angewendet wird, das den Kriterien der Regel entspricht. Ist er gesetzt, gilt die Regel auch für geschachtelte Member
lockedBoolescher Wert, der angibt, ob die Regel unveränderlich ist und von nachfolgenden Regeln in der Verarbeitungsreihenfolge nicht außer Kraft gesetzt werden kann

Das Attribut feature legt die Funktion des Obfuscators fest, auf die die Regel wirkt. Die Attribute name und exclude sind Pflicht, das Attribut feature ist optional. Fehlt es, gilt der Wert „default“, der für die Umbenennung steht.

Die Funktionen des Obfuscators sind vordefinierte Zeichenfolgen, die für bestimmte Fähigkeiten der Verschleierung stehen. Die folgenden Tabellen führen alle unterstützten Funktionsnamen auf.

Tabelle der Funktionen

Die folgenden Funktionen können für alle Arten von Symbolen gelten, die in einer Assembly definiert sind, also für Typen, Methoden, Eigenschaften, Felder und Ereignisse:

FunktionBeschreibung
allGilt für alle verfügbaren Verschleierungsfunktionen
defaultDie Standardfunktion steht für die Verschleierung durch Umbenennung von Symbolen
agentGilt für den Verschleierungs-Agent
cleanup attributesEntfernt unerwünschte Attribute aus den Metadaten der Assembly
control flowWendet die Kontrollflussverschleierung an, damit die Logik des Codes schwerer zu verstehen ist
dead codeSchaltet die Optimierung ein, die ungenutzten Code entfernt
dynamic proxyErsetzt direkte Methodenaufrufe durch dynamische Proxy-Aufrufe
embedBettet abhängige Assemblys in die Ziel-Assembly ein
mergeFührt mehrere Assemblys zu einer einzigen Assembly zusammen
msil encryptionVerschlüsselt Methodenrümpfe mit der Verschlüsselung von MSIL-Code (Microsoft Intermediate Language)
renamingVerschleiert die Namen der Member (Typen, Methoden, Eigenschaften, Felder, Ereignisse)
renaming blobBenennt Zeichenfolgenliterale um, die umbenannten Symbolen entsprechen, damit der Code funktionsfähig bleibt
resource encryptionVerschlüsselt die in die Assembly eingebetteten Ressourcen
string encryptionVerschlüsselt die Zeichenfolgenliterale im Code
value encryptionVerschlüsselt konstante Inline-Werte und Arrayinitialisierungen
inlineErweitert Methodenaufrufe inline, damit die Struktur des Codes weniger erkennbar ist
instrumentationSchaltet die Instrumentierung des Codes für Überwachung und Analyse ein
optimizationsWendet verschiedene Metadaten- und Codeoptimierungen an
xamlBehandelt die Umbenennung von Symbolen, die in XAML- oder BAML-Ressourcen referenziert werden

Die folgenden Verschleierungsfunktionen sind methodenspezifisch und lassen sich nur auf Methoden anwenden:

FunktionBeschreibung
msil encryption get streamDeklariert die Methode, die den Quelldatenstrom des verschlüsselten Codes für die MSIL-Entschlüsselung liefert
string encryption encrypt methodLegt die benutzerdefinierte Methode fest, die Zeichenfolgenliterale verschlüsselt
string encryption decrypt methodLegt die benutzerdefinierte Methode fest, die Zeichenfolgenliterale zur Laufzeit entschlüsselt
instrumentation on entry methodLegt die Methode fest, die beim Eintritt in eine instrumentierte Methode aufgerufen wird
instrumentation on exit methodLegt die Methode fest, die beim Verlassen einer instrumentierten Methode aufgerufen wird
instrumentation on exception methodLegt die Methode fest, die aufgerufen wird, wenn in einer instrumentierten Methode eine Ausnahme auftritt
module initializerBestimmt eine Methode, die automatisch ausgeführt wird, wenn die Laufzeit das Modul initialisiert

Jedes Element Rule kann Kindelemente wie Access, Target, Pattern, HasAttribute, Properties und Description enthalten. Das Element Pattern ist Pflicht, alle anderen sind optional. Mit diesen Kindelementen lässt sich die Regel weiter filtern und konfigurieren. Beispiel:

<Rule name="DataWriter" feature="msil encryption" exclude="false"> <Target>Methods</Target> <Pattern>SQLUtils.DataWriter::*</Pattern> <Properties> <Cache>true</Cache> <MinInstructionCount>6</MinInstructionCount> </Properties> <Description>Encrypt all methods of the DataWriter class.</Description> </Rule>

Die folgende Liste enthält alle möglichen Kindelemente von Rule:

Element
Access
Targets
Pattern
HasAttribute
HasBase
Implements
Namespace
Properties
Description

Das Element Access

Beschränkt den Geltungsbereich der Regel auf Symbole mit der angegebenen Sichtbarkeit. Mögliche Werte sind All oder eine beliebige Kombination von Public, Protected, Internal, Private, FamilyAndAssembly und FamilyOrAssembly. Fehlt das Element, gilt der Standardwert All: Die Regel gilt dann für Symbole jeder Sichtbarkeit.

AccessBeschreibung
PublicZugriff von jedem Typ in jeder Assembly.
ProtectedZugriff innerhalb desselben Typs wie der Member und von allen abgeleiteten Typen, die von ihm erben (auch Family-Zugriff genannt).
InternalZugriff nur innerhalb der Assembly, in der der Typ definiert ist (auch Assembly-Zugriff genannt).
PrivateZugriff nur innerhalb desselben Typs wie der Member oder von einem Typ, der in diesem Typ geschachtelt ist.
FamilyOrAssemblyZugriff von Typen, für die Family-Zugriff oder Assembly-Zugriff gilt (in C# protected internal).
FamilyAndAssemblyZugriff nur von Typen, für die sowohl Family-Zugriff als auch Assembly-Zugriff gilt (in C# private protected).

Das Element Targets

Beschränkt den Geltungsbereich der Regel auf bestimmte Arten von Codesymbolen. Zulässige Werte sind All oder eine beliebige Kombination von Classes, Delegates, Structures, Interfaces, Enums, Events, Methods, Properties, Fields, StaticFields und Resources. Fehlt das Element, wird der Standardwert All angenommen, und die Regel gilt für alle Arten von Symbolen.

Das Element Pattern

Das Element Pattern in der Definition einer XML-Regel von Babel Obfuscator bestimmt, welche Symbole der Assembly die Regel erfasst und welche damit der Verschleierung unterliegen. Es nimmt einen vollqualifizierten Symbolnamen, einen Ausdruck mit Platzhaltern oder einen regulären Ausdruck an und bildet damit einen vielseitigen, anpassungsfähigen Filter für bestimmte Codeelemente.

Ausdrücke mit Platzhaltern: Für einfachere Auswahlkriterien kann das Element Pattern Platzhalterzeichen enthalten. Das Zeichen „?“ steht für ein beliebiges einzelnes Zeichen, „*“ für null oder mehr Zeichen. So lassen sich breite und dennoch kontrollierte Auswahlkriterien formulieren und Gruppen zusammengehöriger Symbole erfassen, ohne komplexe Muster zu schreiben.

Reguläre Ausdrücke: Für komplexere und genauere Filter können im Element Pattern reguläre Ausdrücke verwendet werden. Dazu muss das Attribut isRegEx den Wert „true“ haben. Es gibt an, dass das Muster als regulärer Ausdruck und nicht als wörtliche Zeichenfolge oder Platzhaltermuster zu lesen ist. Es empfiehlt sich, den regulären Ausdruck in einen CDATA-Abschnitt zu setzen, damit das XML korrekt geparst wird und Sonderzeichen richtig interpretiert werden. Zum Beispiel:

<Pattern isRegEx="true"><![CDATA[^Properties.*]]></Pattern>

Format des vollqualifizierten Namens

Das Format eines vollqualifizierten Symbolnamens im Muster einer XML-Regel von Babel Obfuscator hängt von der Art des Symbols ab. Diese Unterscheidung sorgt für eine genaue und wirksame Verschleierung über alle Arten von Symbolen hinweg und hält die Schreibweise klar und einheitlich.

Typen (Klassen, Strukturen, Enumerationen, Schnittstellen): Das übliche Format ist NamespaceName.TypeName, eine einfache Schreibweise für gewöhnliche Typdeklarationen.

Geschachtelte Typen: Für geschachtelte Typen (Typen, die in anderen Typen definiert sind) verwendet das Format einen Schrägstrich als Trennzeichen: NamespaceName.TypeName/NestedTypeName. Diese Schreibweise unterscheidet geschachtelte Typen klar von ihren umschließenden Typen und bildet die Hierarchie ab.

Generische Typen: Die Schreibweise für generische Typen beginnt mit NamespaceName.TypeName, gefolgt von den generischen Typargumenten in spitzen Klammern:

NamespaceName.TypeName<GenericArgumentList>

GenericArgumentList: Dieses Element ist kein eigenständiges Muster, sondern fester Bestandteil des Musters für generische Typen. Es ist die durch Kommas getrennte Liste der generischen Typargumente, jedes mit vollständigem Namespace und Typnamen angegeben:

NamespaceName.TypeName1,NamespaceName.TypeName2,...,NamespaceName.TypeNameN

Methoden: Das übliche Format für Methoden enthält den Namespace, den Typnamen, den Methodennamen, die Parameterliste und optional den Rückgabetyp:

NamespaceName.TypeName::MethodName(ParameterList):ReturnType

Die Angabe von ReturnType im Muster ist optional und kann in den meisten Fällen entfallen.

Eigenschaften: Das Format für Eigenschaften hat diesen Aufbau:

NamespaceName.TypeName::PropertyName:PropertyType

Der Typ der Eigenschaft muss im Muster in der Regel nicht angegeben werden und kann entfallen.

Ereignisse: Das Format für Ereignisse lautet:

NamespaceName.TypeName::EventName:EventHandlerType

Dieses Format umfasst den Namen des Ereignisses und den Typ des zugehörigen Handlers.

Felder: Felder folgen diesem Format:

NamespaceName.TypeName::FieldName:FieldType

Wie bei Eigenschaften ist der Typ des Feldes in der Regel optional und in den meisten Mustern nicht erforderlich.

ParameterList: Dieser Bestandteil gehört ausschließlich zum Muster für Methoden. Er führt die vollqualifizierten Typnamen der Parameter auf, durch Kommas getrennt:

NamespaceName.TypeName1,NamespaceName.TypeName2,...,NamespaceName.TypeNameN

Mit diesen Mustern legen Sie genau fest, welche Teile des Codes Babel Obfuscator verschleiern soll. Die genaue Syntax kann je nach Kontext und nach den Anforderungen Ihrer Verschleierungsstrategie leicht abweichen. Genaue Muster stellen sicher, dass die Verschleierungsregeln nur die beabsichtigten Symbole betreffen.

Das Element HasAttribute

Gibt eine durch Kommas getrennte Liste vollqualifizierter Typnamen benutzerdefinierter Attribute an. Trägt das Symbol mindestens eines dieser Attribute, wird die Regel auf dieses Symbol angewendet. Mit diesem Element filtern Sie nach Attributen und grenzen die Regel genau ein.

Das Element unterstützt das optionale Attribut onEnclosingType. Hat es den Wert „true“, wird das benutzerdefinierte Attribut nicht am Symbol selbst geprüft, sondern an dem Typ, der das Symbol umschließt:

<HasAttribute onEnclosingType="true">System.SerializableAttribute</HasAttribute>

Diese Konfiguration erfasst Symbole wie Methoden, Eigenschaften, Felder und Ereignisse, die zu einem Typ mit dem Attribut SerializableAttribute gehören.

Das Element HasBase

Gibt eine durch Kommas getrennte Liste vollqualifizierter Namen von Basistypen an. Die Regel erfasst einen Typ, wenn er von einem der angegebenen Basistypen abgeleitet ist. Mit diesem Element filtern Sie nach der Vererbung.

Das Element unterstützt das optionale Attribut onEnclosingType. Hat es den Wert „true“, sucht Babel in der Hierarchie des Typs, der die Symbole umschließt. So lassen sich Regeln nach der Vererbungsstruktur der umschließenden Typen anwenden.

Das Element Namespace

Beschränkt die Regel auf Symbole in einem angegebenen Namespace. Damit filtern Sie auf der Ebene der Namespaces.

<Namespace>ACME.Data</Namespace>

Die Regel wird auf alle Symbole angewendet, die im Namespace ACME.Data und seinen untergeordneten Namespaces definiert sind.

Das Element Properties

Das Element Properties enthält eine Reihe von XML-Kindelementen, die das Verhalten der Funktion anpassen, für die die Regel gilt. Jede Verschleierungsfunktion unterstützt eigene Eigenschaften, die ihre Arbeitsweise steuern und fein abstimmen, wie sie die erfassten Symbole verarbeitet.

<Rule name="DataWriter" feature="msil encryption" exclude="false"> <Target>Methods</Target> <Pattern>ACME.Data.DataWriter::*</Pattern> <Properties> <Cache>true</Cache> <MinInstructionCount>6</MinInstructionCount> </Properties> <Description>Encrypts code in the DataWriter class.</Description> </Rule>

Diese Regel konfiguriert die Funktion msil encryption, indem sie die Eigenschaften Cache und MinInstructionCount für alle Methoden der Klasse DataWriter setzt.

Die folgende Übersicht führt alle Eigenschaftselemente auf, die die einzelnen Verschleierungsfunktionen unterstützen:

agent

EigenschaftTypBeschreibung
TaskNameListZeichenfolgeEine durch Kommas getrennte Liste der Namen der Agent-Aufgaben, für die die Regel gilt.

cleanup attributes

EigenschaftTypBeschreibung
AttributesZeichenfolgeEine durch Kommas getrennte Liste qualifizierter Typnamen von Attributen oder regulärer Ausdrücke, die auf die in die Suche einzubeziehenden Member passen.
IncludeMembersZeichenfolgeEine durch Kommas getrennte Liste qualifizierter Symbolnamen oder regulärer Ausdrücke, die auf die in die Suche einzubeziehenden Member passen.
ExcludeMembersZeichenfolgeEine durch Kommas getrennte Liste qualifizierter Symbolnamen oder regulärer Ausdrücke, die auf die von der Suche auszuschließenden Member passen.

control flow

EigenschaftTypBeschreibung
ILIterationsGanzzahlGibt die Anzahl der Iterationen der Kontrollflussverschleierung an. Höhere Werte erzeugen komplexere Codestrukturen.
EmitInvalidOpcodesBoolescher WertWenn eingeschaltet, werden ungültige Opcodes in den Ablauf der Methode eingefügt, um Disassembler und Decompiler zu verwirren.
ChangeIfStatementBoolescher WertWenn eingeschaltet, werden bedingte if-Anweisungen transformiert und verschleiert, damit die Logik schwerer nachzuvollziehen ist.
AddSwitchStatementBoolescher WertWenn eingeschaltet, wird der Kontrollfluss angereichert: In den Ablauf der Methode werden switch-Anweisungen eingefügt, sodass komplexere Ausführungspfade entstehen.
ScrambleControlFlowBoolescher WertWenn eingeschaltet, entsteht „Spaghetticode“: Eingefügte irrelevante Verzweigungen und Sprunganweisungen verdecken den ursprünglichen Kontrollfluss erheblich.
MaxSwitchTargetsGanzzahlLegt die maximale Anzahl der case-Ziele fest, die bei der Kontrollflussverschleierung mit switch zulässig sind, und steuert so die Komplexität der erzeugten switch-Anweisungen.
HideCaseConstantExpressionsBoolescher WertWenn eingeschaltet, werden die berechneten Konstantenwerte bei der Kontrollflussverschleierung mit switch verborgen: An die Stelle von Literalwerten treten berechnete Ausdrücke.
RandomCallBoolescher WertWenn eingeschaltet, werden zufällige Methodenaufrufe eingefügt, um die Analyse weiter zu erschweren (nur verfügbar, wenn die Kontrollflussverschleierung mit switch eingeschaltet ist).
AddMethodToken (*)Boolescher WertWenn eingeschaltet, wird der Kontrollfluss angereichert: In den Ablauf der Methode werden Anweisungen zum Laden von Token eingefügt, was die Komplexität weiter erhöht.
StackUnderflow (*)Boolescher WertWenn eingeschaltet, werden Anweisungen eingefügt, die einen Unterlauf des Auswertungsstapels herbeiführen. Das erschwert die statische Analyse.

(*) Diese Optionen erzeugen nicht verifizierbaren IL-Code. Schalten Sie sie nicht ein, wenn Ihre Assembly in einer teilweise vertrauenswürdigen Umgebung laufen oder die Prüfung durch PEVerify bestehen muss.

renaming

EigenschaftTypBeschreibung
DisableOverloadingBoolescher WertWenn eingeschaltet, wird die überladene Umbenennung ausgeschaltet: Methoden mit unterschiedlichen Signaturen erhalten dann unterschiedliche verschleierte Namen, statt denselben Namen zu teilen.
DisableUnicodeBoolescher WertWenn eingeschaltet, werden in verschleierten Namen keine Unicode-Zeichen verwendet. Die Namen bestehen dann nur aus ASCII-Zeichen.
InternalizeBoolescher WertWenn eingeschaltet, wird die Sichtbarkeit aller öffentlichen Typen, die die Regel erfasst, von public auf internal geändert. Das verkleinert die API-Oberfläche der Assembly.
NameLengthGanzzahlGibt die gewünschte Namenslänge umbenannter Symbole an. Damit steuern Sie, wie lang oder kurz verschleierte Bezeichner sind.
NamePrefixZeichenfolgeLegt ein Namenspräfix fest, das allen umbenannten Symbolen vorangestellt wird. So lassen sich verschleierte Namen erkennen oder einordnen.

string encryption

EigenschaftTypBeschreibung
MinInstructionCountGanzzahlLegt fest, wie viele Anweisungen eine Methode mindestens enthalten muss, damit die Regel angewendet wird. Methoden mit weniger Anweisungen werden ausgeschlossen.
MaxInstructionCountGanzzahlLegt fest, wie viele Anweisungen eine Methode höchstens enthalten darf, damit die Regel angewendet wird. Methoden mit mehr Anweisungen werden ausgeschlossen.

merge

EigenschaftTypBeschreibung
CopyAttributesZeichenfolgeEine durch Kommas getrennte Liste vollqualifizierter Typnamen benutzerdefinierter Attribute oder regulärer Ausdrücke. Sie filtert, welche Attribute bei der Zusammenführung aus der Quell-Assembly in die Ziel-Assembly kopiert werden.
NoCopyAttributesZeichenfolgeEine durch Kommas getrennte Liste vollqualifizierter Typnamen benutzerdefinierter Attribute oder regulärer Ausdrücke. Sie filtert, welche Attribute bei der Zusammenführung NICHT in die Ziel-Assembly kopiert werden.
InternalizeBoolescher WertWenn eingeschaltet, wird die Sichtbarkeit aller zusammengeführten Typen, die die Regel erfasst, von public auf internal geändert. Externe Assemblys sehen sie dann nicht mehr.
MergeActionDefault/Discard/RedirectLegt fest, wie der ausgewählte Typ bei der Zusammenführung behandelt wird. Default führt ihn normal zusammen, Discard schließt ihn von der Zusammenführung aus, und Redirect leitet Referenzen auf einen anderen Typ in der Ziel-Assembly um (angegeben in der Eigenschaft RedirectTo).
RedirectToZeichenfolgeEnthält den vollqualifizierten Namen des Typs in der Ziel-Assembly, der den Quelltyp ersetzt, wenn die Aktion Redirect angegeben ist.

msil encryption

EigenschaftTypBeschreibung
CacheBoolescher WertWenn eingeschaltet, wird die entschlüsselte Methode im Arbeitsspeicher zwischengespeichert, sodass die JIT-Kompilierung nur beim ersten Zugriff stattfindet. Das verbessert die Leistung bei späteren Zugriffen.
InternalBoolescher WertWenn eingeschaltet, wird der MSIL-verschlüsselte Code in der Ziel-Assembly selbst gespeichert, wenn ausgeschaltet, in einer externen Datei.
PasswordZeichenfolgeGibt das Passwort an, mit dem der Code der Methode verschlüsselt wird. Das fügt eine weitere Schutzebene hinzu.
SourceZeichenfolgeLegt einen Quellennamen für den verschlüsselten Code fest. Das ist nützlich, um mehrere Verschlüsselungsquellen zu ordnen.
MinInstructionCountGanzzahlLegt fest, wie viele Anweisungen eine Methode mindestens enthalten muss, damit die Regel angewendet wird.
MaxInstructionCountGanzzahlLegt fest, wie viele Anweisungen eine Methode höchstens enthalten darf, damit die Regel angewendet wird.

optimizations

EigenschaftTypBeschreibung
ClassSealingBoolescher WertWenn eingeschaltet, werden Klassen versiegelt: Klassen ohne abgeleitete Typen werden als sealed (final) markiert. Das verbessert die Leistung.
ConstRemovalBoolescher WertWenn eingeschaltet, werden die Metadaten der Konstantenfelder entfernt und die Referenzen im Code direkt durch Literalwerte ersetzt.
DisgregateRemovalBoolescher WertWenn eingeschaltet, werden die Metadaten von Eigenschaften und Ereignissen entfernt. Das verringert den Umfang der Metadaten der Assembly.
EnumRemovalBoolescher WertWenn eingeschaltet, werden die Definitionen von Enumerationstypen entfernt und durch ihre zugrunde liegenden ganzzahligen Typen ersetzt.
UnwantedAttributesBoolescher WertWenn eingeschaltet, werden unerwünschte benutzerdefinierte Attribute entfernt, die Implementierungsdetails oder Debuginformationen preisgeben können.

Das Element Description

Enthält einen beschreibenden Text zu Zweck und Verhalten der Regel. Die Beschreibung erscheint im Protokoll der Verschleierung. So ist bei der Durchsicht des Protokolls leichter zu erkennen, was jede Regel bewirkt.

Regeln konfigurieren

Regeldateien können Sie Babel Obfuscator über die Befehlszeile, die MSBuild-Aufgabe Babel oder Babel Desktop übergeben. Wählen Sie den Weg, der zu Ihrem Build passt.

Befehlszeile

babel myapp.exe --rules babelRules.xml

Die Option --rules kann auf der Befehlszeile mehrfach angegeben werden, um weitere XML-Regeldateien einzubeziehen. So können Sie die Regeln auf getrennte Dateien verteilen und nach Bedarf kombinieren.

MSBuild-Aufgabe Babel

<ItemGroup> <RuleFile Include="babelRules.xml" /> </ItemGroup> <Babel RulesFiles="@(RuleFile)" />

Die Option RulesFiles von Babel Obfuscator nimmt eine Liste von XML-Regeldateien an, die Sie mit dem Element ItemGroup in Ihrer MSBuild-Projektdatei definieren. So lassen sich mehrere Regeldateien angeben und innerhalb der Projektstruktur leicht verwalten. Jede in der Elementgruppe aufgeführte Regeldatei ist eine eigene Eingabe für Babel Obfuscator und kann für verschiedene Teile Ihrer Codebasis unterschiedliche Verschleierungsregeln und Einstellungen festlegen.

Zusätzlich zu externen XML-Regeldateien können Sie die XML-Regeln direkt in die Projektdatei einbetten, und zwar mit dem Attribut XmlRules der Babel-Aufgabe, wie unten gezeigt:

<PropertyGroup> <XmlRules> <Rules targetAssembly="Acme, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f66185f16ea61c16"> <Rule name="rule1" feature="msil encryption" exclude="false"> <Target>Methods</Target> <Pattern>Acme.Engine*</Pattern> <Description>Enable MSIL Code Encryption in Acme Engine</Description> </Rule> </Rules> <Rules targetAssembly="Acme.Entities, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f66185f16ea61c16"> <Rule name="rule2" feature="control flow" exclude="true"> <Target>Methods</Target> <Pattern>Acme.Entities.*</Pattern> <Description>Disable Control Flow Obfuscation for EF classes</Description> </Rule> </Rules> </XmlRules> </PropertyGroup> <Babel XmlRules="$(XmlRules)" />

Wenn Babel Obfuscator in einem Projekt mehrere Ziel-Assemblys verarbeitet, geben Sie mit dem Attribut targetAssembly in den XML-Regeln an, auf welche Ziel-Assembly ein Satz von Regeln angewendet wird. Das Attribut bezeichnet eine bestimmte Assembly mit ihrem vollqualifizierten Namen, einschließlich Version, Gebietsschema und Token des öffentlichen Schlüssels. Fehlt das Attribut targetAssembly, gelten die Regeln für alle Ziel-Assemblys, die im Projekt definiert sind.

Babel Desktop

Um externe XML-Regeldateien zu verwenden, wählen Sie die Ziel-Assembly auf der Zeichenfläche des Projekts aus und fügen Sie die Dateien im Eigenschaftenbereich in der Gruppe „Dateien und Abhängigkeiten“ zu RulesFiles hinzu.

Um eingebettete Regeln zu schreiben, öffnen Sie die Ansicht „XML-Regeln“ der ausgewählten Assembly (die Registerkarte „XML-Regeln“ des Eigenschaftenbereichs oder Einstellungen > Ausgewählte Assembly > XML-Regeln). Der Editor validiert die Regeln gegen das XML-Schema von Babel und meldet Fehler mit Zeile und Spalte. Außerdem kann er Regeldokumente als XML-Dateien öffnen und speichern.

Eingebettete Regeln werden in der Projektdatei gespeichert, in der Eigenschaft XmlRules der Babel-Aufgabe, wie im MSBuild-Beispiel oben. Sie werden daher zusammen mit der Projektkonfiguration gespeichert und versioniert. Wie Sie in Babel Desktop mit Projekten arbeiten, beschreibt die Seite Verschleierungsprojekte.

Last updated on