Documentazione
/

Guida introduttiva

Guida introduttiva

Obfuscator.io trasforma il codice sorgente leggibile in una versione protetta, difficile da comprendere e da decompilare. È lo strumento ideale per proteggere algoritmi proprietari, logiche di licenza e codice critico per il business.

Benvenuti in Obfuscator.io

Questa guida illustra come offuscare il primo file, scegliere un preset e comprendere il pannello delle opzioni. Per approfondimenti si vedano le sezioni Offuscamento VM, Offuscamento di base e Best practice.

Avvio rapido

  • 1. Incollare il codice

    Inserire il codice JavaScript nel pannello dell'editor a sinistra. È possibile incollarlo direttamente oppure utilizzare la funzione di caricamento file per l'elaborazione in blocco.

  • 2. Scegliere un preset

    Selezionare un preset dal menu a discesa nel pannello delle opzioni. Si può iniziare con Low Obfuscation per modifiche minime oppure con Medium Obfuscation per una protezione equilibrata. I preset VM offrono il livello di sicurezza più elevato.

  • 3. Fare clic su "Obfuscate"

    Premere il pulsante Obfuscate per trasformare il codice. L'output protetto compare nel pannello di destra.

  • 4. Copiare o scaricare

    Utilizzare il pulsante Copy oppure Download per ottenere il codice offuscato. L'output è pronto per l'uso in produzione.

Compatibilità del codice Importante

L'offuscamento (sia VM sia non VM) trasforma il codice in modi che incidono su alcuni comportamenti del runtime JavaScript. Il codice non deve dipendere dalle funzionalità seguenti:

  • function.toString() / class.toString()

    L'offuscamento modifica completamente la rappresentazione del codice sorgente. Il codice che analizza o confronta il sorgente di una funzione smetterà di funzionare.

  • function.name / class.name

    I nomi di funzioni e classi vengono sostituiti con identificatori casuali. Il codice che si affida a .name per il logging, la serializzazione o la reflection otterrà nomi offuscati.

// Before obfuscation
function calculatePrice() { return 100; }
console.log(calculatePrice.name);     // "calculatePrice"
console.log(calculatePrice.toString()); // "function calculatePrice() { return 100; }"

// After obfuscation
console.log(calculatePrice.name);     // "_0x1a2b3c" (random)
console.log(calculatePrice.toString()); // Completely transformed code

Opzioni di base

Prima di procedere all'offuscamento, occorre configurare le seguenti opzioni di base in funzione dell'ambiente di destinazione.

Target target

Specifica l'ambiente di esecuzione del codice offuscato:

  • browser (predefinito) - ambiente standard di una pagina web. Il codice prodotto è identico a quello del target node, ma alcune opzioni specifiche del browser non possono essere utilizzate con il target node.
  • browser-no-eval - identico a browser, ma l'output non utilizza eval(). Da impiegare quando la pagina di destinazione applica una Content Security Policy che vieta eval/unsafe-eval.
  • node - ambiente Node.js. Le opzioni specifiche del browser sono disattivate (richiedono window/document e in Node non avrebbero effetto o genererebbero un errore). Alcune difese di vmSelfDefending che si basano su API disponibili solo nel browser - rilevamento dei browser headless, ripristino di un realm pulito tramite iframe, controlli anti-inspector e sul DOM - non vengono generate per questo target.
  • service-worker - contesto Service Worker. Nessun window, nessun document e un oggetto globale self differente.
  • userscript - sandbox di un gestore di userscript (ad esempio Tampermonkey). Le difese di vmSelfDefending vengono adattate di conseguenza. Richiede l'offuscatore v6.9.0+.
  • bytenode - per codice destinato a essere compilato in .jsc con bytenode. Richiede l'offuscatore v6.13.0+.

Strict Mode strictMode

Controlla il modo in cui l'offuscatore gestisce la strict mode di JavaScript:

  • Auto (predefinito) - rileva automaticamente la strict mode dal codice. L'offuscatore analizza il codice alla ricerca delle direttive "use strict"
  • Enable - forza il trattamento in strict mode per tutto il codice, indipendentemente dalla presenza di "use strict"
  • Disable - solo le direttive "use strict" esplicitamente presenti nel codice sorgente vengono considerate strict mode

Comprendere i preset

I preset sono combinazioni di opzioni preconfigurate, suddivise in due gruppi distinti:

Preset VM Pro (virtualizzazione in bytecode)

PresetSicurezzaPrestazioniCaratteristiche
VM LowBuona~10xVM di base, dispatch indiretto
VM MediumElevata~12-15x+ Shuffle degli opcode, codifica, decoy
VM HighMolto elevata~15-18x+ Dead code, opcode con stato, codifica dello stack
VM Ultra HighMassima~20x++ Livelli di offuscamento non VM

I valori relativi alle prestazioni sono medie: l'impatto effettivo dipende in larga misura dal codice (ad esempio il codice con molta ricorsione o con cicli eseguiti di frequente risulterà sensibilmente più lento).

Preset non VM (offuscamento standard)

PresetProtezionePrestazioniCaratteristiche
DefaultDi baseMinimoString array, semplificazione
LowLeggera~1.1x+ Self-defending, disattivazione della console
MediumModerata~1.5x+ Control flow, dead code, base64
HighElevata~2x+ Debug protection, codifica rc4

Panoramica dell'interfaccia

  • Editor di input - consente di incollare o digitare il codice sorgente JavaScript. È possibile trascinare i file oppure utilizzare il pulsante di caricamento. Sono supportati anche i file HTML con script inline Pro.
  • Pannello di output - mostra il risultato offuscato. Utilizzare i pulsanti Copy o Download per ottenere il codice protetto.
  • Selettore dei preset - consente di scegliere tra preset VM e non VM. I preset VM sono raggruppati in cima all'elenco. Il preset determina le opzioni di base, che restano comunque personalizzabili.
  • Pannello delle opzioni - permette di regolare nel dettaglio le impostazioni di offuscamento. Facendo clic sull'icona ? accanto a una qualsiasi opzione se ne consulta la documentazione.
  • Pulsante Obfuscate - trasforma il codice utilizzando le opzioni selezionate. I preset VM vengono elaborati lato server, mentre quelli non VM vengono eseguiti nel browser.
  • Caricamento multiplo di file Pro - consente di elaborare più file contemporaneamente e di scaricarli in un archivio ZIP.
  • Pannello della cronologia Pro - permette di accedere agli offuscamenti precedenti e di ripristinare input e output.