Cookies Diese Website speichert nur, was sie zum Funktionieren braucht. Derzeit gibt es hier weder Analyse noch Werbung, und nichts davon verfolgt Sie auf andere Websites. Datenschutzerklärung lesen

Auswahl anpassen
+92 312 8299940Kostenloses Angebot
Kostenloses Tool, nichts zu installieren

JavaScript Obfuscator
Umbenannt, verschlüsselt, läuft noch

Dieser JavaScript Obfuscator schreibt ein Programm so um, dass die Namen nichts mehr bedeuten und die Form des Codes nicht mehr auf die Logik zeigt. Hake die Transformationen an, behalte das Namenspräfix, das du magst, und der Obfuscator prüft, dass die Ausgabe noch parst. Nichts, was du einfügst, verlässt den Browser.

  • KostenlosPreis
  • 4Transformationen
  • NieFührt Code aus
  • KeineUploads

JavaScript Obfuscator

Code einfügen oder Dateien ablegen — nichts wird hochgeladen

oder Strg + Enter drücken

Verschleiertes Ergebnis

 
Original
—
Verschleiert
—
Größenänderung
—
Umbenannte Namen
—
Versteckte Strings
—
Dauer
—

Bereit. Füge dein JavaScript ein und drücke Verschleiern.

Ihr Browser liest und schreibt Ihren Code hier um, in diesem Tab. Wir laden nichts hoch, speichern nichts und protokollieren nichts.
Die Kurzfassung

Was ein JavaScript Obfuscator macht

Quellcode gibt zwei Dinge auf einmal preis: was ein Programm tut und wie es das tut. Deshalb bekommt ein Leser, der ein Modul erhält, die Überlegung gratis dazu.

Ein Obfuscator trennt die beiden. Dieser JavaScript Obfuscator behält das Verhalten und nimmt die Namen, die String-Literale und die einfachen Zahlen weg.

Er arbeitet vom Syntaxbaum aus, nicht vom Text. Weil der Baum schon weiß, welcher Name eine Variable und welcher eine Eigenschaft ist, kann der Umbenenner pro Gültigkeitsbereich arbeiten statt global.

Vier Transformationen sitzen hinter einem Editor, und jede ist ein Kästchen. Also kannst du ein Programm allein umbenennen oder alle laufen lassen für ein viel härteres Lesen.

Nichts läuft und nichts wird hochgeladen. Da der Leser das Modul nur parst und umschreibt, unterscheidet sich ein Programm unter einer Geheimhaltungsklausel hier nicht von einem öffentlichen.

Wie ein JavaScript Obfuscator ein Skript umschreibt

Der erste Durchgang baut den Syntaxbaum, genau wie ein Validator. Das Regelwerk ist ECMA-262, also passt der Baum zu dem, was eine Engine bauen würde.

Schema einer Funktion durch vier Verschleierungsdurchgänge, von lesbarem Code zu umbenannt und kodiert, gleiches Verhalten
Vier Durchgänge, ein Baum jedes Mal umgeschrieben, und ein Verhalten, das sich nicht bewegt.

Vom Baum aus geht der Umbenenner jeden Bereich der Reihe nach durch. Ein Parameter, ein Local, ein Funktionsname und ein Klassenname bekommen jeweils einen neuen undurchsichtigen Namen aus einem Bereich, der nicht mit einem schon benutzten Namen kollidieren kann.

Zwei Dinge bleiben absichtlich unberührt. Eine Eigenschaft eines Objekts ist keine Variable, also behält obj.userName seine Schreibweise. Ein Name, der über das Modul hinausreicht, etwa ein exportierter Name oder ein Global, das die Seite aufruft, bleibt ebenfalls, außer du schaltest das Umbenennen der obersten Ebene ein.

Jeder Durchgang erzeugt seinen eigenen Baum, statt den Text zu bearbeiten. Der Schreiber läuft erst am Ende, also wird ein Programm, das nicht parst, nie halb umgeschrieben.

Der letzte Schritt parst die Ausgabe erneut. Weil der Obfuscator sein eigenes Ergebnis zurückliest, bevor er es zeigt, gibt ein Durchgang, der ungültigen Code erzeugte, deine Originaldatei zurück.

