Cookie Questo sito conserva solo ciò che serve per funzionare. Al momento non ci sono né statistiche né pubblicità, e nulla di quanto trovi qui ti segue su altri siti. Leggi l’informativa sulla privacy

Scegli cosa consentire
+92 312 8299940Preventivo gratuito
Strumento gratis, niente da installare

JavaScript obfuscator
Rinominato, codificato, ancora funzionante

Questo JavaScript obfuscator riscrive un programma così che i nomi smettono di significare qualcosa e la forma del codice smette di indicare la logica. Spunta le trasformazioni, tieni il prefisso del nome che preferisci, e l'obfuscator controlla che l'output si analizzi ancora. Niente di ciò che incolli lascia il browser.

  • GratisPrezzo
  • 4Trasformazioni
  • MaiEsegue il codice
  • NessunoCaricamenti

JavaScript obfuscator

Incolla il codice o trascina i file — nulla viene caricato

oppure premi Ctrl + Invio

Risultato offuscato

 
Originale
—
Offuscato
—
Variazione di dimensione
—
Nomi rinominati
—
Stringhe nascoste
—
Tempo
—

Pronto. Incolla il tuo JavaScript e premi Offusca.

Il tuo browser legge e riscrive il codice qui, in questa scheda. Non carichiamo nulla, non salviamo nulla e non registriamo nulla.
La versione breve

Cosa fa un JavaScript obfuscator

Il codice sorgente consegna due cose insieme: cosa fa un programma e come lo fa. Perciò un lettore che riceve un modulo ottiene il ragionamento gratis.

Un obfuscator separa le due. Questo JavaScript obfuscator mantiene il comportamento e toglie i nomi, le stringhe letterali e i numeri semplici.

Lavora dall'albero di sintassi, non dal testo. Poiché l'albero sa già quale nome è una variabile e quale una proprietà, il rinominatore può lavorare per ambito invece che globalmente.

Quattro trasformazioni vivono dietro un solo editor, e ognuna è una casella. Perciò puoi rinominare un programma da solo, o eseguirle tutte per una lettura molto più dura.

Niente si esegue e niente si carica. Poiché il lettore solo analizza e riscrive il modulo, un programma sotto una clausola di riservatezza non è diverso qui da uno pubblico.

Come un JavaScript obfuscator riscrive uno script

Il primo passaggio costruisce l'albero di sintassi, proprio come un validatore. Il regolamento è ECMA-262, perciò l'albero combacia con quello che un motore costruirebbe.

Schema di una funzione attraverso quattro passaggi di offuscamento, da codice leggibile a rinominato e codificato, stesso comportamento
Quattro passaggi, un albero riscritto ogni volta, e un comportamento che non si muove.

Dall'albero, il rinominatore percorre ogni ambito a turno. Un parametro, un locale, un nome di funzione e un nome di classe ricevono ciascuno un nuovo nome opaco, preso da un intervallo che non può scontrarsi con un nome già in uso.

Due cose restano apposta intatte. Una proprietà di un oggetto non è una variabile, perciò obj.userName mantiene la sua grafia. Un nome che va oltre il modulo, come un nome esportato o un globale che la pagina chiama, resta anch'esso, a meno che tu attivi la rinomina di primo livello.

Ogni passaggio produce il proprio albero invece di modificare il testo. Lo scrittore gira solo alla fine, perciò un programma che non si analizza non viene mai riscritto a metà.

L'ultimo passo rianalizza l'output. Poiché l'obfuscator rilegge il proprio risultato prima di mostrarlo, un passaggio che ha prodotto codice non valido ti restituisce il file originale.

Le quattro trasformazioni, nell'ordine in cui girano

La rinomina gira per prima. Parametri, locali, nomi di funzione e di classe diventano brevi nomi opachi come _0x1a2b, con ambito perché due funzioni usino lo stesso nome in sicurezza. I nomi esportati e di primo livello restano a meno che tu non li chieda.

Il passaggio delle stringhe gira dopo. Ogni stringa letterale passa in un array in cima, e ogni uso diventa una ricerca per indice tramite un piccolo accessore che ruota l'ordine. Poiché le stringhe non sono più accanto al codice che le legge, una ricerca di un messaggio smette di trovare qualcosa di utile.

La codifica dei numeri segue. Ogni intero semplice è stampato in esadecimale, così 1000 diventa 0x3e8. Il valore non cambia; le cifre smettono solo di leggersi come un numero familiare.

