Skip to Content
Neue Version 12 verfügbar 🎉

Befehlszeilenreferenz

Das Befehlszeilentool von Babel Obfuscator akzeptiert verschiedene Optionen. Jeder Option ist ein doppelter Bindestrich vorangestellt. Der folgende Abschnitt beschreibt jede Option, die Sie auf der Befehlszeile angeben können.

Verschiedenes

Mit diesen Optionen konfigurieren Sie in der Regel allgemeine Verschleierungsfunktionen oder die Art, wie Babel Obfuscator die Ziel-Assembly behandelt.

—help [option]

Die Eingabe von —help ohne Parameter zeigt das Hauptmenü der Hilfe an. Wenn der Parameter [option] angegeben ist, zeigt Babel die erweiterte Hilfe zum angegebenen Befehl an. Zum Beispiel:

--help strings

Gibt die folgenden Informationen aus:

stringencryption (nostringencryption, no-stringencryption, string-encryption, no-string-encryption, strings, no-strings) usage: --[no]stringencryption [name] Enable ([no]disable) string encryption (default: disabled) When enabled, all the user strings in the target assembly will be encrypted. The optional parameter name sets the encryption type. hash - Compressed hash table. The strings are arranged into compressed encrypted hash table data. This algorithm ensures tamper protection. xor - Inline xor strings. stream - Authenticated per-string encryption, decrypted lazily. Fully managed (AOT/trim/FIPS safe).

Die Ausgabe zeigt die Liste der für den Befehl zulässigen Aliase, gefolgt von der Verwendung des Befehls und einer kurzen Beschreibung.

Diese Option steuert, ob beim Start der Copyright-Hinweis von Babel Obfuscator angezeigt wird. Mit dem optionalen Präfix [no] wird der Copyright-Hinweis nicht angezeigt.

—format <format>

VerfĂĽgbar seit 11.7.0.

Wählt das Ausgabeformat von stdout. Zulässige Werte sind text (Standard), json und ndjson. Mit json oder ndjson erzeugt der Lauf einen strukturierten Datenstrom, der dem Schema babel.cli.v1 entspricht, und die für Menschen bestimmten Diagnosemeldungen werden nach stderr geleitet.

babel myapp.exe --format=json > result.json babel myapp.exe --format=ndjson | jq -c 'select(.level=="error")'

Dasselbe Flag schaltet auch --help und --version auf eine maschinenlesbare Darstellung um. Das Schema, Beispiele und die vollständige Referenz finden Sie auf der Seite KI-freundlicher Modus.

—quiet (-q)

VerfĂĽgbar seit 11.7.0.

Unterdrückt das Logo-Banner und lässt interaktive Passwortabfragen sofort mit einem ausdrücklichen Fehler abbrechen, statt auf eine Eingabe zu warten. Sicher für unbeaufsichtigte Aufrufe und für Aufrufe durch Agenten.

babel myapp.exe --quiet --keyfile mykey.pfx --keypwd env:KEY_PWD

—strict-exit

VerfĂĽgbar seit 11.7.0.

Schaltet semantische Exitcodes ein: 0 Erfolg, 10 ungültige Argumente, 20 Eingabe nicht gefunden, 30 Fehler bei der Verschleierung, 40 Lizenzfehler, 50 Schlüssel- oder Signierfehler. Ohne dieses Flag bleibt die bisherige Vereinbarung 0/1 erhalten. Die vollständige Tabelle und die Bedeutung von exitReason finden Sie unter KI-freundlicher Modus: —strict-exit.

—license [path|env]

Ohne das optionale Argument zeigt die Option die verfügbaren Lizenzinformationen an. Wahlweise können Sie den Pfad der Lizenzdatei angeben.

babel --license C:\Babel\babel.licenses

Alternativ können Sie ein Suchverzeichnis angeben, in dem Babel nach der Lizenzdatei suchen soll.

Wenn Sie einen Lizenzschlüssel haben, können Sie ihn mit der Option env wie folgt an Babel übergeben:

babel --license env:BABEL_LICENSE_KEY

Hier ist BABEL_LICENSE_KEY die Umgebungsvariable, die den Lizenzschlüssel enthält.

—verbose <n>

Legt die Ausführlichkeit der Konsolenausgabe fest. <n> ist eine obligatorische, nicht negative ganze Zahl. Bei 0 werden während der Verschleierung keine Meldungen angezeigt. Bei einer Zahl größer als 10 zeigt Babel Debuginformationen an.

—noconfig (@)

Ăśberspringt das Laden der Standardkonfiguration fĂĽr Befehlszeilenwerte. Wenn die Option angegeben ist, werden alle Standardwerte aus der Datei babel.exe.config ignoriert:

babel myapp.exe --noconfig babel myapp.exe @

—nowarn <warn list>

UnterdrĂĽckt die Ausgabe einer oder mehrerer Warnmeldungen. Der Parameter <warn list> ist eine durch Kommas getrennte Liste mit den IDs von Warnungen. Babel ignoriert die an die Option nowarn ĂĽbergebenen Warnungsnummern stillschweigend.