Die vier Transformationen, in der Reihenfolge, in der sie laufen

Das Umbenennen läuft zuerst. Parameter, Locals, Funktions- und Klassennamen werden kurze undurchsichtige Namen wie _0x1a2b, mit Bereich, sodass zwei Funktionen denselben Namen sicher nutzen. Exportierte und Namen der obersten Ebene bleiben, außer du verlangst sie auch.

Der String-Durchgang läuft danach. Jedes String-Literal wandert in ein Array oben, und jede Nutzung wird eine Suche per Index durch einen kleinen Accessor, der die Reihenfolge dreht. Weil die Strings nicht mehr neben dem Code stehen, der sie liest, findet eine Suche nach einer Nachricht nichts Nützliches mehr.

Die Zahlenkodierung folgt. Jede einfache Ganzzahl wird hexadezimal gedruckt, also wird 1000 zu 0x3e8. Der Wert ändert sich nicht; die Ziffern lesen sich nur nicht mehr als vertraute Zahl.

Das Kompaktieren kommt zuletzt. Das ganze Modul läuft durch den Minifier, der die Kommentare und den Abstand streicht, also ist das Ergebnis ein dichter Block statt ordentlicher Zeilen.

Was Verschleierung nicht tut

Sie verbirgt deinen Code nicht vor einem entschlossenen Leser. Jede Transformation hier ist im Prinzip umkehrbar, und für die meisten gibt es ein Werkzeug.

Die verschleierte Ausgabe neben der Quelle, mit geänderten Namen, Strings und Zahlen und dem Ergebnis, das noch parst
Die Namen, Strings und Zahlen werden umgeschrieben; das Verhalten und der Rückgabewert bleiben gleich.

Sie hält kein Geheimnis sicher. Ein Schlüssel, der in ein Browser-Skript kompiliert ist, ist ein Schlüssel, den der Browser hat, und jeder, der die Seite lädt, kann ihn lesen. Weil Verschleierung nur den Aufwand hebt, gehört ein API-Schlüssel auf einen Server.

Sie stoppt das Kopieren nicht. Jemand kann eine umgeschriebene Datei immer noch speichern, ausliefern und ausführen. Die Lizenz und der Vertrag sind es, die das regeln, und keines ist ein Build-Schritt.

Sie macht ein Modul nicht schneller, und sie kann es langsamer machen. Weil die String-Suchen zur Laufzeit etwas Arbeit kosten, ist der Tausch Lesbarkeit gegen ein paar Millisekunden.

Sie schützt auch kein Skript auf dem Server. Wer Zugriff auf die Maschine hat, hat die Originaldatei, egal was der Browser bekam.

Das Namenspräfix und die Ausgabe gültig halten

Das Namenspräfix ist die eine Einstellung jenseits der Kästchen, und es gibt sie, um eine Kollision zu vermeiden. Ein Generator, der einen Helfer namens a oder b ausgibt, kann mit einem Global der Seite kollidieren, also nimmt ein kurzes, eigenes Präfix wie _0x das Risiko weg.

Obfuscator-Einstellungen mit vier Transformations-Kästchen und einem Namenspräfix, der Ausgabegröße und der Zahl der Umbenennungen darunter
Vier Kästchen und ein Präfix, mit einer Größenzeile, die sagt, was die Transformation kostete.

Das Umbenennen der obersten Ebene bleibt standardmäßig aus. Eingefügter Code ist oft ein klassisches Modul, wo eine Funktion der obersten Ebene eine Eigenschaft von window wird, die eine andere Datei beim Namen ruft, und sie dort umzubenennen würde einen Aufrufer brechen, den der Obfuscator nicht sieht.

In einem Modul oder einer IIFE erreicht nichts von außen diese Namen, also ist das Umbenennen der obersten Ebene dort sicher und verbirgt weit mehr.

Jeder Lauf endet mit einem Parsen seiner eigenen Ausgabe. Weil der Obfuscator sein eigenes Ergebnis zurückliest, bevor er es zeigt, meldet er eine Transformation, die ungültigen Code erzeugte, statt den Code zu übergeben.

Video-Anleitung

So verschleierst du JavaScript: das Tool in Aktion

