2012-01-17 6 views
5

He buscado un convertidor en Google, pero no he encontrado nada. ¿Hay alguna herramienta disponible o debo hacer una para decodificar mi código JavaScript ofuscado?Necesito un convertidor de sintaxis literal de Javascript/herramientas de desofuscación

Supongo que existe una herramienta de este tipo pero no estoy buscando en Google las palabras clave correctas. El código tiene 3 páginas, por eso necesito herramientas.

Aquí es un exemple del código:

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

Gracias

+1

¿Qué sucede cuando lo evalúas? – maerics

+0

Una parte del código redirige a los usuarios a Youtube. –

+0

Vaya, creo que estás en problemas si esa fue tu copia viable. – Jivings

Respuesta

1

Esta pregunta ya tiene una respuesta aceptada, pero seguiré publicando para aclarar algunas cosas.

Cuando surge esta idea, un tipo hizo un generator para codificar JavaScript de esta manera. Se basa en hacer []["sort"]["call"]()["eval"](/* big blob of code here */). Por lo tanto, puede decodificar fácilmente los resultados de este codificador eliminando la parte sort-call-eval (es decir, los primeros 1628 bytes). En este caso se produce:

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

(divertido lo suficiente el creador de este código no era aún capaz de comprimir correctamente y guardar un kilobyte)

También hay una explicación de por qué este código no hace Trabajar en el navegador más nuevo: cambiaron Array.prototype.sort por lo que no devuelve una referencia a window. Por lo que recuerdo, esta era la única forma de obtener una referencia al window, por lo que este código está algo roto ahora.

4

Este código es fascinante, porque parece que el uso de sólo nueve caracteres ("[]()!+,;" y el espacio vacío U+0020) todavía tiene alguna sofisticada funcionalidad. Parece que utiliza la conversión de tipo implícito de JavaScript para forzar matrices en varios tipos primitivos y sus representaciones de cadena y luego utiliza los caracteres de esas cadenas para componer otras cadenas que escriben los nombres de las funciones a las que luego se llama.

Considérese el siguiente fragmento que evalúa a la array filter function:

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

Reconstruir el código como tal es mucho tiempo y propenso a errores, por lo que una solución automatizada es obviamente deseable. Sin embargo, el comportamiento de este código está tan estrechamente relacionado con el tiempo de ejecución de JavaScript que, al parecer, no es necesario que un intérprete de JS evalúe el código.

No he podido encontrar ninguna herramienta que funcione generalmente con este tipo de codificación. Parece como si tuvieras que estudiar más el código y determinar cualquier patrón de uso (por ejemplo, confianza en los métodos de matriz) y descubrir cómo capturar su uso (por ejemplo, envolviendo funciones de alto nivel [como Function.prototype.call] ]) para rastrear la ejecución del código por usted.

Cuestiones relacionadas