2009-09-07 64 views
17

Esta pregunta es exactamente lo contrario de Which Javascript minifier (cruncher) does the same things that the one Google uses for its JS APIs?¿Hay algo así como un desminificador de javascript (deobfuscator)?

Quiero aprender cómo Google hace su carga para que pueda construir mi propio JS con kits de herramientas no populares.

+0

Acabo de encontrar que no he buscado "unminify" http://stackoverflow.com/questions/822119/online-tool-to-unminify-decompress-javascript, aunque sigo pensando que esto es válido ya que ninguno de los dos respuestas funciona para "deshacer el cambio de nombre de la variable" –

+1

Está utilizando el término incorrecto en su pregunta. Lo que realmente le interesa es revertir la "ofuscación" (cambio de nombre del identificador). Usted ha recibido un montón de respuestas correctas para su pregunta, pero no para su propósito aparente. –

+1

"maxifier", shurely – skaffman

Respuesta

30

Prueba esto: JS Beautifier

+2

Esto es solo un formateador de código, muy bueno pero no es lo que busco aquí. –

+0

No solo formatea tu código, se supone que debe hacer lo del "desminificador" ... ¿lo has intentado en realidad? – yoda

+2

@Yoda: ¿Cómo puede engañar? Parece que no sabe nada sobre los identificadores. –

0

Ver nuestra SD ECMAScript Formatter de una herramienta que va muy bien formato de código.

EDITAR: Si desea revertir el proceso de cambio de nombre, necesita algo que pueda cambiar el nombre de los nombres ofuscados a los originales.

Esta herramienta puede hacer eso técnicamente: SD Thicket ECMAScript Obfuscator.

Lo hace aplicando un mapa de cambio de nombre sobre el que tiene un control preciso. Normalmente, usted construye implícitamente un mapa de este tipo durante el proceso de ofuscación eligiendo qué nombres ofuscar y cuáles conservar, y el ofuscador aplica ese mapa para producir el código ofuscado.

El ofuscador matorral genera este mapa como efecto secundario cuando se ofuscar en forma esencialmente de un conjunto de pares (ORIGINALNAME, obfuscatedname) para fines de referencia y de depuración.

Al intercambiar elementos se obtiene el mapa (nombrefuscado, nombre original). Ese mapa invertido puede ser aplicado por Thicket para recuperar el código con los nombres originales, del código ofuscado. Y el ofuscador Thicket incluye el formateador para que puedas volver a lucir bien.

El truco para "invertir la minificación" (como lo pones mal, estás tratando de invertir la ofuscación), es que necesitas el mapa. Dado que las personas que hacen ofuscación no regalan el mapa, usted, como receptor de un código ofuscado, no tiene nada que aplicar. Un aspirante a pirata tendría que reconstruir el mapa presumiblemente mediante una dolorosa ingeniería inversa.

El proceso de "inversión" tampoco puede recuperar los comentarios. Se han ido para siempre.

Esto es todo por diseño, por lo que la verdadera pregunta es ¿por qué estás buscando revertir la ofuscación?

+0

realmente como los otros formateadores de código. –

+0

@Jorge: eso se debe a que su pregunta original utilizó mal el término "minificación" cuando usted quiso decir "ofuscación".He ampliado la respuesta para decirle exactamente cómo revertir el proceso de ofuscación en la medida de lo posible. Las herramientas lo harán si tienes los datos correctos. Es poco probable que tengas esa información. –

+0

Esto no es un desobusuario también. Simplemente asigna nombres de identificador y bonitos grabados. – artificialidiot

16

Uhhh, sería imposible restaurar nombres de variables a menos que hubiera una asignación de nombres de variables originales minificados disponibles. De lo contrario, creo que los autores de esa herramienta podrían ganar el premio Randi por hazañas psíquicas.

+1

Por supuesto que no podrá recuperar los nombres originales. Pero si al menos obtiene mejores nombres puede encontrar y reemplazar más adelante, en otras palabras, la herramienta conocerá la sintaxis de JS y reemplazará la variable a con method_named_a pero no la reemplazará en ba() porque generará un error de sintaxis –

+4

Usted específicamente se quejó que los embellecedores no "deshacen el cambio de nombre de la variable", lo que implica que querías recuperar los símbolos originales. – patros