Ein kurzes Video zeigt jeden Schritt. Wählen Sie dann unten Ihre Sprache und schalten Sie bei Bedarf Untertitel ein.

Schritt für Schritt

So nutzt du den JavaScript Obfuscator

Vier Schritte, und keiner braucht ein Konto.

  • 1

    Füge das Modul ein

    Füge eine ganze Datei oder ein Modul ein. Weil der Leser einen Syntaxbaum baut, musst du vorher eine Erweiterung wie JSX oder eine Typ-Annotation wegkompilieren.

  • 2

    Hake die Transformationen an

    Dann wähle, welche Durchgänge laufen. Locals umbenennen und Strings verstecken sind das sichere Paar; das Umbenennen der obersten Ebene ist das, was du auslässt, wenn eine andere Datei deine Namen ruft.

  • 3

    Setze das Namenspräfix

    Dann gib den erzeugten Namen ein kurzes, eigenes Präfix wie _0x. So kann ein Global der Seite nicht mit einem erzeugten Helfer kollidieren.

  • 4

    Prüfe die Größe, dann teste

    Zuletzt lies die Größenzeile und kopiere die Ausgabe. Danach führe sie auf einer echten Seite aus, denn nur das Programm bei seiner Arbeit beweist, dass ein Umbenennen sicher ist.

Warum diese Seite

Warum diesen JavaScript Obfuscator nutzen

Fünf Gründe, und jeder dreht sich um das Lesen statt um das Schloss.

  • Das Umbenennen arbeitet pro Bereich

    Weil der Umbenenner vom Syntaxbaum aus arbeitet, können zwei Funktionen denselben kurzen Namen ohne Konflikt nutzen. Also kommt eine große Datei klein und korrekt heraus statt kaputt.

  • Jeder Durchgang ist eine Wahl

    Vier Kästchen statt eines einzigen Knopfs. Daher kannst du ein Modul allein umbenennen, was die Transformation mit dem geringsten Risiko und dem meisten Nutzen ist.

  • Der Obfuscator parst seine eigene Ausgabe erneut

    Weil der letzte Schritt sein eigenes Ergebnis zurückliest, meldet er eine Transformation, die ungültigen Code erzeugte. Also wird ein kaputter Build hier gefangen und nicht in der Browser-Konsole.

  • Nichts wird hochgeladen

    Die ganze Umschreibung läuft in diesem Tab. Also unterscheidet sich eine Kundendatei unter einer Geheimhaltungsklausel hier nicht von einer öffentlichen.

  • Die Größenzeile ist ehrlich

    Verschleierung macht ein Programm meist größer, und die Zeile sagt um wie viel. Also ist der Tausch sichtbar, bevor du dich darauf festlegst.

Faustregeln

Gewohnheiten, die verschleierten Code am Laufen halten

Sechs Gewohnheiten, die eine umgeschriebene Datei in Produktion am Laufen halten.

  • Halte die lesbare Datei in der Versionsverwaltung So läuft der Build nur in eine Richtung. Weil niemand eine verschleierte Datei von Hand bearbeiten sollte, hat ein Repository, das nur die Ausgabe hält, seine Quelle verloren.
  • Verschleiere nie eine Bibliothek, die du auslieferst Ein Nutzer erreicht deine Exporte beim Namen, also bricht ein Umbenennen jeden Aufrufer. Daher behält ein veröffentlichtes Paket seine echten Namen und seine Typen.
  • Lass das Umbenennen der obersten Ebene standardmäßig aus Einen Namen der obersten Ebene umzubenennen bricht jede andere Datei, die ihn ruft, und ein klassisches Modul legt seine Funktionen auf window, wo Aufrufer sie erreichen. Da das nur zur Laufzeit auftaucht, halte es optional und reserviere es für Module.
  • Halte die Source Map aus der Produktion Eine Source Map ist ein perfektes Rückgängig, und eine neben dem Programm auszuliefern hebt die ganze Arbeit auf. Also lagere die Map für Fehlerberichte und liefere sie von nirgends Öffentlichem.
  • Teste nach dem Verschleiern, nicht davor Nur das Modul, das das Richtige tut, beweist, dass ein Umbenennen sicher ist. Daher gehört der Durchlauf auf die Ausgabe statt auf die Eingabe.
  • Sag in den Build-Notizen, was es ist Ein künftiger Betreuer, der auf eine verschleierte Datei trifft, sollte nicht raten müssen. Also spart eine Zeile im Readme darüber, welche Durchgänge laufen, einen Nachmittag.
