Skip to Content
Neue Version 12 verfügbar 🎉
ObfuscatorBefehlszeileKI-freundlicher Modus

KI-freundlicher CLI-Modus

Ab Babel Obfuscator 11.7.0 kann das Befehlszeilentool einen strukturierten, maschinenlesbaren Ausgabestrom ausgeben, der sich gut für CI-Pipelines, Buildorchestratoren und KI- und Agent-Integrationen eignet.

Die standardmäßige Textausgabe von babel.exe ist unverändert und bleibt vollständig abwärtskompatibel: Vorhandene CI-Skripte und Kundenintegrationen müssen nicht angepasst werden.

Der KI-freundliche Modus wird über drei neue globale Flags eingeschaltet:

  • --format=text|json|ndjson: wählt das Format des Ausgabekanals
  • --quiet (Alias -q): unterdrückt das Logo-Banner und bricht bei interaktiven Eingabeaufforderungen sofort mit einem Fehler ab
  • --strict-exit: schaltet semantische Exitcodes ein

Wenn --format=json oder --format=ndjson gewählt ist, trägt stdout den strukturierten Datenstrom, und die für Menschen lesbaren Diagnosemeldungen werden nach stderr geleitet, sodass sich die beiden Kanäle nie vermischen.

Flags

—format <format>

Wählt das Ausgabeformat, das auf stdout verwendet wird. Zulässige Werte:

WertBeschreibung
textStandard. Die bisherige, für Menschen lesbare Konsolenausgabe. Keine strukturellen Änderungen gegenüber früheren Versionen.
jsonEin einzelner, gepufferter JSON-Umschlag, der geschrieben wird, wenn der Lauf abgeschlossen ist (oder bei --help / --version). Am besten geeignet, wenn stdout in eine Datei umgeleitet oder an einen JSON-Verbraucher weitergereicht wird.
ndjsonZeilengetrenntes JSON. Ein Ereignis pro Zeile, das ausgegeben wird, sobald es entsteht. Am besten geeignet für Streaming-Verbraucher, Protokollsammler und laufende Agenten, die reagieren müssen, bevor der Lauf endet.

Beispiele:

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

Mit —format=json oder —format=ndjson wird das Logo-Banner unabhängig von —logo automatisch unterdrückt, damit schon das erste Byte auf stdout gültiges JSON ist.

—quiet (-q)

Unterdrückt das Copyright- und Logo-Banner und ändert das Verhalten interaktiver Passwortabfragen: Statt an Console.In zu blockieren, bricht Babel sofort mit einem ausdrücklichen Fehler ab. Dadurch ist --quiet sicher für unbeaufsichtigte Aufrufe durch CI-Runner, Buildschritte in Containern und KI-Agenten.

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

--quiet ist unabhängig von --format: Es lässt sich mit der bisherigen Ausgabe text kombinieren, um für Menschen lesbare Protokolle ohne das Banner zu erhalten.

—strict-exit

Schaltet für den Prozess semantische Exitcodes ein. Ohne dieses Flag behält Babel die bisherige Vereinbarung bei, nach der 0 Erfolg und 1 jeden Fehlschlag bedeutet.

ExitcodeKonstanteBedeutung
0successDer Lauf wurde ohne Fehler abgeschlossen.
10invalidArgumentsDie Befehlszeile konnte nicht ausgewertet werden oder enthielt einen ungültigen Wert (zum Beispiel ein unbekanntes --format).
20inputNotFoundDie primäre Assembly oder eine andere erforderliche Eingabedatei wurde nicht gefunden.
30obfuscationFailureDie Verschleierung ist zur Laufzeit fehlgeschlagen (jede nicht klassifizierte Ausnahme des Obfuscators).
40licensingFailureDie Lizenzprüfung ist fehlgeschlagen (fehlende, abgelaufene oder nicht berechtigte Lizenz).
50keyOrSigningFailureDie Signierung mit starkem Namen oder eine Operation mit einem kryptografischen Schlüssel ist fehlgeschlagen.

Die Klassifizierung erscheint außerdem als exitReason im Ergebnisdatensatz von JSON und NDJSON (siehe Ergebnisumschlag), auch wenn --strict-exit nicht aktiv ist. So können Verbraucher die Fehlerkategorien unabhängig vom numerischen Exitcode unterscheiden.

babel myapp.exe --strict-exit --format=json echo "exit=$?"

Schema: babel.cli.v1

Alle strukturierten Nutzdaten entsprechen dem versionierten Schema babel.cli.v1. Innerhalb einer Hauptversion des Schemas sind additive Änderungen (neue Felder, neue Ereigniscodes, neue Exit-Gründe) zulässig. Bei inkompatiblen Änderungen erhält das Schema einen neuen Namen.

Ereignisdatensatz

Jede Diagnosemeldung, die während eines Laufs ausgegeben wird, wird auf ein Ereignis abgebildet:

event
{ "ts": "2026-05-08T14:32:11.482Z", "level": "info", "code": "BAB1234", "message": "Renaming phase, elapsed time 00.082s", "data": { "phase": "renaming", "elapsedMs": 82 } }
FeldTypHinweise
tsZeichenfolge (ISO-8601, UTC)Zeitstempel, zu dem das Ereignis erzeugt wurde.
leveldebug | info | warning | errorSchweregrad.
codeZeichenfolge | nullDiagnosecode von Babel (zum Beispiel BAB1234, W00013), sofern vorhanden.
messageZeichenfolgeFür Menschen lesbare Meldung.
dataObjekt | nullOptionale strukturierte Nutzdaten, die dem Ereignis angehängt sind.

