Guida

JavaScript deobfuscator online: dal codice offuscato al codice leggibile

Un JavaScript deobfuscator annulla i trucchi che rendono il codice difficile da leggere. Questo decomprime gli array di stringhe semplici, calcola le espressioni costanti, decodifica gli escape esadecimali e Unicode e rinomina i nomi in stile _0x, poi stampa il risultato con un'indentazione di 2 spazi. Lo fa leggendo il codice, non eseguendolo: il tuo JavaScript non viene mai eseguito né caricato, e una parte dell'offuscamento, elencata più sotto, resta com'è.


Come usare il JavaScript deobfuscator online

  1. Incolla il codice in JavaScript offuscato. Finché non incolli nulla, il campo mostra «Incolla qui il JavaScript offuscato…». Il limite è di 5.000.000 di caratteri.
  2. Scegli Opzioni di deoffuscamento per aprire quattro caselle, tutte attive di default: Decomprimi gli array di stringhe, Calcola le costanti, Decodifica escape esadecimali e Unicode e Rinomina le variabili esadecimali. Togli la spunta ai passaggi che non vuoi.
  3. Premi Deoffusca. La schermata Codice deoffuscato mostra il risultato come codice evidenziato in sola lettura.
  4. Leggi le etichette sopra il codice. Dicono che cosa è cambiato, per esempio «3 accessi all'array sostituiti», «5 espressioni semplificate», «2 letterali decodificati» o «4 variabili rinominate». Se non è stato applicato nulla, l'etichetta dice «Qui non c'era nulla da decomprimere o semplificare, quindi il codice è stato solo riformattato.»
  5. Premi Copia (diventa Copiato) oppure Scarica .js per salvare il codice come deoffuscato.js.
  6. Scegli Modifica il codice per tornare al tuo testo e rilanciarlo con altre opzioni.

Se il testo non è JavaScript valido, vedi «Questo non è JavaScript valido: errore di sintassi alla riga N, colonna M.» con la riga e la colonna reali, e non viene cambiato nulla.

Che cosa fa ogni opzione

I passaggi vengono eseguiti in questo ordine, quindi un accesso a un array può essere prima decompresso e poi unito ai vicini dal calcolo delle costanti. I nomi delle proprietà, le etichette e i nomi di import ed export non vengono mai rinominati, e la riga shebang all'inizio di uno script viene mantenuta.

Un esempio svolto

Questo input contiene un array di stringhe, un nome in stile esadecimale, una proprietà tra virgolette e una somma:

var _0x1a2b = ['hello', 'world', '\x68\x69']; function _0x3c(_0x4d) { console['log'](_0x1a2b[0] + ' ' + _0x1a2b[1], _0x4d, _0x1a2b[2]); } _0x3c(1 + 2 * 3);

Ed ecco il risultato:

function func1(arg1) { console.log("hello world", arg1, "hi"); } func1(7);

Le etichette dicono «3 accessi all'array sostituiti», «5 espressioni semplificate», «1 letterale decodificato» e «2 variabili rinominate». L'output reale è distribuito su più righe con un'indentazione di 2 spazi.

Che cosa può annullare e che cosa no

Lo strumento non esegue mai il tuo codice, quindi può annullare solo ciò che si vede nel testo. Tutto ciò che richiede prima l'esecuzione del programma resta com'è, invece di essere indovinato.

È un aiuto alla lettura, non uno scanner di sicurezza. Non controlla se il codice è dannoso e non può rendere sicuro un codice sconosciuto. Se uno script arriva da una fonte di cui non ti fidi, non eseguirlo solo perché l'output sembra in ordine.

Perché un array di stringhe ruotato resta com'è

Molti offuscatori spostano gli elementi di un array di stringhe con un breve ciclo prima della prima lettura, quindi list[0] non è il primo elemento che vedi nel sorgente. Mettere al suo posto gli elementi visibili inserirebbe il testo sbagliato nel tuo codice.

Per questo lo strumento decomprime un array solo quando ogni uso è list[3] con un numero nei limiti, oppure list.length. Se l'array viene passato a una funzione, ampliato con push, riassegnato o letto con un indice che non sa calcolare, resta esattamente com'è scritto.

Unminify JavaScript online e file grandi

Il codice minificato ma non offuscato torna riformattato con un'indentazione di 2 spazi, e l'etichetta dice che è cambiato solo il layout. È così che funziona l'unminify JavaScript qui: i nomi brevi come a e b non vengono rinominati, perché non sono in stile esadecimale e i nomi originali non esistono più. Per formattare codice già leggibile, o per abbellire anche JSON, HTML e CSS, usa Formattatore di Codice. Per ridurre di nuovo i fogli di stile c'è Minificatore CSS, e per decodificare una stringa Base64 trovata in uno script, Convertitore Base64.

