JavaScript-Code verschleiern

JavaScript einfügen, und das Werkzeug gibt dasselbe Programm zurück: lokale Namen umbenannt, Zeichenketten als \xNN- und \uNNNN-Escapes, Punkt-Zugriffe in Klammernotation, Kommentare entfernt. Der Code läuft weiter mit demselben Ergebnis; verarbeitet wird alles in diesem Tab, hochgeladen wird nichts.

Das ist Verschleierung gegen beiläufiges Lesen, keine Verschlüsselung. Die Logik bleibt enthalten; verlassen Sie sich also nicht darauf, API-Schlüssel oder Geschäftsregeln zu verstecken, und behalten Sie das lesbare Original — die Ausgabe von Hand zu debuggen ist mühsam.

  1. Skript in das Textfeld einfügen oder tippen; die verschleierte Fassung ersetzt die vorherige Ausgabe. Nach jeder Änderung Obfuscate JavaScript drücken oder Strg/⌘+Enter verwenden.
  2. Mit Kopieren das Ergebnis übernehmen, mit Leeren beide Bereiche für das nächste Skript zurücksetzen.
  3. Die Ausgabe vor dem Ausliefern einmal mit einem kleinen Beispiel und bekanntem Ergebnis ausführen; die Umformung erhält das Verhalten, die Prüfung kostet eine Minute.
  4. Die Originaldatei behalten: Die verschleierte Kopie ist für die Verteilung, bearbeitet wird weiter die lesbare Quelle.

Was der Obfuscator ändert — und wovor er nicht schützt

Was der Obfuscator ändert

Kommentare werden entfernt, Zeilenumbrüche bleiben stehen — eine gelöschte //-Notiz kann also nie die nächste Zeile verschlucken. Innerhalb des Schnipsels deklarierte Bezeichner — Variablen, Funktionen, Parameter, Klassen, catch-Bindungen — werden über die Scope-Kette in kurze generierte Namen umbenannt; Namen von außen, auch Globals, bleiben unverändert.

Zeichenketten werden Zeichen für Zeichen als \xNN- oder \uNNNN-Escapes neu geschrieben; eine "use strict"-Direktive bleibt unangetastet. Punkt-Zugriffe werden zu Klammerzugriffen: console.log wird zu console["\x6c\x6f\x67"], optionales Verketten folgt derselben Regel (a?.b wird a?.["b"]). Nach new und import bleibt die Syntax stehen, #private Felder werden nicht berührt.

Was es nicht ist

Weder Verschlüsselung noch Minifizierung: Verschleierte Strings werden länger, nicht kürzer, und ein entschlossener Leser kann der Logik weiter folgen. Es geht darum, beiläufiges Kopieren zu erschweren, nicht Rekonstruktion unmöglich zu machen.

Ein einzelner Durchlauf über den Code, kein Bundler: Importe werden nicht aufgelöst, moderne Syntax wird nicht transpiliert, am Ladevorgang ändert sich nichts. Dasselbe Skript zweimal eingefügt ergibt unterschiedliche Ausgaben, weil die generierten Namen vom Inhalt abhängen — gut zum Verteilen, unbrauchbar zum Vergleichen von Builds.

Getestetes Verhalten

Die Ausgabe ist darauf getestet, dieselben Werte wie die Eingabe zurückzugeben: Klassen, Arrow-Funktionen, Template-Literale mit verschachtelten ${}-Ausdrücken, async/await, Spread, optionales Verketten, Nullish Coalescing und Regex-Literale laufen durch. Modulcode behält seine import- und export-Namen und lädt weiterhin als Modul.

Skripte mit eval oder with werden nicht umbenannt — das Umbenennen auszulassen ist dort die einzig sichere Wahl —, Escaping und Klammerumwandlung gelten trotzdem. Eine Datei mit rund 80 KB läuft in wenigen Zehnmillisekunden; ein bereits verschleiertes Skript kann erneut verschleiert werden.

Zuletzt verwendet: