2012-01-17 7 views
5

Ho cercato su Google un convertitore ma non ho trovato nulla. C'è qualche strumento disponibile o devo farne uno per decifrare il mio codice JavaScript offuscato?Ho bisogno di un convertitore di sintassi letterale Javascript/strumenti deoffuscamento

Suppongo che ci sia un tale strumento ma non sto cercando Google con le parole chiave giuste. Il codice è lungo 3 pagine, questo è il motivo per cui ho bisogno di strumenti.

Ecco un esempio di codice:

<script>([][(![]+[])[!+[]+!+[]+!+[]]+(!![]+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[+!+[]+[+[]]]+(!![]+[])[+!+[]]+(!![]+[])[+[]]][([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]+(![]+[])[!+[]+!+[]]]()[(!![]+[])[!+[]+!+[]+!+[]]+(+(+[])+[][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]])[!+[]+!+[]+!+[]+[+[]]]+(![]+[])[+!+[]]+(![]+[])[!+[]+!+[]]])(([]+[])[([][(![]+[])[+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]+(!![]+[])[+[]]+(!![]+[])[!+[]+!+[]+!+[]]+(!![]+[])[+!+[]]]+[])[!+[]+!+[]+!+[]]+(!![]+ 

Grazie

+1

Cosa succede quando lo valuti? – maerics

+0

Una parte del codice reindirizza gli utenti su Youtube. –

+0

Whoops, penso che tu sia nei guai se questa fosse la tua copia praticabile. – Jivings

risposta

1

Questa domanda ha già una risposta accettata, ma continuerò a postare per chiarire alcune cose.

Quando è venuta fuori questa idea, un tizio ha creato un codice generator per codificare JavaScript in questo modo. Si basa sul fatto di fare []["sort"]["call"]()["eval"](/* big blob of code here */). Pertanto, è possibile decodificare facilmente i risultati di questo encoder rimuovendo la parte sort-call-eval (ovvero i primi 1628 byte). In questo caso si produce:

if (document.cookie=="6ffe613e2919f074e477a0a80f95d6a1"){ alert("bravo"); } 
else{ document.location="http://www.youtube.com/watch?v=oHg5SJYRHA0"; } 

(Abbastanza divertente il creatore di questo codice non era nemmeno in grado di comprimere in modo corretto e salvare un kilobyte)

C'è anche una spiegazione del motivo per cui questo codice non lo fa funzionano più nel browser più recente: hanno modificato Array.prototype.sort in modo che non restituisca un riferimento a window. Per quanto mi ricordo, questo era l'unico modo per ottenere un riferimento a window, quindi questo codice è un po 'rotto adesso.

4

Questo codice è affascinante perché sembra usare solo nove caratteri ("[]()!+,;" e spazio vuoto U+0020) ma ha un po 'sofisticato funzionalità. Sembra utilizzare la conversione di tipo implicita di JavaScript per forzare le matrici in vari tipi primitivi e le loro rappresentazioni di stringa e quindi utilizzare i caratteri di quelle stringhe per comporre altre stringhe che digitano i nomi delle funzioni che vengono poi chiamate.

consideri il seguente frammento che valuta la array filter function:

([][ 
    (![]+[])[+[]]    // => "f" 
+ ([![]]+[][[]])[+!+[]+[+[]]] // => "i" 
+ (![]+[])[!+[]+!+[]]   // => "l" 
+ (!![]+[])[+[]]    // => "t" 
+ (!![]+[])[!+[]+!+[]+!+[]] // => "e" 
+ (!![]+[])[+!+[]]   // => "r" 
]) // => function filter() { /* native code */ } 

Ricostruire il codice come tale richiede tempo e soggetto a errori, quindi una soluzione automatizzata è ovviamente desiderabile. Tuttavia, il comportamento di questo codice è così strettamente legato al runtime di JavaScript che la de-obsfucation sembra richiedere a un interprete JS di valutare il codice.

Non sono stato in grado di trovare alcuno strumento che funzioni in genere con questo tipo di codifica. Sembra che dovrai studiare ulteriormente il codice e determinare eventuali modelli di utilizzo (ad es. Affidarsi a metodi di array) e capire come catturarne l'utilizzo (ad es. Avvolgendo funzioni di alto livello [come Function.prototype.call ]) per tracciare l'esecuzione del codice per te.