Achtung hier

Sechs Arten, wie Verschleierung einen Build bricht

Jede davon besteht ein Parsen und scheitert in Produktion.

  • Sie als Sicherheit behandeln

    Achtung hier. Jede Transformation ist umkehrbar, und ein entschlossener Leser holt die Logik zurück. Also hebt Verschleierung die Kosten des Lesens, und sie schützt für sich allein nichts.

  • Einen Namen umbenennen, den jemand anderes liest

    Ein Global, das die Seite ruft, ein Callback, den ein Host übergibt, oder ein Name in einer serverseitigen Vorlage. Weil die Außenwelt noch die alte Schreibweise nutzt, landet der Aufruf auf nichts.

  • Namen umbenennen, die eine andere Datei ruft

    Eine Funktion der obersten Ebene, die eine andere Datei beim Namen ruft, existiert unter diesem Namen nicht mehr. Also scheitert der Aufruf zur Laufzeit, lange nachdem das Umbenennen gut aussah.

  • Eine Source Map auf dem Server lassen

    Eine Anfrage an die Map macht den ganzen Build rückgängig. Weil ein Debugger die Map liest, ist sie ein vollständiges und genaues Rückgängig.

  • Darauf vertrauen, dass sie ein Geheimnis verbirgt

    Ein Schlüssel oder ein Token im Modul ist noch im Programm; der Browser muss ihn lesen, um ihn zu nutzen. Daher hebt Verschleierung nur den Aufwand, ihn zu finden, und sonst nichts, also gehört das Geheimnis auf einen Server.

  • Verschleiern statt minifizieren

    Die beiden sind keine Wahl zwischen besser und schlechter, denn sie zielen auf Verschiedenes. Führe den Minifier für Bytes aus und den Obfuscator für den Leseaufwand, in dieser Reihenfolge.

Fragen

Fragen zum JavaScript Obfuscator

Ist dieser JavaScript Obfuscator kostenlos?

Ja. Es gibt kein Konto, kein Limit und keine Bezahlstufe. Also verschleierst du so viele Skripte, wie du willst.

Macht die Verschleierung meinen Code sicher?

Nein, und kein Werkzeug kann das. Sie erschwert das Lesen eines Moduls und verbirgt nichts vor einem entschlossenen Leser. Deshalb gehört ein Geheimnis auf einen Server, nie in ein Programm im Browser.

Was ändert sie wirklich?

Höchstens vier Dinge: was aus den Namen wird, wo die Strings liegen, wie die Zahlen gedruckt werden und ob der Abstand entfernt wird. Das Verhalten bleibt genau so, wie es war.

Führt sie meinen Code aus?

Niemals. Der Obfuscator liest und schreibt das Modul um und ruft keine Funktion auf. Also kann ein unbekannter Schnipsel nicht handeln, während du ihn offen hast.

Funktioniert die Ausgabe noch?

Sie parst, und der letzte Schritt beweist das. Das Verhalten ist eine andere Frage, also lass die Ausgabe durch deine eigenen Tests laufen, bevor sie ausgeliefert wird.

Soll ich Namen der obersten Ebene umbenennen?

Nur wenn nichts außerhalb des Skripts sie aufruft. In einem Modul oder einer IIFE ist das sicher; ein klassisches Skript, dessen Funktionen an window hängen, ist es nicht, denn eine andere Datei ruft sie beim Namen.

Macht sie das Skript kleiner?

Meist nicht; Strings in ein Array zu schieben und Namen auszuschreiben kann Bytes hinzufügen. Die Größenzeile meldet die Änderung ohnehin, und das Kompaktieren holt etwas davon zurück.

Was bewirkt das Kodieren der Zahlen als Hex?

Es druckt jede normale Ganzzahl hexadezimal, also zeigt 1000 als 0x3e8. Der Wert ist identisch; die Ziffern lesen sich nur nicht mehr auf den ersten Blick als vertraute Zahl.

Warum gibt es ein Feld für das Namenspräfix?