Ergebnisumschlag

—format=json

Wenn der Lauf endet, wird ein einzelnes JSON-Objekt nach stdout geschrieben. Es enthält die Zusammenfassung des Laufs und alle Ereignisse, die während des Laufs gepuffert wurden:

result (json)
{ "exitCode": 0, "exitReason": "success", "elapsedMs": 4218, "warnings": 1, "errors": 0, "events": [ { "ts": "2026-05-08T14:32:09.500Z", "level": "info", "code": null, "message": "Babel Obfuscator 11.7.0.0", "data": null }, { "ts": "2026-05-08T14:32:11.482Z", "level": "info", "code": "BAB1234", "message": "Renaming phase ...", "data": { "phase": "renaming" } }, { "ts": "2026-05-08T14:32:13.012Z", "level": "warning", "code": "W00013", "message": "Could not resolve ...", "data": null } ] }

—format=ndjson

Jedes Ereignis wird in einer eigenen Zeile ausgegeben, sobald es entsteht. Nach dem letzten Ereignis folgt eine abschließende Ergebniszeile (ohne das Array events, da die Ereignisse bereits übertragen wurden):

result (ndjson)
{"ts":"2026-05-08T14:32:09.500Z","level":"info","code":null,"message":"Babel Obfuscator 11.7.0.0","data":null} {"ts":"2026-05-08T14:32:11.482Z","level":"info","code":"BAB1234","message":"Renaming phase ...","data":{"phase":"renaming"}} {"ts":"2026-05-08T14:32:13.012Z","level":"warning","code":"W00013","message":"Could not resolve ...","data":null} {"exitCode":0,"exitReason":"success","elapsedMs":4218,"warnings":1,"errors":0}
FeldTypHinweise
exitCodeGanzzahlNumerischer Exitcode, den der Prozess tatsächlich zurückgibt (bisherig oder strikt, je nach --strict-exit).
exitReasonZeichenfolgeStabiles Klassifizierungstoken. Gibt immer die semantische Klasse wieder, auch ohne --strict-exit.
elapsedMsGanzzahlTatsächlich verstrichene Gesamtdauer in Millisekunden.
warningsGanzzahlAnzahl der Ereignisse der Stufe warning.
errorsGanzzahlAnzahl der Ereignisse der Stufe error.
eventsArray | nullIm Modus json vorhanden, in ndjson weggelassen (die Ereignisse werden als einzelne Zeilen übertragen).

Maschinenlesbares —help

babel --help --format=json gibt eine vollständige Beschreibung jeder öffentlichen Option aus. Sie eignet sich für Tools, die die Oberfläche der CLI auswerten müssen (Shell-Vervollständigung, KI-Agenten, Dokumentationsgeneratoren):

--help --format=json (excerpt)
{ "version": "11.7.0.0", "usage": "babel.exe <primary assembly source> [<other assemblies>...] [options]", "options": [ { "name": "controlflow", "aliases": ["nocontrolflow", "no-controlflow", "control-flow", "no-control-flow", "i"], "description": "Enable ([no]disable) MSIL control flow obfuscation", "args": null, "argRequired": false, "argOptional": false, "negatable": true, "incremental": false, "container": "scalar", "type": "boolean", "group": "- Code Obfuscation -", "details": "Use this option to alter the method control flow ..." } ] }

Auch eine eingegrenzte Form wird unterstützt. babel --help controlflow --format=json gibt denselben Umschlag aus, der aber nur die Option controlflow enthält (mit ihren details, die aus dem Ressourcenpaket der Optionen aufgelöst werden).

Verborgene und interne Optionen werden nie zurückgegeben.

Maschinenlesbares —version

babel --version --format=json gibt Informationen zur Laufzeit und zur Plattform aus:

--version --format=json
{ "product": "Babel Obfuscator", "version": "11.7.0.0", "fileVersion": "11.7.0.0", "runtime": ".NET 8.0.11", "platform": "win-x64" }

Das Feld platform verwendet unter .NET 5 und höher den RuntimeIdentifier (RID) von .NET und auf älteren Zielen eine künstlich gebildete Zeichenfolge der Form <os>-<arch> (net472-x64, unix-x64, …).

Abwärtskompatibilität

  • Der Standardwert von --format ist text. Die bisherige Textausgabe, die Exitcodes und das Verhalten bleiben unverändert, wenn kein neues Flag angegeben wird.
  • Ohne --strict-exit gibt der Prozess weiterhin 0 bei Erfolg und 1 bei jedem Fehlschlag zurück. Vorhandene CI-Prüfungen, die nach $? verzweigen, funktionieren weiter.
  • --quiet ist unabhängig und lässt sich verwenden, ohne die strukturierte Ausgabe einzuschalten.

Die strukturierte Ausgabe steht auch über die MSBuild-Aufgabe und das NuGet-Paket Babel.Obfuscator zur Verfügung, indem Sie dieselben Flags über die üblichen Eigenschaften und Argumente übergeben.

Last updated on