Tutto gira in un Web Worker, quindi la pagina resta reattiva anche con file grandi. Espressioni molto lunghe o molto annidate possono essere troppo per la pagina: allora avvisa che il codice è troppo grande o troppo annidato per essere elaborato qui.


Domande frequenti

Come funziona il JavaScript deobfuscator?

Incolla il codice in «JavaScript offuscato» e premi «Deoffusca». Il codice viene trasformato in un albero sintattico, gli array di stringhe vengono decompressi, le costanti calcolate, gli escape decodificati, i nomi _0x rinominati e l'albero viene ristampato come codice indentato. Copialo oppure premi «Scarica .js» per salvare deoffuscato.js.

Esiste un JavaScript deobfuscator online?

Sì, questa pagina lo è. Gira nella scheda del tuo browser: il codice viene analizzato in un Web Worker e non viene mai caricato né eseguito. Gestisce array di stringhe semplici, espressioni costanti, escape esadecimali e Unicode e nomi in stile _0x. Non annulla ogni tipo di offuscamento, e l'elenco di ciò che resta com'è si trova in questa pagina.

Può gestire il codice di obfuscator.io?

Solo le parti che non richiedono di eseguire il codice. Gli escape esadecimali e Unicode vengono decodificati, le costanti calcolate e i nomi _0x rinominati in var1, func1 e arg1. L'array di stringhe che obfuscator.io ruota all'avvio con push(shift()), e le stringhe ottenute tramite una funzione di decodifica, restano come sono, perché annullarle significherebbe eseguire il codice.

Come si decodificano le stringhe esadecimali nel JavaScript offuscato?

Lascia attiva «Decodifica escape esadecimali e Unicode» in «Opzioni di deoffuscamento». Una stringa come \x68\u0069 diventa hi, e un numero esadecimale come 0x1f diventa 31. Vengono decodificati solo gli escape presenti nel codice; una stringa esadecimale che il programma costruisce mentre gira no.

Serve anche per fare unminify di JavaScript?

Sì, l'output viene sempre ristampato con un'indentazione di 2 spazi, quindi il codice minificato diventa leggibile anche quando non c'era nulla da decomprimere. In quel caso il risultato mostra «Qui non c'era nulla da decomprimere o semplificare, quindi il codice è stato solo riformattato.» I commenti dell'input vengono rimossi. I nomi minificati come a e b non si possono recuperare.

Lo strumento esegue il mio JavaScript?

No. Il codice viene solo letto e riscritto come testo. Non ci sono eval, chiamate a Function né esecuzione nella pagina o nel Web Worker, ed è per questo che gli array ruotati e le funzioni di decodifica restano come sono. Non è nemmeno un controllo di sicurezza: l'output è più facile da leggere, ma uno scanner o un verdetto sui malware è un altro lavoro.

Perché un array di stringhe è rimasto nell'output?

Un array viene decompresso solo quando ogni uso è un indice costante come list[3] o list.length. Se il codice lo ruota anche, lo passa a una funzione, vi aggiunge elementi o lo legge con un indice calcolato, l'array viene lasciato intatto, perché sostituire le letture in quel caso potrebbe dare la stringa sbagliata.

Che cosa fa «Rinomina le variabili esadecimali»?

Dà un nome leggibile ai nomi come _0x1a2b: var1 per le variabili, func1 per le funzioni e arg1 per i parametri. Ogni uso viene rinominato insieme, nessun nome già presente nel programma viene riutilizzato, e i nomi delle proprietà e le etichette non vengono toccati. Non può recuperare i nomi originali, che non sono nel file.

Quanto può essere grande il codice e che cosa succede in caso di errore?

Fino a 5.000.000 di caratteri. Se il codice non è JavaScript valido, vedi «Questo non è JavaScript valido: errore di sintassi alla riga N, colonna M.» con i numeri reali, e non viene cambiato nulla; il tuo testo resta nel campo così puoi correggere il punto.

Il mio codice viene caricato da qualche parte?

No. Analisi, riscrittura e stampa avvengono nel tuo browser, in un Web Worker, e nulla viene inviato a un server. Il codice non viene nemmeno eseguito.

Consigliati

Aiuta a mantenere gratuiti gli strumenti. ✨

Le immagini sono solo a scopo illustrativo. In qualità di Affiliato Amazon io ricevo un guadagno dagli acquisti idonei.