Il compattare viene per ultimo. Tutto il modulo passa per il minificatore, che toglie i commenti e la spaziatura, perciò il risultato è un blocco denso invece di righe ordinate.

Cosa l'offuscamento non fa

Non nasconde il tuo codice a un lettore deciso. Ogni trasformazione qui è in linea di principio reversibile, e per la maggior parte esiste uno strumento.

L'output offuscato accanto alla sorgente, con nomi, stringhe e numeri cambiati e il risultato che si analizza ancora
I nomi, le stringhe e i numeri sono riscritti; il comportamento e il valore restituito restano gli stessi.

Non tiene al sicuro un segreto. Una chiave compilata in uno script del browser è una chiave che il browser ha, e chiunque carichi la pagina può leggerla. Poiché l'offuscamento alza solo lo sforzo, una chiave API va su un server.

Non ferma la copia. Qualcuno può ancora salvare un file riscritto, servirlo ed eseguirlo. La licenza e il contratto sono ciò che affronta questo, e nessuno dei due è un passaggio di build.

Non rende un modulo più veloce, e può renderlo più lento. Poiché le ricerche di stringhe costano un po' di lavoro a runtime, lo scambio è leggibilità contro qualche millisecondo.

Non protegge nemmeno uno script sul server. Chiunque abbia accesso alla macchina ha il file originale, qualunque cosa il browser abbia ricevuto.

Il prefisso del nome e mantenere valido l'output

Il prefisso del nome è l'unica impostazione oltre le caselle, ed esiste per evitare uno scontro. Un generatore che emette un aiutante chiamato a o b può scontrarsi con un globale della pagina, perciò un prefisso corto e distintivo come _0x toglie il rischio.

Impostazioni dell'obfuscator con quattro caselle di trasformazione e un prefisso del nome, la dimensione dell'output e il conteggio delle rinomine sotto
Quattro caselle e un prefisso, con una riga della dimensione che dice quanto è costata la trasformazione.

La rinomina di primo livello resta spenta di default. Il codice incollato è spesso un modulo classico, dove una funzione di primo livello diventa una proprietà di window che un altro file chiama per nome, e rinominarla lì romperebbe un chiamante che l'obfuscator non vede.

Dentro un modulo o una IIFE niente dall'esterno raggiunge quei nomi, perciò attivare lì la rinomina di primo livello è sicuro e nasconde molto di più.

Ogni esecuzione finisce con un'analisi del proprio output. Poiché l'obfuscator rilegge il proprio risultato prima di mostrarlo, segnala una trasformazione che ha prodotto codice non valido invece di consegnare il codice.

Guida video

Guarda il JavaScript obfuscator in azione

Un breve video mostra ogni passaggio. Poi scegli la tua lingua qui sotto e attiva i sottotitoli se vuoi.

Passo dopo passo

Come usare il JavaScript obfuscator

Quattro passi, e nessuno richiede un account.

  • 1

    Incolla il modulo

    Incolla un intero file o un modulo. Poiché il lettore costruisce un albero di sintassi, devi prima compilare via un'estensione come JSX o un'annotazione di tipo.

  • 2

    Spunta le trasformazioni

    Poi scegli quali passaggi girano. Rinominare i locali e nascondere le stringhe sono la coppia sicura; la rinomina di primo livello è quella da lasciare spenta quando un altro file chiama i tuoi nomi.

  • 3

    Imposta il prefisso del nome

    Poi dai ai nomi generati un prefisso corto e distintivo come _0x. Così un globale della pagina non può scontrarsi con un aiutante generato.

  • 4

    Controlla la dimensione, poi testa

    Infine, leggi la riga della dimensione e copia l'output. Dopo, eseguilo su una pagina vera, perché solo il programma che fa il suo lavoro dimostra che una rinomina è sicura.

Perché questa pagina

Perché usare questo JavaScript obfuscator

