Comment puis-je" décompiler " les fichiers de la classe Java? [fermé]
Quel programme puis-je utiliser pour décompiler un fichier de classe? Est-ce que je vais vraiment avoir du code Java, ou est-ce que c'est juste du code d'assemblage JVM?
sur les questions de performance Java sur ce site, je vois souvent des réponses de personnes qui ont "décomposé" le fichier de classe Java pour voir comment le compilateur optimise certaines choses.
19 réponses
Mise À Jour Février 2016:
www.javadecompilers.com listes JAD comme étant:
le plus populaire Java decompiler, mais principalement de cet âge seulement. Écrit en C++, donc très rapide.
Obsolète, non supportée et ne se décompose pas correctement Java 5 et plus tard
donc votre kilométrage peut varier avec le JDK récent (7, 8).
le même la liste des sites d'autres outils.
Et javadecompiler, comme l'a noté Salvador Valence dans les commentaires (Septembre 2017), les offres SaaS, où vous téléchargez le .class
fichier vers le cloud et il vous renvoie le code décompilé.
réponse Originale à cette question: Oct. 2008
- La version finale de la JSR 176, de définir les principales caractéristiques de J2SE 5.0 (Java SE 5), a été publié le 30 septembre 2004.
- la dernière version Java supportée par JAD, le fameux décomposeur Java écrit par M. Pavel Kouznetsov, est JDK 1.3 .
- la plupart des java decompilers téléchargeables aujourd'hui sur Internet, tels que "DJ Java Decompiler" ou "Cavaj Java Decompiler", sont alimentés par JAD: ils ne peuvent pas afficher les sources Java 5.
Java Decompiler (encore un autre Java decompiler rapide) a:
- soutien Explicite pour la décompilation et à l'analyse du Java 5+ ".catégorie" fichiers de.
- Une belle interface:
il fonctionne avec des compilateurs de JDK 1.1.8 jusqu'à JDK 1.7.0, et d'autres ( Jikes , JRockit , etc.).
Il dispose d'une ligne version de démonstration en direct qui est en fait entièrement fonctionnel! Vous pouvez simplement déposer un fichier jar sur la page et voir le code source décomposé sans rien installer.
il y a quelques décomposeurs dehors... Une recherche rapide donne:
- Procyon : open-source (Apache 2) et activement développé
- Krakatau : open-source (GPLv3) et activement développé
- CFR : open-source (MIT) et activement développé
- JAD
- DJ Java Decompiler
- Moka
et bien d'autres.
ceux-ci produisent du code Java. Java est livré avec quelque chose qui vous permet de voir le code octet JVM ( javap ).
pour voir le code source Java, Vérifiez un peu decompiler. Allez chercher jad .
si vous voulez voir les bytecodes, il suffit d'utiliser javap qui est livré avec le JDK.
j'en ai essayé plusieurs, et Procyon semble fonctionner le mieux pour moi. Il est en développement actif et prend en charge de nombreuses fonctionnalités des dernières versions de Java.
ce sont les autres que j'ai essayé:
- CFR
- promettant, mais échouant souvent, la décompilation par méthode. Je vais garder mes yeux sur celui-ci. Également développé activement avec le soutien des dernières fonctionnalités Java.
- Krakatau
- adopte une approche différente en ce qu'il essaie de produire du code Java équivalent au lieu d'essayer de reconstruire la source originale, ce qui a le potentiel de la rendre meilleure pour le code obscurci. D'après mes tests, il était à peu près sur le même pied que Procyon, mais toujours agréable d'avoir quelque chose de différent. J'ai dû utiliser le drapeau de la ligne de commande
-skip
pour qu'il ne s'arrête pas sur les erreurs. Activement développé, et assez intéressant il est écrit en Python.
- adopte une approche différente en ce qu'il essaie de produire du code Java équivalent au lieu d'essayer de reconstruire la source originale, ce qui a le potentiel de la rendre meilleure pour le code obscurci. D'après mes tests, il était à peu près sur le même pied que Procyon, mais toujours agréable d'avoir quelque chose de différent. J'ai dû utiliser le drapeau de la ligne de commande
- JD-GUI
- a fonctionné, mais la production de Procyon était beaucoup mieux. Voici une page comparant la sortie Procyon à l'original et JD-GUI . JD-GUI est également disponible comme un plugin Eclipse , qui ne fonctionnait pas du tout pour moi. Ne semble pas être open source et le développement semble sporadique.
- JAD
- fonctionne, mais ne supporte que Java 1.4 et inférieur. Aussi disponible comme un plugin Eclipse . N'est plus en cours de développement.
j'utilise JAD Decompiler .
Il y a un Eclipse plugin pour ça, jadeclipse . C'est assez agréable.
Procyon comprend un décompilateur. Il est des logiciels libres.
Suot est une option pour le code Java plus récent. Au moins il a l'avantage d'être encore récemment entretenu...
aussi, Java Decompiler est un decompiler avec à la fois une interface graphique autonome et une intégration Eclipse.
enfin, Jdec n'a pas été mentionné, bien qu'il ne soit pas aussi poli que les autres option.
Voici une liste des décomposeurs en date de février 2015:
Procyon , Source libre, https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler
CFR , gratuit, Pas de code source disponible, http://www.benf.org/other/cfr /
JD , gratuit pour utilisation non-commerciale seulement, http://jd.benow.ca/
Fernflower , Source libre, https://github.com/fesh0r/fernflower ,
JAD – donné ici seulement pour raison historique. Gratuit, Pas de code source disponible, http://varaneckas.com/jad / Obsolète, non supportée et ne se décompose pas correctement Java 5 et plus tard.
, Vous pouvez tester mentionnés ci-dessus décompilation en ligne, pas de installation nécessaire et faire votre propre choix instruit.
Java décompilation dans le cloud: http://www.javadecompilers.com/
Il y a quelques programmes que vous pouvez utiliser. Vous obtiendrez le code Java réel, mais parfois le code aura été obscurci de sorte que les méthodes sont nommées par une lettre ou un nombre ou un mélange aléatoire de lettres et de nombres.
la plupart des décompileurs pour Java sont basés sur JAD . C'est un excellent outil, mais malheureusement il n'a pas été mis à jour depuis un certain temps et ne gère pas très bien les classes Java 1.5+. Je n'ai pas vu d'outils capables de gérer correctement les classes 1.5+.
tous les liens JAD répertoriés jusqu'à présent semblent être cassés, donc j'ai trouvé ce site. Fonctionne bien (pour Linux, au moins)! Sur Ubuntu 11.10 j'ai dû télécharger le statique pour une raison quelconque.
-
JAD est celui qui travaille et est simple.
-
aussi, si vous voulez juste voir les méthodes, utilisez javap.
si vous voulez voir comment le compilateur Java fait certaines choses, vous ne voulez pas décompilation, vous voulez démonter. La décompilation implique la transformation du bytecode en source Java, ce qui signifie que beaucoup d'informations de bas niveau sont perdues, et si vous vous interrogez sur l'optimisation du compilateur, c'est probablement l'information même qui vous intéresse.
quoi qu'il en soit, il se trouve que j'ai écrit un open source Java disassembler . Contrairement À Javap, cela fonctionne même sur les classes hautement pathologiques, de sorte que vous pouvez voir ce que les outils d'obscurcissement font à vos classes aussi bien. Il peut aussi faire de la décompilation, bien que je ne le recommande pas.
JAD ne fonctionne pas pour moi (Ubuntu 11.10 problème) donc je l'ai déplacé vers l'avant et sopped sur JODO . Au moins, il a du code source Java ouvert et a pu décompiler mon .la classe correctement.
je vous recommande de vérifier 'branches/generic' branche d'abord. Les malles ne sont pas stables.
Sur IntelliJ IDEA plate-forme, vous pouvez utiliser le bouton Java Decompiler IntelliJ Plugin . Il vous permet d'afficher toutes les sources Java pendant votre processus de débogage, même si vous ne les avez pas toutes. Il est basé sur les célèbres outils JD-GUI .
Avec AndroChef Java Decompiler vous pouvez décompiler, apk dex, jar et java de la classe des fichiers. C'est simple et facile. AndroChef JD est basé sur FernFlower . Vous pouvez l'évaluer en 10 utilisations gratuites.
AndroChef supporte les fonctionnalités Java language comme les génériques, les enums et les annotations. Selon certaines études, AndroChef Java Decompiler est capable de décompiler 98,04% des applications Java générées avec les traditionnels Compilateurs Java - un taux de récupération très élevé. C'est un outil simple mais puissant qui vous permet de décomposer Java et Dalvik bytecode (DEX, APK) en Java source lisible.
pour OSX je recommande: jarzilla ou JD-GUI
ils vous permettent tous les deux de voir pot,guerre,etc. le contenu du fichier et décompose tous les fichiers de classe à l'intérieur d'eux.
Jarzilla: https://code.google.com/p/jarzilla/
JD - GUI: http://jd.benow.ca /