2

No podrá reconstruir el nombre del método ni los nombres de las variables. Lo mejor que puede esperar es un formateador de código JS simple (como los mencionados anteriormente), y luego recorrer el método de archivo por método, línea por línea, resolviendo lo que hace cada parte.

Tal vez el uso de una buena herramienta de refactorización JS sería hacer esto más fácil, así (ser capaz de cambiar el nombre de métodos/documento)

+1

Ok, esto parece una mejor ventaja, ¿cuál es una buena herramienta de refracción JS? –

+1

Intellij IDEA puede hacer el cambio de nombre/variable en archivos Javascript. Aparentemente CodeRush/Refactor Pro hará lo mismo en Visual Studio – Matthew

1

Puede utilizar la característica \b (límite de palabra) en las expresiones regulares para encontrar los nombres de variables de una sola letra en un archivo.

for i in "abcdefghij..z"; do 
    sed -i "s/\b$i\b/$(random /usr/share/dict/words)/g" somefile.js 
done 

También puede utilizar esto en vim con algo como :%s/\<a\>/truesaiyanpower/g.

11

Try http://www.jsnice.org/

simplemente me encontré en él y es genial. Se expande el código. Tiene un cambio de nombre de variable estadística. por ejemplo, si usted tiene este código:

var g = f.originalEvent.targetTouches[0]; 

Entonces se convierte el código en:

var touches = event.originalEvent.targetTouches[0]; 

conjetura bastante buena, me parece.

Resultó esto:

d.slide.hasClass("selected") ? (e.onSlideOpen.call(d.prev.children("div")[0]), q ? (e.rtl && d.slide.position().left > i.w/2 || d.slide.position().left < i.w/2) && h.animateSlide.call(d) : t && d.index ? (h.animateGroup(d, !0), h.fitToContent(d.prev)) : d.slide.position().top < i.h/2 && h.animateSlide.call(d)) : (setTimeout(function() { e.onSlideOpen.call(d.slide.children("div")[0]) }, e.slideSpeed), h.animateGroup(d), t && h.fitToContent(d.slide)), e.autoPlay && (f.stop(), f.play(l.index(j.filter(".selected")))) 

En esto:

if (e.slide.hasClass("selected")) { 
    settings.onSlideOpen.call(e.prev.children("div")[0]); 
    if (val) { 
     if (settings.rtl && e.slide.position().left > box.w/2 || e.slide.position().left < box.w/2) { 
     self.animateSlide.call(e); 
     } 
    } else { 
     if (isMac && e.index) { 
     self.animateGroup(e, true); 
     self.fitToContent(e.prev); 
     } else { 
     if (e.slide.position().top < box.h/2) { 
      self.animateSlide.call(e); 
     } 
     } 
    } 
    } else { 
    setTimeout(function() { 
     settings.onSlideOpen.call(e.slide.children("div")[0]); 
    }, settings.slideSpeed); 
    self.animateGroup(e); 
    if (isMac) { 
     self.fitToContent(e.slide); 
    } 
    } 
    if (settings.autoPlay) { 
    node.stop(); 
    node.play(tabs.index(options.filter(".selected"))); 
    } 

Una biblioteca que estoy trabajando tiene un par de errores, y después de pasar horas tratando de descifrar el código, la búsqueda de este me va a ahorrar un montón de tiempo.

En serio, esta herramienta limpia el piso con JS Beautifier.

+2

Muy agradable. Detección automática de tipos también. Tres años después de este comentario, este sigue pareciendo el mejor minimizador. Los minificadores –

-1

Javascript minifier y Javascript Obfuscator son dos cosas diferentes.

Minificador: elimina los comentarios, espacios en blanco innecesarios y saltos de línea de un programa.

Obfuscator: realice modificaciones en el programa, cambiando los nombres de variables, funciones y miembros, haciendo que el programa sea mucho más difícil de entender. Algunos ofuscadores son bastante agresivos en sus modificaciones al código.

Este Javascript Obfuscator ofuscará su código.

Si desea desobtener su código, intente Javascript Beautifier. Desofuscará si se encuentra ofuscación y luego embellecerá el código.

+0

también pueden ofuscarse con el propósito de reducir el código, ya que es difícil de leer es solo un efecto secundario. –

Cuestiones relacionadas