Cinque motivi, e ognuno riguarda la lettura più che il lucchetto.

  • La rinomina lavora per ambito

    Poiché il rinominatore lavora dall'albero di sintassi, due funzioni possono usare lo stesso nome corto senza scontro. Perciò un file grande esce piccolo e corretto invece che rotto.

  • Ogni passaggio è una scelta

    Quattro caselle invece di un solo pulsante. Perciò puoi rinominare un modulo da solo, che è la trasformazione dal rischio minore e dal beneficio maggiore.

  • L'obfuscator rianalizza il proprio output

    Poiché l'ultimo passo rilegge il proprio risultato, segnala una trasformazione che ha prodotto codice non valido. Perciò un build rotto si coglie qui invece che nella console del browser.

  • Niente si carica

    Tutta la riscrittura gira in questa scheda. Perciò un file di un cliente sotto una clausola di riservatezza non è diverso qui da uno pubblico.

  • La riga della dimensione è onesta

    L'offuscamento di solito rende un programma più grande, e la riga dice di quanto. Perciò lo scambio è visibile prima che tu ti impegni su di esso.

Regole pratiche

Abitudini che tengono funzionante il codice offuscato

Sei abitudini che tengono un file riscritto funzionante in produzione.

  • Tieni il file leggibile nel controllo di versione Così il build gira in una sola direzione. Poiché nessuno dovrebbe modificare a mano un file offuscato, un repository che tiene solo l'output ha perso la sua sorgente.
  • Non offuscare mai una libreria che distribuisci Un consumatore raggiunge i tuoi export per nome, perciò una rinomina rompe ogni chiamante. Da qui un pacchetto pubblicato mantiene i suoi nomi veri e i suoi tipi.
  • Lascia spenta di default la rinomina di primo livello Rinominare un nome di primo livello rompe ogni altro file che lo chiama, e un modulo classico mette le sue funzioni su window dove i chiamanti le raggiungono. Poiché ciò appare solo a runtime, tienila opzionale e riservala ai moduli.
  • Tieni la source map fuori dalla produzione Una source map è un annullamento perfetto, e distribuirne una accanto al programma annulla tutto il lavoro. Perciò conserva la map per i report di crash e servila da nessun posto pubblico.
  • Testa dopo l'offuscamento, non prima Solo il modulo che fa la cosa giusta dimostra che una rinomina è sicura. Perciò la prova va sull'output invece che sull'input.
  • Dì cos'è nelle note del build Un futuro manutentore che incontra un file offuscato non dovrebbe tirare a indovinare. Perciò una riga nel readme su quali passaggi girano risparmia un pomeriggio.
Attenzione qui

Sei modi in cui l'offuscamento rompe un build

Ognuno di questi passa un'analisi e fallisce in produzione.

  • Trattarlo come sicurezza

    Attenzione qui. Ogni trasformazione è reversibile, e un lettore deciso recupererà la logica. Perciò l'offuscamento alza il costo della lettura, e da solo non protegge nulla.

  • Rinominare un nome che qualcun altro legge

    Un globale che la pagina chiama, un callback che un host passa, o un nome in un modello lato server. Poiché il mondo esterno usa ancora la vecchia grafia, la chiamata cade nel nulla.

  • Rinominare nomi che un altro file chiama

    Una funzione di primo livello che un altro file chiama per nome smette di esistere con quel nome. Perciò la chiamata fallisce a runtime, molto dopo che la rinomina sembrava a posto.

  • Lasciare una source map sul server

    Una richiesta alla map annulla tutto il build. Poiché un debugger legge la map, è un annullamento completo e preciso.

  • Affidarsi a esso per nascondere un segreto

    Una chiave o un token nel modulo è ancora nel programma; il browser deve leggerlo per usarlo. Da qui l'offuscamento alza solo lo sforzo di trovarlo e niente più, perciò il segreto va su un server.

  • Offuscare invece di minificare

    I due non sono una scelta tra meglio e peggio, perché mirano a cose diverse. Esegui il minificatore per i byte e l'obfuscator per lo sforzo di lettura, in quest'ordine.

Domande

Domande sul JavaScript obfuscator

Questo JavaScript obfuscator è gratis?

Sì. Non c'è account, né limite, né piano a pagamento. Perciò offuschi tutti gli script che vuoi.

L'offuscamento rende il mio codice sicuro?

No, e nessuno strumento può farlo. Alza lo sforzo di leggere un modulo e non nasconde nulla a un lettore deciso. Perciò un segreto va su un server, mai in un programma del browser.

Cosa cambia davvero?

Al massimo quattro cose: cosa diventano i nomi, dove vivono le stringhe, come si stampano i numeri e se si toglie la spaziatura. Il comportamento resta esattamente com'era.

Esegue il mio codice?

Mai. L'obfuscator analizza e riscrive il modulo, e non chiama alcuna funzione. Perciò un frammento sconosciuto non può agire mentre lo tieni aperto.

