JavaScript Deobfuscator online: verschleierten Code lesbar machen
Ein JavaScript Deobfuscator macht rückgängig, was Code schwer lesbar macht. Dieser hier löst einfache String-Arrays auf, rechnet konstante Ausdrücke aus, dekodiert Hex- und Unicode-Escapes und benennt Namen im Stil von _0x um. Danach gibt er das Ergebnis mit 2 Leerzeichen Einrückung aus. Das alles geschieht durch Lesen, nicht durch Ausführen: Dein JavaScript wird weder ausgeführt noch hochgeladen, und manche Verschleierung bleibt bewusst unverändert.
JavaScript Deobfuscator online: so geht's
- Füge den Code in das Feld Verschleierter JavaScript-Code ein. Bis dahin steht dort „Verschleierten JavaScript-Code hier einfügen…“. Das Limit liegt bei 5.000.000 Zeichen.
- Wähle Optionen zur Deobfuskierung, um vier Kontrollkästchen zu öffnen, die alle standardmäßig an sind: String-Arrays auflösen, Konstanten auswerten, Hex- und Unicode-Escapes dekodieren und Hex-Variablen umbenennen. Nimm den Haken bei jedem Schritt heraus, den du nicht willst.
- Drücke Deobfuskieren. Der Bildschirm Deobfuskierter Code zeigt das Ergebnis als schreibgeschützten, farbig hervorgehobenen Code.
- Lies die Chips über dem Code. Sie zeigen, was sich geändert hat, zum Beispiel „3 Array-Zugriffe ersetzt“, „5 Ausdrücke vereinfacht“, „2 Literale dekodiert“ oder „4 Variablen umbenannt“. Wurde nichts angewendet, steht dort „Hier war nichts aufzulösen oder zu vereinfachen, deshalb wurde der Code nur neu formatiert.“
- Drücke Kopieren (die Schaltfläche wechselt zu Kopiert) oder .js herunterladen, um den Code als deobfuskiert.js zu speichern.
- Mit Code bearbeiten kommst du zurück zu deiner Eingabe und kannst mit anderen Optionen noch einmal starten.
Ist der Text kein gültiges JavaScript, erscheint „Das ist kein gültiges JavaScript: Syntaxfehler in Zeile N, Spalte M.“ mit der echten Zeile und Spalte. Es wird dann nichts verändert.
Was jede Option macht
- String-Arrays auflösen: Aus
var a = ['x', 'y']; log(a[1]);(oder'x|y'.split('|')) wirdlog("y");. Das Array wird entfernt, sobald es niemand mehr liest. - Konstanten auswerten:
1 + 2 * 3,'a' + 'b',!![],!0undobj['key']werden zu7,"ab",true,trueundobj.key. - Hex- und Unicode-Escapes dekodieren:
'\x68\u0069'und0x1fwerden zu"hi"und31. - Hex-Variablen umbenennen:
_0x1a2bund_0x3c4dwerden zuvar1,func1oderarg1, je nachdem, als was der Name deklariert ist.
Die Schritte laufen in dieser Reihenfolge. So kann ein Array-Zugriff zuerst aufgelöst und danach mit seinen Nachbarn zusammengefügt werden. Eigenschaftsnamen, Labels sowie Import- und Export-Namen werden nie umbenannt, und eine Shebang-Zeile am Anfang eines Skripts bleibt erhalten.
Ein durchgerechnetes Beispiel
Diese Eingabe enthält ein String-Array, einen Namen im Hex-Stil, eine Eigenschaft in Anführungszeichen und eine Summe:
var _0x1a2b = ['hello', 'world', '\x68\x69']; function _0x3c(_0x4d) { console['log'](_0x1a2b[0] + ' ' + _0x1a2b[1], _0x4d, _0x1a2b[2]); } _0x3c(1 + 2 * 3);
Das Ergebnis:
function func1(arg1) { console.log("hello world", arg1, "hi"); } func1(7);
Die Chips dazu lauten „3 Array-Zugriffe ersetzt“, „5 Ausdrücke vereinfacht“, „1 Literal dekodiert“ und „2 Variablen umbenannt“. Die echte Ausgabe ist über mehrere Zeilen mit 2 Leerzeichen Einrückung verteilt.
Was sich rückgängig machen lässt und was nicht
Das Tool führt deinen Code nie aus, kann also nur rückgängig machen, was im Text sichtbar ist. Was erst durch Ausführen des Programms entsteht, lässt es unangetastet, statt zu raten.
- Wird aufgelöst: einfache String-Arrays (
var a = ['x', 'y']und'x|y'.split('|')), die nur über einen festen Index gelesen werden. - Bleibt stehen: ein Array, das beim Start rotiert wird, der Trick
push(shift())von obfuscator.io. - Wird aufgelöst: konstante Rechnungen, zusammengesetzte Strings,
!![]und!0, außerdem Hex- und Unicode-Escapes und Hex-Zahlen sowie Namen im Stil von _0x, wie sie in der Ausgabe von obfuscator.io vorkommen. - Bleibt stehen: Strings, die über eine Lookup-Funktion dekodiert werden,
eval- oderFunction-Strings, die den eigentlichen Code verstecken, sowie Control-Flow-Flattening und VM-basierte Verschleierung. - Layout: Der Code wird mit 2 Leerzeichen Einrückung neu ausgegeben. Kommentare werden entfernt, und die ursprünglichen Variablennamen stehen nicht in der Datei.
Das Tool ist eine Lesehilfe, kein Sicherheitsscanner. Es prüft nicht, ob Code schädlich ist, und macht unbekannten Code nicht sicher. Stammt ein Skript aus einer Quelle, der du nicht traust, führe es nicht aus, nur weil die Ausgabe ordentlich aussieht.
Warum ein rotiertes String-Array stehen bleibt
Viele Obfuscatoren verschieben die Einträge eines String-Arrays mit einer kurzen Schleife, bevor es zum ersten Mal gelesen wird. Deshalb ist list[0] nicht der erste Eintrag, den du im Quelltext siehst. Würde man die sichtbaren Einträge einsetzen, stünde der falsche Text in deinem Code.
Das Tool löst ein Array deshalb nur auf, wenn jede Verwendung list[3] mit einer Zahl im gültigen Bereich oder list.length ist. Wird das Array an eine Funktion übergeben, mit push erweitert, zugewiesen oder mit einem Index gelesen, den das Tool nicht ausrechnen kann, bleibt es genau so, wie es geschrieben ist.
JavaScript Unminify online und große Dateien
Minimierter Code, der nicht verschleiert ist, kommt mit 2 Leerzeichen Einrückung neu formatiert zurück, und der Chip sagt, dass sich nur das Layout geändert hat. Das ist JavaScript Unminify im Alltag: Kurze Namen wie a und b werden nicht umbenannt, weil sie nicht im Hex-Stil geschrieben sind und die Originalnamen fehlen. Wenn du Code formatieren willst, der schon lesbar ist, oder auch JSON, HTML und CSS verschönern möchtest, nimm den Code-Formatierer. Um Stylesheets wieder zu verkleinern, gibt es CSS minifizieren, und einen Base64-Text, den du in einem Skript gefunden hast, dekodierst du mit dem Base64-Konverter.
Alles läuft in einem Web Worker, die Seite bleibt also auch bei großen Dateien bedienbar. Sehr lange oder tief verschachtelte Ausdrücke können der Seite zu viel werden. Dann erscheint die Meldung, dass der Code zu groß oder zu tief verschachtelt ist, um ihn hier zu verarbeiten.
Häufige Fragen
Wie funktioniert der JS Deobfuscator?
Füge den Code in „Verschleierter JavaScript-Code“ ein und drücke „Deobfuskieren“. Der Code wird in einen Syntaxbaum zerlegt, String-Arrays werden aufgelöst, Konstanten ausgerechnet, Escapes dekodiert und _0x-Namen umbenannt. Danach wird der Baum als eingerückter Code ausgegeben. Kopiere ihn oder speichere ihn mit „.js herunterladen“ als deobfuskiert.js.
Gibt es einen JavaScript Deobfuscator online?
Ja, diese Seite ist einer. Er läuft in deinem Browser-Tab: Der Code wird in einem Web Worker analysiert und weder hochgeladen noch ausgeführt. Er beherrscht einfache String-Arrays, konstante Ausdrücke, Hex- und Unicode-Escapes sowie Namen im Stil von _0x. Nicht jede Art der Verschleierung macht er rückgängig, und die Liste dessen, was stehen bleibt, steht auf dieser Seite.
Kann er Code von obfuscator.io deobfuskieren?
Nur die Teile, für die kein Code ausgeführt werden muss. Hex- und Unicode-Escapes werden dekodiert, Konstanten ausgerechnet und _0x-Namen in var1, func1 und arg1 umbenannt. Das String-Array, das obfuscator.io beim Start mit push(shift()) rotiert, und Strings, die über eine Decoder-Funktion geholt werden, bleiben stehen, weil man sie nur durch Ausführen des Codes auflösen könnte.
Wie dekodiere ich Hex-Strings in verschleiertem JavaScript?
Lass unter „Optionen zur Deobfuskierung“ den Haken bei „Hex- und Unicode-Escapes dekodieren“ gesetzt. Ein String wie \x68\u0069 wird zu hi, und eine Hex-Zahl wie 0x1f wird zu 31. Dekodiert werden nur Escapes im Code selbst, ein Hex-String, den das Programm erst zur Laufzeit zusammensetzt, nicht.
Funktioniert das auch als JavaScript Unminify?
Ja, die Ausgabe wird immer mit 2 Leerzeichen Einrückung neu ausgegeben, auch minimierter Code wird also lesbar, wenn nichts aufzulösen war. Dann zeigt das Ergebnis „Hier war nichts aufzulösen oder zu vereinfachen, deshalb wurde der Code nur neu formatiert.“ Kommentare in der Eingabe werden entfernt. Minimierte Variablennamen wie a und b lassen sich nicht wiederherstellen.
Führt das Tool mein JavaScript aus?
Nein. Der Code wird nur gelesen und als Text umgeschrieben. Es gibt weder eval noch einen Function-Aufruf noch Ausführung auf der Seite oder im Web Worker, und deshalb bleiben rotierte Arrays und Decoder-Funktionen unverändert. Es ist auch keine Sicherheitsprüfung: Die Ausgabe ist leichter zu lesen, aber ein Scanner oder ein Urteil zu Schadsoftware ist eine andere Aufgabe.
Warum blieb ein String-Array in der Ausgabe stehen?
Ein Array wird nur aufgelöst, wenn jede Verwendung ein fester Index wie list[3] oder list.length ist. Wird es im Code außerdem rotiert, an eine Funktion übergeben, mit push erweitert oder mit einem berechneten Index gelesen, bleibt es komplett unangetastet, weil das Ersetzen der Lesezugriffe dort den falschen String liefern könnte.
Was macht „Hex-Variablen umbenennen“?
Es gibt Namen wie _0x1a2b einen lesbaren Namen: var1 für Variablen, func1 für Funktionen und arg1 für Parameter. Jede Verwendung wird gemeinsam umbenannt, ein im Programm schon vorhandener Name wird nicht noch einmal vergeben, und Eigenschaftsnamen und Labels bleiben unberührt. Die Originalnamen kann es nicht wiederherstellen, denn sie stehen nicht in der Datei.
Wie groß darf der Code sein, und was passiert bei einem Fehler?
Bis zu 5.000.000 Zeichen. Ist der Code kein gültiges JavaScript, erscheint „Das ist kein gültiges JavaScript: Syntaxfehler in Zeile N, Spalte M.“ mit den echten Zahlen, und nichts wird verändert. Dein Text bleibt im Feld, damit du die Stelle korrigieren kannst.
Wird mein Code irgendwohin hochgeladen?
Nein. Parsen, Umschreiben und Ausgeben passieren in deinem Browser, in einem Web Worker, und nichts wird an einen Server gesendet. Der Code wird auch nie ausgeführt.
Empfohlen
-
CloudValley Webcam-Abdeckung (2er-Pack)Schieb sie zu, während du ein Skript liest, dem du nicht traust, und die Kamera bleibt privat.
-
YubiKey 5C NFC SicherheitsschlüsselEin Hardware-Schlüssel für die Logins, die du schützt, während du fremden Code durchstöberst.
-
Kingston IronKey Vault Privacy 50 verschlüsselter USB-StickBewahre verdächtige Samples, die du speicherst, auf einem verschlüsselten Stick mit PIN auf.
Hilft, die Tools kostenlos zu halten. ✨
Symbolbilder. Als Amazon-Partner verdiene ich an qualifizierten Verkäufen.