Weil ein erzeugter Helfer namens a mit einem Global der Seite kollidieren kann. Also nimmt ein kurzes, eigenes Präfix dieses Risiko weg.

Kann ich die Verschleierung rückgängig machen?

Von hier aus nicht. Ein Leser kann eine umbenannte Datei von Hand ordnen und ein String-Array zurückfalten, aber keine Aufgabe ist automatisch. Genau deshalb bremst sie einen Leser.

Wird mein Skript irgendwohin hochgeladen?

Nein. Die ganze Umschreibung läuft in diesem Browser-Tab. Also bleibt eine Kundendatei unter einer Geheimhaltungsklausel auf deinem Rechner.

Kann ich einen Ausschnitt statt eines ganzen Skripts einfügen?

Ja. Eine einzige Funktion geht, und die Umbenennung bleibt in ihr. Also kannst du einen Schnipsel testen, bevor du dich auf das ganze Skript festlegst.

Verarbeitet er JSX oder TypeScript?

Nicht direkt, denn beide fügen Syntax über JavaScript hinaus hinzu. Also führe zuerst den Compiler aus und verschleiere, was er ausgibt.

Brauche ich eine Source Map?

Für Fehlerberichte ja, und sie sollte privat bleiben. Weil eine ausgelieferte Map ein perfektes Rückgängig ist, halte sie in deinem eigenen Fehlertracker und nirgends öffentlich.

Ist das dasselbe wie Minifizieren?

Nein. Ein Minifier entfernt Leerraum und kürzt lokale Namen in einem Skript. Ein Obfuscator geht weiter und formt den Code um, und das kostet mehr Bytes.

In welcher Reihenfolge soll ich sie ausführen?

Zuerst minifizieren, dann verschleiern, dann validieren. Weil der Validator Zeilen benennt, prüfe die lesbare Datei, bevor eine Transformation sie berührt.

Kann er einen ganzen Ordner verschleiern?

Auf dieser Seite nicht. Ein Skript nach dem anderen ist hier die Regel, und ein Build-Werkzeug ist der richtige Ort für einen Ordner.

Funktioniert er auf dem Handy?

Ja. Die Felder stapeln sich und die Optionen brechen in Zeilen um. Also ist ein schneller Lauf abseits des Schreibtischs möglich, obwohl eine lange Datei mit Tastatur leichter ist.

Kann ich das Ergebnis herunterladen?

Ja. Der Download speichert die Ausgabe als JavaScript-Datei, also legst du sie ohne Kopieren und Einfügen in einen Build-Schritt.

Brauche ich ein Konto oder eine Erweiterung?

Nein. Es gibt keine Anmeldung, kein Plugin und keine Erweiterung. Also schließt du den Tab, wenn der Build fertig ist.

Weiter

Werkzeuge, die zu diesem passen

Vier Seiten, zu denen dieselbe Arbeit meist führt.

  • JavaScript-Minifier

    Führe diesen zuerst aus. Weil ein Minifier Bytes entfernt und die Namen in Ruhe lässt, ist er die billigere Hälfte desselben Build-Schritts.

    Tool öffnen →
  • JavaScript-Validator

    Dann prüfe, dass Eingabe und Ausgabe parsen. Weil ein Syntaxfehler das ganze Skript stoppt, gehört diese Prüfung vor alles, was ausgeliefert wird.

    Tool öffnen →
  • Code-Verschönerer

    Wenn dich eine kompaktierte oder umbenannte Datei von anderswo erreicht, legt diese Seite sie wieder aus. Da eine einzige dichte Zeile mit dem Auge schwer zu folgen ist, ist ein Neu-Einrücken der erste Schritt.

    Tool öffnen →
  • CSS-Minifier

    Die Stylesheet-Hälfte desselben Builds. Weil ein Browser jeden Kommentar und Zeilenumbruch lädt, verdient das Blatt dieselbe Behandlung.

    Tool öffnen →

Erschwere das Lesen deines Skripts

Hake die Transformationen an und füge das Skript ein. Nichts läuft und nichts wird hochgeladen, und der Obfuscator prüft jeden Durchgang, bevor er das Ergebnis übergibt. Also behandle ihn als Bremsschwelle, nicht als Schloss, denn seine Arbeit macht er gut.