L'output funzionerà ancora?

Si analizza, e l'ultimo passaggio lo dimostra. Il comportamento è un'altra questione, quindi passa l'output tra i tuoi test prima che parta.

Devo rinominare i nomi di primo livello?

Solo quando niente fuori dallo script li chiama. Dentro un modulo o una IIFE è sicuro; uno script classico le cui funzioni stanno su window non lo è, perché un altro file le chiama per nome.

Rende lo script più piccolo?

Di solito no; spostare le stringhe in un array e scrivere per esteso i nomi può aggiungere byte. La riga della dimensione segnala comunque il cambiamento, e il compattare ne recupera un po'.

Cosa fa codificare i numeri in esadecimale?

Stampa ogni intero semplice in esadecimale, così 1000 appare come 0x3e8. Il valore è identico; le cifre smettono solo di leggersi come un numero familiare a colpo d'occhio.

Perché c'è un campo per il prefisso del nome?

Perché un aiutante generato chiamato a può scontrarsi con un globale della pagina. Perciò un prefisso corto e distintivo toglie quel rischio.

Posso annullare l'offuscamento?

Non da qui. Un lettore può sistemare a mano un file rinominato, e ripiegare un array di stringhe, ma nessuna attività è automatica. Proprio per questo rallenta un lettore.

Il mio script viene caricato da qualche parte?

No. Tutta la riscrittura gira in questa scheda del browser. Perciò un file di un cliente sotto una clausola di riservatezza resta sulla tua macchina.

Posso incollare un frammento invece di un intero script?

Sì. Una singola funzione va bene, e la rinomina resta dentro di essa. Perciò puoi provare un frammento prima di impegnarti sull'intero script.

Gestisce JSX o TypeScript?

Non direttamente, perché entrambi aggiungono sintassi sopra JavaScript. Perciò esegui prima il compilatore e offusca ciò che produce.

Mi serve una source map?

Per i report di crash sì, e dovrebbe restare privata. Poiché una map servita è un annullamento perfetto, tienila sul tuo tracker di errori e in nessun posto pubblico.

È lo stesso che minificare?

No. Un minificatore toglie gli spazi e accorcia i nomi locali dentro uno script. Un obfuscator va oltre e rimodella il codice, e costa più byte.

In quale ordine devo eseguirli?

Prima minificare, poi offuscare, poi validare. Poiché il validatore nomina le righe, controlla il file leggibile prima che una trasformazione lo tocchi.

Può offuscare un'intera cartella?

In questa pagina no. Uno script alla volta è la regola qui, e uno strumento di build è il posto giusto per una cartella.

Funziona sul telefono?

Sì. I riquadri si impilano e le opzioni si dispongono in righe. Perciò una prova veloce è possibile lontano da una scrivania, anche se un file lungo è più facile con una tastiera.

Posso scaricare il risultato?

Sì. Il download salva l'output come file JavaScript, così lo metti in un passaggio di build senza copia e incolla.

Mi serve un account o un'estensione?

No. Non c'è registrazione, né plugin, né estensione da aggiungere. Perciò chiudi la scheda quando il build è finito.

Continua

Strumenti che vanno con questo

Quattro pagine a cui lo stesso lavoro di solito porta.

  • Minificatore JavaScript

    Esegui prima questo. Poiché un minificatore toglie byte e lascia stare i nomi, è la metà più economica dello stesso passaggio di build.

    Apri lo strumento →
  • Validatore JavaScript

    Poi controlla che l'input e l'output si analizzino. Poiché un errore di sintassi ferma tutto lo script, quel controllo va prima che qualcosa parta.

    Apri lo strumento →
  • Abbellitore di codice

    Quando ti arriva un file compattato o rinominato da altrove, questa pagina lo rimette in forma. Poiché una singola riga densa è difficile da seguire a occhio, rientrare è il primo passo.

    Apri lo strumento →
  • Minificatore CSS

    La metà foglio di stile dello stesso build. Poiché un browser scarica ogni commento e a capo, il foglio merita lo stesso trattamento.

    Apri lo strumento →

Alza lo sforzo di leggere il tuo script

Spunta le trasformazioni e incolla lo script. Niente si esegue né si carica, e il JavaScript obfuscator controlla ogni passaggio prima di darti il risultato. Perciò trattalo come un dosso, non come un lucchetto, e fa bene il suo lavoro.