—[no]warnasinfo [warn list]

Gibt eine Liste von Warnungen an, die zu Informationsmeldungen herabgestuft werden sollen. [warn list] ist eine optionale, durch Kommas getrennte Liste mit den IDs der Warnungen.

—[no]warnaserror [warn list]

Gibt eine Liste von Warnungen an, die als Fehler behandelt werden sollen und die Verschleierung abbrechen. [warn list] ist eine optionale, durch Kommas getrennte Liste mit den IDs der Warnungen.

—[no]statistics [file]

Legt fest, ob Verschleierungsstatistiken erzeugt werden. Sie werden am Ende des Programms protokolliert oder, wenn eine Datei angegeben ist, in dieser gespeichert.

Die folgenden zusätzlichen Optionen stehen zur Verfügung:

full=[on/off] Whether to collect additional method statistics

Mit den vollständigen Verschleierungsstatistiken werden zusätzliche Informationen zu den Methoden gesammelt, etwa CYC (zyklomatische Komplexität). Das kann Ressourcen beanspruchen, vor allem bei der Verarbeitung von Assemblys mit vielen Typen.

Hier ein Beispiel fĂĽr Verschleierungsstatistiken aus der Konsolenausgabe:

Babel statistics: Random seed: 6dfabc3f1a479d66 Experimental features: false Multithread obfuscation: true Rules phase, elapsed time 00.000s Processed rules: 0 Agent phase, elapsed time 00.046s Renaming phase, elapsed time 00.082s Unicode normalization: off Flatten namespaces: on Overloaded renaming: off Virtual functions: on XAML renaming: on (res) Symbols statistics: 76/[ 106] types: 71.70 % 0/[ 2] events: 0.00 % 82/[ 236] methods: 34.75 % 7/[ 22] properties: 31.82 % 219/[ 258] fields: 84.88 % 384/[ 624] overall: 61.54 % Encrypt Strings phase, elapsed time 00.016s String algorithm: hash (.NET Core) Number of encrypted strings: 266

—[no]agent (a)

Diese Option schaltet den Verschleierungs-Agenten ein oder aus. Wenn er eingeschaltet ist, führt der Agent eine statische Analyse des Codes durch. Sie verhindert, dass Symbole der Ziel-Assembly umbenannt oder verschleiert werden, wenn dies in der verschleierten Anwendung zu Fehlfunktionen führen könnte.

—assemblyname <option>

Mit dieser Option bestimmen Sie flexibel den Namen der Ziel-Assembly.
Die verfĂĽgbaren Optionen sind:

--assemblyname name=assemblyname --assemblyname inputfilename --assemblyname outputfilename --assemblyname nochange (default)

Das Standardverhalten ist nochange. Das bedeutet, dass der Name der Assembly gegenüber seinem ursprünglichen Wert nicht geändert wird. Dieses Verhalten gilt auch, wenn Sie keine Option --assemblyname angeben.

—[no]satellite [assembly]

Schaltet die Verarbeitung von Satelliten-Assemblys ein oder mit [no] aus. Wenn der optionale Parameter [assembly] angegeben ist, wird die angegebene Assembly-Datei als Satelliten-Assembly der Ziel-Assembly behandelt.

—addsearch <path>

FĂĽgt das angegebene Verzeichnis <path> der Liste der Ordner hinzu, in denen Babel nach referenzierten Assemblys sucht.

Der Parameter <path> kann ein Platzhalterausdruck sein, der auf mehrere Verzeichnisse passt. Ein Platzhalterausdruck kann die folgenden Sonderzeichen enthalten:

* steht fĂĽr beliebig viele beliebige Zeichen, auch fĂĽr keines
?steht fĂĽr genau ein beliebiges Zeichen
**steht rekursiv fĂĽr jedes Verzeichnis
[a-z]steht fĂĽr ein Zeichen aus dem Bereich in der Klammer
[!ab]steht fĂĽr jedes Zeichen, das nicht in der Klammer vorkommt

Die folgenden besonderen Zeichenfolgen lassen sich in den Pfadausdruck einfĂĽgen und stehen fĂĽr die Assembly, nach der gerade gesucht wird:

:assemblyname:Name der gesuchten Assembly
:assemblyversion:Version der gesuchten Assembly
:assemblypublickeytoken:Token des öffentlichen Schlüssels der gesuchten Assembly

Diese Option kann mehrfach angegeben werden.

--addsearch .\**\lib --addsearch .\:assemblyname:\**\netcoreapp2.0

W00013 bei der BAML-Bindung

Die Warnung W00013, die der Assembly-Resolver von Babel ausgibt (Could not resolve assembly <assembly>), ist in der Regel rein informativ. Bei den meisten Arten von Code in den meisten Assemblys ändert eine nicht aufgelöste Referenz die verschleierte Ausgabe nicht: Babel hat aus den bereits geladenen Metadaten genügend Informationen, um Umbenennung, Kontrollflussverschleierung, Zeichenfolgenverschlüsselung und andere Transformationen durchzuführen, ohne jede referenzierte Assembly heranzuziehen.

