Babel Obfuscator Tool Ultimate
Babel.Obfuscator.Tool stellt die Befehlszeile babel als dotnet-Tool bereit. So führen Sie Babel Obfuscator aus einem Terminal oder einem Skript unter Windows, Linux und macOS aus und brauchen dafür nur das installierte .NET SDK.
Inhalt des Pakets
Babel.Obfuscator.Tool ist ein Paket vom Typ .NET-Tool , das den Befehl babel installiert. Es ist dasselbe Befehlszeilentool, das in den Zip-Paketen babel_net* ausgeliefert wird, mit denselben Optionen, und es gehört zur Ultimate-Edition und zu den Standorteditionen von Babel Licensing (Server und Data Center). Das Paket enthält je einen Build des Tools für jede unterstützte Laufzeit, von .NET 6.0 bis .NET 10.0, und die dotnet CLI wählt den Build, der zum SDK auf dem Rechner passt. Jeder Build enthält:
babel.dll, das Befehlszeilentool, mit seiner Laufzeitkonfiguration.- Das Plugin
BabelEncrypt, das sich mit--pluginladen lässt. Babel.Build.dll, die Assembly der MSBuild-Aufgabe Babel, für Buildskripte, die die Babel-Aufgabe über den Dateipfad referenzieren.
Wie Babel.Obfuscator liegt das Tool-Paket nicht auf nuget.org: Hosten Sie es in Ihrem eigenen Feed, wie unter Das Paket hosten beschrieben.
Wann Sie das Tool verwenden
Verwenden Sie das Tool, wenn Sie Babel selbst ausführen möchten und nicht als Schritt eines MSBuild-Builds:
- Assemblys verschleiern, die bereits erstellt sind, zum Beispiel .NET-Framework-Binärdateien aus einem anderen Buildsystem.
- Viele Assemblys per Skript oder im Stapel verschleiern und die Automatisierung durch Agenten über den KI-freundlichen Modus nutzen.
- Das Befehlszeilentool auf Buildrechnern und Buildagents unter Linux und macOS ausführen.
- Hilfsbefehle wie das Decodieren eines Stacktrace (
--stacktrace), das Prüfen der Lizenz (--license) oder das Erzeugen eines MSBuild-Projekts aus einer Befehlszeile (--makeproject).
Das Tool ersetzt das Paket Babel.Obfuscator in Pipelines mit dotnet build und dotnet publish nicht. Das .NET SDK schreibt den IL-Code nach der Kompilierung um (Abhängigkeitsauflösung, Trimming, Einzeldateibündelung, Ahead-of-Time-Kompilierung), und eine Assembly aus bin, aus obj oder aus dem Veröffentlichungsordner hat diese Schritte bereits durchlaufen. Sie nachträglich zu verschleiern, wird daher nicht unterstützt. Referenzieren Sie stattdessen das Paket: Es führt Babel an der richtigen Stelle innerhalb des Builds aus.
Das Tool installieren
Globales Tool
Ein globales Tool wird einmal je Benutzer installiert und steht in jedem Terminal zur Verfügung:
dotnet tool install Babel.Obfuscator.Tool -gWenn der Feed in keiner Datei NuGet.config aufgeführt ist, geben Sie ihn ausdrücklich an. Die Quelle kann die URL eines Feeds oder ein lokaler Ordner sein:
dotnet tool install Babel.Obfuscator.Tool -g --add-source ~/NuGetAchten Sie unter Linux und macOS darauf, dass der Tools-Ordner im Pfad liegt, sonst wird der Befehl babel nicht gefunden:
export PATH="$PATH:$HOME/.dotnet/tools"Lokales Tool
Ein lokales Tool wird über ein Toolmanifest an ein Repository gebunden, sodass jeder Entwickler und jeder CI-Agent dieselbe Babel-Version ausführt:
dotnet new tool-manifest
dotnet tool install Babel.Obfuscator.ToolDadurch wird das Tool in .config/dotnet-tools.json eingetragen, einer Datei, die Sie einchecken. Auf jedem anderen Rechner installiert dotnet tool restore die festgelegte Version. Ein lokales Tool wird über die dotnet CLI aufgerufen:
dotnet babel --versionAktualisieren und entfernen
dotnet tool update Babel.Obfuscator.Tool -g
dotnet tool list -g
dotnet tool uninstall Babel.Obfuscator.Tool -gLassen Sie -g bei einem lokalen Tool weg. Dieselben Befehle sind unter Installation beschrieben.
Das Tool lizenzieren
Das Tool braucht dieselbe Lizenz wie das Produkt. Ein dotnet-Tool hat keinen Installationsordner, in den Sie babel.licenses kopieren könnten. Übergeben Sie Babel die Lizenz daher auf einem dieser Wege:
- Setzen Sie die Umgebungsvariable
BABEL_LICENSE_PATHauf den vollständigen Pfad der Lizenzdatei. Das ist die empfohlene Einrichtung auf Entwicklerrechnern und Buildagents:
export BABEL_LICENSE_PATH=~/Babel/babel.licenses- Übergeben Sie bei jedem Aufruf
--licensemit dem Pfad der Lizenzdatei oder eines Ordners, der durchsucht werden soll. - Übergeben Sie
--license env:BABEL_LICENSE, wobei die Variable einen Lizenzschlüssel enthält: die richtige Wahl auf Buildservern, wo der Schlüssel als Geheimnis hinterlegt ist. Für eine Floating-Lizenz speichern Sie den Benutzerschlüssel alsfloating:<user key>.
babel --license ohne Argument gibt die verwendete Lizenz aus. Denken Sie daran, dass eine Lizenzdatei für eine Produktversion gilt: Verwenden Sie die Datei, die mit derselben Version wie das Tool geliefert wurde, und aktualisieren Sie beide zusammen.
Das Tool verwenden
Der Befehl babel akzeptiert die Syntax und die Schalter, die unter Befehlszeile und in der Befehlszeilenreferenz beschrieben sind. Ein typischer Aufruf nennt die zu verschleiernde Assembly, die Ausgabedatei und die Funktionen, die eingeschaltet werden:
babel MyApp.dll --output obfuscated/MyApp.dll --stringencryption stream --controlflow if=on --controlflow switch=on --iterations 3 --resourceencryption --rules babelRules.xml --mapoutJede in diesem Handbuch beschriebene Funktion steht im Tool zur Verfügung: Regeln mit --rules, Zusammenführen und Einbetten mit zusätzlichen Assembly-Argumenten und --embed, Map-Dateien mit --mapin und --mapout, Plugins mit --plugin und die verwaltete AES-Entschlüsselungsroutine mit --use encryption=aesmanaged. Stellen Sie dem Befehl bei einem lokalen Tool dotnet voran.
Skripte und Automatisierung
Seit Version 11.7 hat die Befehlszeile einen KI-freundlichen Modus, der für Skripte und Agenten gedacht ist:
babel MyApp.dll --stringencryption stream --format ndjson --quiet --strict-exit--format json oder ndjson macht aus der Ausgabe einen maschinenlesbaren Datenstrom und leitet die für Menschen bestimmten Diagnosemeldungen auf die Standardfehlerausgabe. --quiet entfernt das Banner und lässt jede interaktive Eingabeaufforderung sofort fehlschlagen. --strict-exit gibt für ungültige Argumente, fehlende Eingaben sowie Fehler bei der Verschleierung, der Lizenzierung und der Signierung je einen eigenen Exitcode zurück.
Ausführung auf einem Buildserver
Das Tool passt in Pipelines, die Buildartefakte in einem eigenen Schritt verschleiern. Mit einem ins Repository eingecheckten Toolmanifest und dem in NuGet.config konfigurierten Feed (das Beispiel GitHub Actions zeigt eine Konfiguration, die sich bei GitHub Packages authentifiziert) sieht ein Auftrag in GitHub Actions so aus:
steps:
- uses: actions/checkout@v4
- uses: actions/setup-dotnet@v4
with:
dotnet-version: '10.0.x'
- name: Restore tools
run: dotnet tool restore
env:
PACKAGES_TOKEN: ${{ secrets.PACKAGES_TOKEN }}
- name: Obfuscate
run: dotnet babel artifacts/MyLib.dll --license env:BABEL_LICENSE --stringencryption stream --strict-exit
env:
BABEL_LICENSE: ${{ secrets.BABEL_LICENSE_SECRET }}Hosts im FIPS-Modus
Seit Version 11.8 sind die Binärdateien des Tools selbst mit dem verwalteten AES-Algorithmus verschleiert, sodass babel auch auf Hosts startet, deren FIPS-Anbieter von OpenSSL defekt ist. Die Assemblys, die Sie auf solchen Hosts schützen, brauchen weiterhin eine eigene verwaltete Entschlüsselungsroutine: Verwenden Sie den Algorithmus STREAM für die Zeichenfolgenverschlüsselung und --use encryption=aesmanaged für die anderen Verschlüsselungsfunktionen, wie unter FIPS-Konformität erläutert.
Fehlerbehebung
babel: command not found: Der Ordner der globalen Tools liegt nicht im Pfad. Nehmen Sie~/.dotnet/toolsinPATHauf, oder verwenden Sie ein lokales Tool und führen Siedotnet babelaus.- Eine Meldung, die zur Installation von .NET auffordert: Der gewählte Build des Tools braucht die passende .NET-Laufzeit, von 6.0 bis 10.0. Installieren Sie diese Laufzeit, oder setzen Sie
DOTNET_ROLL_FORWARD=Major, um das Tool auf einer neueren Laufzeit auszuführen. - A valid license could not be found: Prüfen Sie
BABEL_LICENSE_PATHoder das Argument von--license, und führen Sie dannbabel --licenseaus, um zu sehen, was Babel geladen hat. Eine Lizenzdatei für eine andere Version wird als ungültig gemeldet. - Die Ausgabe weicht von einem Lauf in Babel Desktop ab: Babel Desktop wendet die Einstellungen an, die in seinem
.babel-Projekt gespeichert sind, während das Tool nur die Schalter der Befehlszeile anwendet. Vergleichen Sie die beiden Konfigurationen, insbesondere den Verschleierungs-Agent und die Regeln.