Question:
Quels sont les bons outils pour inverser les effets de Minify sur JavaScript?
WPrecht
2013-03-20 19:15:38 UTC
view on stackexchange narkive permalink

Existe-t-il des scripts et / ou des outils en ligne qui peuvent inverser les effets de la minification?

Je cherche spécifiquement à déminifier un fichier JavaScript minifié. Le changement de nom des variables n'est pas un gros problème, je veux qu'elles soient suffisamment lisibles pour pouvoir analyser l'exécution.

Juste avant que quiconque n'accepte de voter, [vous pouvez poser et répondre à votre propre question] (http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions /). C'est cool, en fait, et aide le site! Bonne question, WPrecht :-)
Merci. J'avais supposé que nous devions faire des choses comme ça dans la bêta fermée pour aider à amorcer le site.
@Keelan: malheureusement certaines personnes ne sont pas d'accord. [Point au cas] (https://reverseengineering.stackexchange.com/questions/137)
@0xC0000022L Er ... c'est supprimé. Est-ce votre cas?
@SamB pas le fait qu'il soit supprimé. Non. Il a été supprimé au cours des six dernières années (en fait, il a été supprimé environ un mois après sa fermeture, ce qui était approximativement au moment de mon commentaire). Avec suffisamment de réputation, vous pourrez toujours le voir.
Quatre réponses:
#1
+21
Archenoth
2013-03-21 11:49:12 UTC
view on stackexchange narkive permalink

Je cherche spécifiquement à déminifier un fichier JavaScript minifié. Le changement de nom des variables n'est pas un gros problème, je veux qu'il soit suffisamment lisible pour pouvoir analyser l'exécution.

Le titre de votre question indique simplement l'inversion du code minifié, et pas nécessairement le comprendre. Mais si vous essayez de le comprendre, Opera Dragonfly ressemble à un outil que vous trouverez peut-être très utile ...

J'ai toujours utilisé Dragonfly pour analyser le code minifié. En plus d'avoir une jolie imprimante, il dispose également d'une fonctionnalité d'analyse incroyablement pratique.

Voici jQuery.min dans toute sa splendeur minifiée ... jQuery, in all its minified glory.

Le bouton que j'ai entouré voici la jolie imprimante qui transforme soudainement le code en quelque chose comme ceci: Beautified jQuery.min

Ce qui est un bon début, mais c'est encore très difficile à comprendre sans une idée de ce à quoi il ressemble pendant l'exécution.

Vous devez d'abord déterminer quelle partie de la fonctionnalité d'un fichier minifié vous essayez de comprendre. Les points d'arrêt Événement sont extrêmement pratiques pour cela, car vous pouvez les définir pour presque toutes les entrées utilisateur ou pour la charge d'un élément. Par exemple, si je voulais voir ce qui se passe dans jQuery quand un événement mouseover se produit, je pourrais ajouter un point d'arrêt d'événement pour "mouseover". De cette façon, je peux voir où se trouve le point d'entrée dans le code lorsque je déplace ma souris sur un élément spécifique.

Lorsque votre code atteint un point d'arrêt, vous entrez dans un mode où vous pouvez, comme dans de nombreux DOM débogueurs, interagissez avec l'état actuel du code que vous inspectez. Mais vous pouvez le faire en passant la souris sur des sections de code, il est donc très facile de garder le contexte du code à l'esprit.

Event breakpoint and analysis.

Vous pouvez également inspecter la portée et qui fait référence à quoi à partir du sous-onglet "État" de l'onglet Scripts de la même manière que vous le pouvez avec la fenêtre source. Ainsi, vous pouvez voir si une variable en remplace une autre, ou si la magie de fermeture fantaisie se produit quelque part, ou de quelle portée une variable provient réellement. De plus, si vous regardez un élément DOM, vous pouvez passer la souris dessus pour le mettre en évidence sur la page. (Voir la dernière image.)

State tab.

La console Dragonfly a également cette fonctionnalité de survol de la souris ... De plus, tout a une complétion par tabulation, vous pouvez donc exécuter n'importe quel code de n'importe quel état, inspectez à n'importe quel niveau d'exécution, réaffectez des variables, exécutez des tests ou naviguez simplement avec la complétion de [Tab] pour faire à peu près n'importe quoi pour comprendre ce que fait le code que vous regardez. Console tab.

Opera's L'inspecteur vous aidera certainement à inverser et à comprendre le code minifié ou obscurci.

#2
+15
Devdatta Tengshe
2013-03-21 10:16:22 UTC
view on stackexchange narkive permalink

Je préfère utiliser la jolie imprimante intégrée dans les outils de développement de Google Chrome.

Voici le code minifié: enter image description here

En appuyant sur le joli bouton d'impression, vous obtenez le suivant: enter image description here

#3
+8
WPrecht
2013-03-20 19:15:38 UTC
view on stackexchange narkive permalink

Un bon point de départ est JSBeautifier. En général, cela dépend de la méthode de minification qui a été utilisée. Celui-ci formate le code et propose de nombreuses options. Il peut également décompresser des scripts «emballés» (emballés avec le packer de Dean Edward). Une variante pratique de ce code est disponible sous forme de plugin Firefox Javascript Deminifier.

#4
+6
JulianHarty
2017-02-11 00:21:45 UTC
view on stackexchange narkive permalink

J'ai récemment essayé http://www.jsnice.org/ sur plus de 50 Ko d'un seul fichier JavaScript minifié contenant beaucoup de code de modification dynamique que le runtime de Cordova a refusé d'exécuter (pour une application ciblée sous Windows Phone 8.1 et Windows 10). Les résultats ont été étonnants car il reconnaît les fragments de code correspondants qui sont disponibles non réduits à partir de milliers de projets open source. J'espère que cela vous aidera ainsi que les autres à l'avenir.

jsnice est le meilleur. La minification ne vaut pas grand-chose lorsque les noms de variables ne sont pas refactorisés, et aucun des autres éléments de cette liste ne le fera pour vous.


Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...