Es gibt jedoch mindestens einen bestimmten Fall, in dem W00013 mit einer tatsächlichen Änderung der verschleierten Ausgabe zusammenhängt: Assemblys mit eingebettetem BAML, das Typen referenziert, die in einer nicht aufgelösten Assembly definiert sind. Wenn Babel BAML liest, um an XAML gebundene Member zu ermitteln (siehe Zeichenfolgenliterale an umbenannte, an XAML gebundene Member angleichen), muss es den CLR-Typ jedes BAML-Elements auflösen. Liegt die Assembly, die einen solchen Typ deklariert, nicht im Suchpfad, gibt der Resolver für sie W00013 aus. Das BAML-Element wird dann nicht an sein zugrunde liegendes Feld gebunden, und das Feld wird nicht als an XAML gebunden markiert. Wird das Feld später umbenannt, entfällt deshalb stillschweigend der Angleichungsschritt, der die Zeichenfolgenliterale mit dem ursprünglichen Namen umschreibt: Das Feld erhält seinen neuen Namen, aber jedes Literal, das das ursprüngliche Feld benennt, bleibt unverändert. Die verschleierte Assembly ist dann in sich inkonsistent, und jede namensbasierte Suche zur Laufzeit, die sich auf diese Literale stützt, schlägt fehl.

Prüfen Sie bei Projekten mit eingebettetem BAML, bevor Sie einen Verschleierungslauf als endgültig für die Produktion betrachten, dass jede Assembly, die von BAML-Elementen referenzierte Typen definiert, über --addsearch erreichbar ist und dass das Protokoll für diese Assemblys kein W00013 zeigt. Dieselbe Einstellung bieten die Eigenschaft SearchDirectories der MSBuild-Aufgabe Babel und die Einstellung SearchDirectories in der Gruppe Dateien und Abhängigkeiten im Eigenschaftenbereich von Babel Desktop.

Dieses Verhalten der Warnung betrifft nur Projekte mit eingebettetem BAML. In Projekten ohne WPF oder ohne eingebettetes BAML ist W00013 in der Regel rein informativ und wirkt sich nicht auf die verschleierte Ausgabe aus.

—quickrule <rule>

Gibt die Definition einer Schnellregel an. Eine Schnellregel lässt sich anstelle einer XML-Regel verwenden, wenn Sie die Verschleierung konfigurieren möchten, ohne eine XML-Regeldatei anzulegen.

Syntax der Schnellregel:

feature[=exclude];[regex];[access];[target]

Dabei gilt:

featureDer Name der Funktion, fĂĽr die die Regel gilt
[=exclude]Kann angegeben werden, um die Funktion auszuschalten
[regex]Ein optionaler regulärer Ausdruck, der die Symbole filtert. Standardmäßig erfasst der Obfuscator alle Symbole.
[access]Legt die Sichtbarkeit der zu verarbeitenden Symbole fest und kann einen der folgenden Werte annehmen: Public, Protected, Internal, Private, All (Standard All)
[target]Gibt die Art des Symbols an. Zulässige Werte sind: Classes, Delegates, Structures, Interfaces, Enums, Events, Methods, Properties, Fields, StaticFields, Resource, All (Standard All)

Der Schalter quickrule kann mehrfach angegeben werden. Schnellregeln werden in der Reihenfolge verarbeitet, in der sie auf der Befehlszeile stehen, und vor allen XML-Regeln.

Alle öffentlichen Symbole in der Ziel-Assembly umbenennen:

babel myapp.exe --quickrule renaming;.*;Public

Die ZeichenfolgenverschlĂĽsselung im Namespace ACME ausschalten:

babel myapp.exe --quickrule "string encryption=exclude;ACME.*;All;Methods"

Die CodeverschlĂĽsselung fĂĽr die Klasse ACME.Licensing einschalten:

babel myapp.exe --quickrule "msil encryption=on;ACME.Licensing.*"

—dbghelpdlldir <path>

Diese Option wirkt nur unter dem Betriebssystem Windows und legt den Pfad zur dbghelp.dll fest, sodass Babel Obfuscator Debugsymbole vom Microsoft Symbol Server  laden kann.

—trace <regex>

Schaltet die Ablaufverfolgung der Verschleierung für Symbole ein, deren Signatur mit vollständigem Namen dem angegebenen regulären Ausdruck entspricht. Mit dieser Option lassen sich reguläre Ausdrücke debuggen.

babel myapp.exe --trace MyNamespace.MyClass::MyMethod

Verfolgt die Methode MyMethod und protokolliert Debuginformationen zum Stand ihrer Verschleierung.

—randomseed <seed>

Legt den Startwert fest, mit dem der Zufallszahlengenerator von Babel Obfuscator initialisiert wird. Damit lässt sich eine deterministische Verschleierung erreichen. Der Parameter <seed> kann eine beliebige hexadezimale Zeichenfolge sein.

—use <key=value>

Legt zusätzliche Optionen von Babel Obfuscator als Schlüssel-Wert-Paare fest.

debugxaml=[on/off] Whether to enable XAML debug mode encryption=<name> Set encryption algorithm (Aes, AesManaged, DES, TripleDES, Rijndael, RC2, XOR) experimental=[on/off] Whether to enable experimental features loadtomemory=[on/off] Whether to load assemblies to memory parallel=[on/off] Whether to perform multithread obfuscation tagassembly=[on/off] Whether to tag assembly with the BabelObfuscator attribute obfuscationattr=[skip/keep] Skip processing or force attribute retention logtimestamp=[on/off/fmt] Whether to add a timestamp to the log output (fmt date time format)

Beispiele:

Debuginformationen zu allen XAML-Ressourcen ausgeben, deren Name mit Panel beginnt

babel myapp.exe --use debugxaml=Panel.* --verbose 5

Die verschleierte Assembly mit dem Attribut [BabelObfuscator] kennzeichnen.

babel myapp.exe --use tagassembly=on

Babel Obfuscator zwingen, den VerschlĂĽsselungsalgorithmus TripleDES zu verwenden

babel myapp.exe --use encryption=TripleDES

Mit dem Algorithmus verwaltetes AES schützen, damit die in die verschleierte Assembly eingefügte Laufzeitkomponente ohne den Kryptografieanbieter der Plattform entschlüsselt. Verwenden Sie dies, damit geschützte Assemblys auch auf Hosts starten, auf denen dieser Anbieter nicht verfügbar ist, etwa in Containern mit einem fehlerhaften FIPS-Zustand von OpenSSL (siehe FIPS-Konformität). Der Obfuscator verschlüsselt auf dem Buildhost weiterhin mit dem Anbieter der Plattform und erzeugt denselben Geheimtext. Nur die eingefügte Entschlüsselungsroutine ändert sich.

babel myapp.exe --msilencryption --use encryption=aesmanaged

Die Option experimental akzeptiert auch eine Liste von Funktionen des Obfuscators, darunter „all“. Damit lassen sich neue Verschleierungsalgorithmen verwenden, die noch nicht für alle .NET-Plattformen freigegeben sind.

babel myapp.exe --use experimental=all

Wenn in Babel experimentelle Funktionen eingeschaltet sind, prüft das Verschleierungstool nicht, ob die plattformspezifischen Anforderungen erfüllt sind. Alle konfigurierten Verschleierungen werden also ausgeführt, unabhängig davon, ob sie für die Zielplattform geeignet sind. Bedenken Sie, dass experimentelle Funktionen das Fehlerrisiko erhöhen und die Leistung der Anwendung beeinträchtigen können. Verwenden Sie experimentelle Funktionen daher mit Vorsicht, möglichst nur in einer Testumgebung und in genauer Kenntnis der möglichen Risiken.

—[no]isobfuscated [action]

Legt fest, ob erkannt wird, dass die Ziel-Assembly bereits verschleiert ist.
Zulässige Aktionen sind:

  • warn: eine Warnung ausgeben und die Ziel-Assembly weiter verarbeiten.
  • exit: beenden, ohne die Ziel-Assembly zu verarbeiten

Diese Option ist in einem Buildszenario nützlich, in dem die Ziel-Assembly möglicherweise ein zweites Mal verarbeitet wird. Babel wertet die Symbolnamen aus, um festzustellen, ob die Assembly bereits verschleiert wurde. In einigen Fällen kann diese Analyse jedoch ein falsches Ergebnis liefern. Dann ist es besser, die Assembly über die Option tagassembly des Befehlszeilenschalters —use mit dem Attribut BabelObfuscator zu kennzeichnen.

Eingabedateien

Der Abschnitt Eingabedateien enthält Optionen, mit denen Sie Babel Obfuscator externe Dateien übergeben. Diese enthalten zusätzliche Konfigurationen oder Daten, die für bestimmte Vorgänge erforderlich sind.

—keyfile <file>

Legt die Datei mit dem starken Namen fest, mit der die verschleierte Assembly und die lokalisierten Ressourcen-DLLs neu signiert werden. Babel Obfuscator unterstĂĽtzt Strong Name Key (.snk) und Personal Information Exchange (.pfx).

Wenn Sie eine Datei vom Typ Personal Information Exchange verwenden, geben Sie mit der Befehlszeilenoption —keypwd das Passwort der .pfx-Datei an.

—keyname <container>

Verwenden Sie diese Option, um die Anwendung neu zu signieren, wenn das SchlĂĽsselpaar in einem SchlĂĽsselcontainer gespeichert ist. Der obligatorische Parameter <_container>_ ist der Name des SchlĂĽsselcontainers, mit dem die verschleierte Assembly und die lokalisierten Ressourcen-DLLs neu signiert werden.

—keypwd <password>

Gibt das Passwort an, das eine Datei vom Typ Personal Information Exchange (.pfx) verlangt, um die verschleierte Assembly neu zu signieren. Wenn das Passwort nicht auf der Befehlszeile angegeben ist, fordert Babel den Benutzer während der Verschleierung auf, das richtige Passwort einzugeben.

—rules <file>

Legt eine XML-Regeldatei fest, mit der Babel die Verschleierung konfiguriert. Diese Option kann mehrfach angegeben werden. Die Regeldateien werden in der Reihenfolge verarbeitet, in der sie auf der Befehlszeile stehen.

babel myapp.exe --rules ruleset1.xml --rules ruleset2.xml

—mapin <file>

Legt die XML-Map-Datei fest, die als Eingabe dient, um die Namen referenzierter Symbole zu verschleiern. Diese Option kann mehrfach angegeben werden.

babel myapp.exe --mapin library.map.xml --mapin utils.map.xml

—project <file>

Gibt die Datei eines Verschleierungsprojekts an.

—stacktrace <file|key=value>

Decodiert eine Stacktrace-Datei. Diese Option erfordert eine Textdatei <file> mit dem verschleierten Stacktrace und eine Reihe von XML-Map-Dateien, um den Inhalt des Stacktrace zu decodieren.

babel --stacktrace obfuscatedstacktrace.txt --mapin myapp.map.xml --mapin library.map.xml

Die Option kann wiederholt werden, um neben der Stacktrace-Datei die folgenden Einstellungen der Form key=value zu ĂĽbergeben:

EinstellungWerteBeschreibung
modefull (Standard), compactWählt die Ausführlichkeit der decodierten Frames.
framesall (Standard), userall behält jeden Frame bei. user entfernt die von Babel erzeugten Frames, also die Brücken von Dynamic Proxy und die anonymen Laufzeit-Frames, über die diese aufrufen. Es bleibt nur die Aufrufkette Ihres Quellcodes.

Um zum Beispiel einen Stacktrace zu decodieren und nur die Aufrufkette des Benutzercodes zu behalten:

babel --stacktrace obfuscatedstacktrace.txt --stacktrace frames=user --mapin myapp.map.xml

Ausgabedateien

Optionen von Babel Obfuscator, mit denen Sie die Namen der Ausgabedateien festlegen.

—output <file>

Legt den Pfad der Ausgabedatei fĂĽr das verschleierte Ziel fest. Ohne diese Option wird das verschleierte Ziel im Unterverzeichnis BabelOut des Ordners der ursprĂĽnglichen Assembly gespeichert.

—pdb <file>

Legt den Pfad der ausgegebenen PDB-Datei fest. Diese Option kann verwendet werden, wenn die Option —debug eingeschaltet ist.

—pdbpwd <password>

Legt das Passwort der Datei mit den Debuginformationen fest. Mit dem Passwort werden die in der PDB-Datei gespeicherten Namen der Quellcodedateien verschlĂĽsselt.

—logfile <file>

Schreibt die Ausgabemeldungen von Babel Obfuscator in eine Protokolldatei.

—mapout [file]

Legt den Namen der Ausgabedatei für die XML-Map der Verschleierung fest. Ohne den optionalen Parameter [file] benennt Babel Obfuscator die XML-Map-Datei nach der ursprünglichen Assembly und hängt die Erweiterung .map.xml an.

—makeproject [file]

Erstellt aus der eingegebenen Befehlszeile eine Projektdatei fĂĽr MSBuild. Ohne den optionalen Parameter [file] speichert Babel Obfuscator die Projektdatei im Unterverzeichnis BabelOut.

Plugins

Plugins sind zusätzliche Komponenten, die den Funktionsumfang von Babel Obfuscator erweitern. Mit ihnen lassen sich Verschleierungsfunktionen hinzufügen oder ändern, sodass Sie die Verschleierung stärker anpassen und steuern können (siehe Encrypt Plugin).

—plugin <file>

Legt den Pfad der Datei eines Plugins fĂĽr Babel Obfuscator fest. Diese Option kann mehrfach angegeben werden.

—argument <key=value>

Legt ein Argument des Plugins als SchlĂĽssel-Wert-Paar fest. Diese Option kann mehrfach angegeben werden.

Assemblys zusammenfĂĽhren und einbetten

Bei der Assembly-Zusammenführung werden mehrere Assemblys zu einer einzigen primären Assembly vereint. Babel Obfuscator führt dazu alle Assemblys, die auf der Befehlszeile nach der primären Assembly angegeben sind, zusammen und verschleiert sie.

—[no]copyattrs [regex]

Wenn diese Option eingeschaltet ist, werden alle Attribute auf Assemblyebene jeder Eingabe-Assembly in die Ziel-Assembly kopiert. Mit einem optionalen regulären Ausdruck lassen sich doppelte Attribute zusammenführen, die diesem Ausdruck entsprechen.

—embed <assembly>

Babel Obfuscator kann mehrere Assemblys, von denen die Ziel-Assembly abhängt, in diese einbetten. Die eingebetteten Assemblys werden komprimiert und verschlüsselt. Die Einbettung kann die Bereitstellung vereinfachen und die Größe der Software verringern. Sie lässt sich anstelle der Zusammenführung verwenden, wenn die Abhängigkeit nicht vollständig verschleiert werden muss.

Diese Option kann mehrfach angegeben werden.

babel myapp.exe --embed Library1.dll --embed Library2.dll

—[no]internalize

Wenn die Option eingeschaltet ist, wird die Sichtbarkeit aller öffentlichen Typen in zusammengeführten Assemblys auf internal (Friend in VB) eingeschränkt.

—[no]jsonmanifest

Schaltet die Behandlung des Abhängigkeitsmanifests ein (mit [no] aus, Standard: eingeschaltet). Babel Obfuscator kann beim Zusammenführen von Abhängigkeiten die Manifestdatei .deps.json der Ziel-Assembly aktualisieren.

Umbenennung

Mit diesen Befehlen konfigurieren Sie die Umbenennung von Symbolen.

—[no]types (t)

Legt fest, ob die Umbenennung von Typen eingeschaltet ist.

—[no]events (e)

Legt fest, ob die Umbenennung von Ereignissen eingeschaltet ist.

—[no]methods (m)

Legt fest, ob die Umbenennung von Methoden eingeschaltet ist.

—[no]parameters (r)

Legt fest, ob die Umbenennung von Methodenparametern eingeschaltet ist.

—[no]properties (p)

Legt fest, ob die Umbenennung von Eigenschaften eingeschaltet ist.

—[no]fields (f)

Legt fest, ob die Umbenennung von Feldern eingeschaltet ist.

—[no]xaml [key=value]

Wenn die Option eingeschaltet ist, werden Symbole umbenannt, die in XAML- oder BAML-Ressourcen verwendet werden. Diese Option akzeptiert optionale SchlĂĽssel-Wert-Paare der Form <key>=<value>.

Zulässige Schlüssel und Werte sind:

keys=[on/off] Whether to enable renaming of dictionary keys res=[on/off] Whether to enable renaming of BAML/XAML resources strip=[on/off] Whether to strip line information or white spaces manual=[on/off] Whether to use manual symbol renaming

—[no]virtual [key=value]

Legt fest, ob virtuelle Member wie Methoden, Eigenschaften und Ereignisse umbenannt werden. Diese Option akzeptiert optionale SchlĂĽssel-Wert-Paare der Form <key>=<value>.

Zulässige Schlüssel und Werte sind:

external=[on/off] Whether to obfuscate external virtual calls

—[no]overloaded [key=value]

Wenn die Option eingeschaltet ist, verwendet Babel Obfuscator denselben Namen für zwei oder mehr Methoden desselben Typs, sofern die Regeln der CLR es erlauben. Mit optionalen Schlüssel-Wert-Paaren wählen Sie, welche Überladung angewendet wird.

Zulässige Schlüssel und Werte sind:

methods=[on/off] Whether to overload methods properties=[on/off] Whether to overload methods parameters=[on/off] Whether to overload parameters

—[no]flatns (n)

Wenn die Option eingeschaltet ist, werden alle umbenannten Typen in den globalen Namespace verschoben. Dadurch wird die Namespace-Hierarchie abgeflacht, und die verschleierte Assembly enthält keine Namespace-Informationen.

—[no]unicode [char set]

Wenn die Option eingeschaltet ist, werden die Namen durch unlesbare Unicode-Zeichenfolgen ersetzt. Ist die Unicode-Normalisierung ausgeschaltet, bestehen alle verschleierten Namen aus Zeichenfolgen von Kleinbuchstaben des lateinischen Alphabets. Wahlweise können Sie den Zeichensatz angeben, aus dem die verschleierten Namen erzeugt werden.

babel myapp.exe --unicode 0xf000-0xfe00 babel myapp.exe --unicode 10,13,a-z

—namelength <n>

Legt die minimale Namenslänge umbenannter Symbole fest. Mit optionalen Schlüssel-Wert-Paaren legen Sie die Mindestlänge für Typen, Methoden, Eigenschaften, Felder und Ereignisse getrennt fest.

babel myapp.exe --namelength types=12 --namelength methods=3

—nameprefix [prefix]

Legt das Namenspräfix umbenannter Symbole fest. Mit optionalen Schlüssel-Wert-Paaren legen Sie das Präfix für Typen, Methoden, Eigenschaften, Felder, Ereignisse und Parameter getrennt fest.

babel myapp.exe --nameprefix types=$Name_ --nameprefix methods=M_

Der besondere Wert $Name wird durch den ursprünglichen Namen des Symbols ersetzt. Das Präfix $Name eignet sich vor allem dazu, Probleme bei der Umbenennung zu debuggen.

—[no]xmldoc [file|regex]

Legt fest, ob die XML-Dokumentation der Ziel-Assembly aktualisiert wird, indem alle umbenannten Symbole herausgefiltert werden. Wahlweise können Sie den Pfad der XML-Dokumentationsdatei oder einen regulären Ausdruck angeben. Entspricht der Dateiname oder der reguläre Ausdruck dem Namen der XML-Dokumentationsdatei einer zusammengeführten Assembly, wird das XML-Dokument der zusammengeführten Assembly in das XML-Dokument der Ziel-Assembly übernommen.

Kontrollflussverschleierung

Die Kontrollflussverschleierung transformiert den Code einer Methode. Sie verbirgt damit deren Ausführungspfad und macht den entstehenden Ablauf deutlich komplexer und schwerer verständlich.

—[no]controlflow

Verändert den Kontrollfluss der Methoden. Mit optionalen Schlüssel-Wert-Paaren <key>=<value> konfigurieren Sie die Verwürfelung des Codes.

Zulässige Schlüssel und Werte, die verifizierbaren IL-Code erzeugen:

goto=[on/off] Whether to insert irrelevant branches switch=[on/off] Whether to enable switch scrambling case=[on/off] Whether to hide case constants if=[on/off] Whether to enable if scrambling call=[on/off] Whether to enable random calls value=[on/off] Whether to use value encryption token=[on/off] Whether to enable emission of method tokens chain=[on/off] Whether to enable chained-state flattening (Ultimate)

FĂĽr nicht verifizierbaren IL-Code:

underflow=[on/off] Whether to enable stack underflow

Diese Option kann mehrfach angegeben werden, zum Beispiel:

babel myapp.exe --controlflow if=on --controlflow switch=on --controlflow case=on --controlflow call=on

—iterations <n>

Legt die Anzahl der Iterationen des Algorithmus der Kontrollflussverschleierung fest. Mit 0 Iterationen wird die Kontrollflussverschleierung ausgeschaltet. Je größer n ist, desto mehr irrelevante Verzweigungsanweisungen werden in jede Methode eingefügt.

—[no]invalidopcodes [mode]

Mit dieser Option werden ungĂĽltige MSIL-Opcodes ausgegeben. Das hindert einige Reflexionstools daran, den IL-Methodenrumpf zu untersuchen.

Wenn Sie diese Option einschalten, können IL-Verifizierer (Intermediate Language) die verschleierte Assembly nicht mehr verifizieren. Beachten Sie, dass nicht verifizierbarer IL-Code auf x64-Betriebssystemen nicht ausgeführt werden kann. Schalten Sie diese Option deshalb nicht ein, wenn die verschleierte Assembly für x64-Plattformen bestimmt ist.

Der optionale Parameter [mode] schaltet verschiedene Konfigurationen ungĂĽltiger Opcodes ein:

enhanced: Insert additional invalid op-codes

VerschlĂĽsselung und Schutz

Optionen fĂĽr erweiterte Verschleierungsfunktionen wie die Zeichenfolgen- und die CodeverschlĂĽsselung.

—[no]msilencryption [regex]

Legt fest, ob die Codeverschlüsselung für Methoden eingeschaltet ist, die dem optionalen regulären Ausdruck oder den in XML-Regeldateien definierten Verschleierungsregeln entsprechen. Diese Option kann mehrfach angegeben werden.

—[no]stringencryption [name]

Legt fest, ob die Verschlüsselung der Benutzerzeichenfolgen eingeschaltet ist. Mit dem optionalen Parameter name wählen Sie den verwendeten Verschlüsselungsalgorithmus.

Zulässige Algorithmusnamen sind:

hash The strings are arranged into a hash table xor Inline XOR encoded strings stream Authenticated per-string encryption, decrypted lazily; fully managed (AOT/trim/FIPS safe)

—[no]valueencryption [key=value]

Diese Option schaltet die VerschlĂĽsselung von konstanten Inline-Werten und Arrays ein. Mit optionalen SchlĂĽssel-Wert-Paaren <key>=<value> schalten Sie die VerschlĂĽsselung bestimmter Typen ein oder aus.

Zulässige Schlüssel und Werte sind:

int32=[on/off] Whether to encrypt Int32 values int64=[on/off] Whether to encrypt Int64 values single=[on/off] Whether to encrypt Single values double=[on/off] Whether to encrypt Double values array=[on/off] Whether to encrypt Arrays

—[no]ildasm

Wenn die Option eingeschaltet ist, wird der Ziel-Assembly das Attribut System.Runtime.CompilerServices.SuppressIldasmAttribute hinzugefĂĽgt. Es verhindert, dass der Microsoft MSIL Disassembler ILDASM (Ildasm.exe) das verschleierte Ziel disassembliert.

—[no]reflection

Legt fest, ob ungĂĽltige Metadaten ausgegeben werden, um Tools zu stoppen, die auf Reflexion beruhen.

—[no]resourceencryption [key=value]

Legt fest, ob die Verschlüsselung verwalteter Ressourcen eingeschaltet ist. Wenn sie eingeschaltet ist, werden alle eingebetteten Ressourcen komprimiert und verschlüsselt. Mit optionalen Schlüssel-Wert-Paaren geben Sie zusätzliche Einstellungen an.

Zulässige Schlüssel und Werte sind:

encrypt=[on/off] Whether to encrypt resources compress=[on/off] Whether to compress resources protect=[on/off] Whether to protect embedded resources

—[no]proxy [type][;regex]

Legt fest, ob Proxy-Aufrufe fĂĽr externe und interne Methoden erzeugt werden. Der optionale Parameter [type] kann einen der folgenden Werte haben:

external hide calls to external assembly methods internal hide calls to internally defined assembly methods all hide both internal and external method calls

Wahlweise können Sie einen regulären Ausdruck angeben, der der Signatur der Methoden entspricht, deren Aufrufe über einen Proxy geleitet werden sollen, zum Beispiel:

babel.exe myapp.exe --proxy external --proxy ;System.Array::.* --proxy ;::GetEnumerator

—[no]tamperingdetection

Legt fest, ob die Manipulationserkennung eingeschaltet ist.

—[no]antidebugging

Legt fest, ob der Debugging-Schutz eingeschaltet ist.

Codegenerierung

Diese Optionen betreffen einige Codeoptimierungen, die Babel Obfuscator auf die Ziel-Assembly anwenden kann.

—addreference <assembly>

FĂĽgt der Ziel-Assembly eine Assembly-Referenz hinzu oder leitet eine vorhandene Referenz um. Beispiel:

babel myapp.exe --addreference "[System*, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]"

Leitet alle System-Referenzen auf portable Assemblys um. Diese Option kann mehrfach angegeben werden.

—[no]cleanattrs <regex>

Legt fest, ob die Entfernung unerwünschter Attribute eingeschaltet ist. Der Parameter <regex> ist ein regulärer Ausdruck, der dem vollständigen Namen des Typs der unerwünschten Attribute entspricht. Diese Option kann mehrfach angegeben werden.

—[no]constremoval

Legt fest, ob die Entfernung von Konstantenfeldern eingeschaltet ist. Jede Referenz auf ein Konstantenfeld wird nach Möglichkeit durch dessen konstanten Wert ersetzt.

—[no]deadcode [regex]

Legt fest, ob die Entfernung ungenutzten Codes eingeschaltet ist. Wenn sie eingeschaltet ist, werden alle Methoden, Eigenschaften, Felder und Ereignisse entfernt, die von keinem Codepfad erreicht werden. Über [regex] können Sie einen optionalen Einstiegspunkt angeben, an dem die Suche beginnt.

—[no]debug [source]

Legt fest, ob Debuginformationen ausgegeben werden und für das verschleierte Ziel eine PDB-Datei mit Debugsymbolen erzeugt wird. Wahlweise können Sie einen Speicher für Debugsymbole angeben.

--debug srv*c:\Symbols*http://msdl.microsoft.com/download/symbols

—[no]disgregateremoval

Legt fest, ob die Aufteilung von Eigenschaften und Ereignissen (Disgregate Removal) eingeschaltet ist. Sie entfernt die Metadaten von Eigenschaften und Ereignissen und lässt nur deren Accessormethoden zurück.

—[no]enumremoval

Legt fest, ob die Entfernung von Typen eingeschaltet ist, die von System.Enum abgeleitet sind. Jede Referenz auf ein Feld einer Enumeration wird nach Möglichkeit durch dessen konstanten Wert ersetzt.

—[no]inlineexpansion

Die Inline-Erweiterung ersetzt einen Methodenaufruf an der Aufrufstelle durch den Code der aufgerufenen Methode.

—[no]instrument [regex]

Legt fest, ob die Codeinstrumentierung eingeschaltet ist. Mit einem optionalen regulären Ausdruck geben Sie die vollqualifizierten Member an, die instrumentiert werden sollen.

Vollqualifizierte Member haben die folgende Syntax

[NamespaceName].[TypeName]::[MethodName]

Beispiel:

babel myapp.exe --instrument mynamespace\.mytype::.*

Diese Option kann mehrfach angegeben werden.

—[no]emptymethods

Legt fest, ob Methoden mit leerem Rumpf Instrumentierungscode hinzugefĂĽgt wird.

—moduleinitializer [method]

Fügt Code für die Modulinitialisierung hinzu. Wahlweise können Sie die Signatur einer statischen Methode ohne Parameter angeben, die nach dem Laden des Moduls aufgerufen wird.

[Obfuscation(Feature = "module initializer:priority=120")] public static void DoInitialize120() { Console.WriteLine("DoInitialize120"); }

Dabei ist priority eine ganze Zahl, die die Reihenfolge festlegt, in der Babel die Initialisierungsmethoden aufruft. Babel fügt seine eigenen Initialisierungsmethoden mit der Standardpriorität 100 hinzu. Initialisierer mit einer Priorität unter 100 werden zuerst aufgerufen.

—[no]seal

Wenn die Option eingeschaltet ist, werden alle nicht öffentlichen Klassen versiegelt, die in keiner Vererbungshierarchie als Basisklasse dienen. Eine als versiegelt deklarierte Klasse kann die Leistung von Methodenaufrufen verbessern, weil der JIT-Compiler (Just-In-Time) nach Möglichkeit nicht die virtuelle Methodentabelle der Methode durchlaufen muss.

Last updated on