Comment “décomstackr” les fichiers de classe Java?

Quel programme puis-je utiliser pour décomstackr un fichier de classe? Est-ce que je vais obtenir du code Java, ou est-ce juste du code assembleur JVM?

Sur les questions de performance Java sur ce site, je vois souvent des réponses de personnes ayant “décompilé” le fichier de classe Java pour voir comment le compilateur optimise certaines choses.

Mise à jour février 2016:

http://www.javadecomstackrs.com indique que JAD est:

le décompilateur Java le plus populaire, mais principalement de cet âge uniquement. Écrit en C ++, donc très vite.
Obsolète, non pris en charge et ne décomstack pas correctement Java 5 et les versions ultérieures

Ainsi, votre kilométrage peut varier avec le jdk récent (7, 8).

Le même site liste d’autres outils.

Et javadecomstackr, comme l’a noté Salvador Valencia dans les commentaires (septembre 2017), propose un SaaS où vous téléchargez le fichier .class sur le cloud et vous renvoie le code décompilé.


Réponse originale: oct. 2008

  • La version finale de JSR 176, définissant les principales fonctionnalités de J2SE 5.0 (Java SE 5), a été publiée le 30 septembre 2004.
  • La dernière version de Java prise en charge par JAD, le célèbre décompilateur Java écrit par M. Pavel Kouznetsov, est JDK 1.3 .
  • La plupart des décompilateurs Java téléchargeables depuis Internet, tels que «DJ Java Decomstackr» ou «Cavaj Java Decomstackr», sont fournis par JAD: ils ne peuvent pas afficher les sources Java 5.

Java Decomstackr (encore un autre décompilateur Fast Java) a:

  • Prise en charge explicite de la décompilation et de l’parsing des fichiers Java 5+ «.class».
  • Une belle interface graphique:

capture d'écran

Il fonctionne avec les compilateurs de JDK 1.1.8 à JDK 1.7.0, et d’autres ( Jikes , JRockit , etc.).

Il comporte une version de démonstration en ligne en ligne qui est réellement fonctionnelle! Vous pouvez simplement déposer un fichier jar sur la page et voir le code source décompilé sans rien installer.

Il y a quelques décompilateurs là-bas … Une recherche rapide donne:

  1. Procyon : open-source (Apache 2) et activement développé
  2. Krakatau : open-source (GPLv3) et activement développé
  3. CFR : open-source (MIT) et activement développé
  4. JAD
  5. DJ Java Decomstackr
  6. Moka

Et beaucoup plus.

Celles-ci produisent du code Java. Java est livré avec quelque chose qui vous permet de voir le code d’octet JVM ( javap ).

Pour voir le code source Java, vérifiez le décompilateur. Allez chercher le jad .

Si vous voulez voir des bytecodes, utilisez simplement javap fourni avec le JDK.

J’ai essayé plusieurs et Procyon a semblé travailler le mieux pour moi. Il est en cours de développement et prend en charge de nombreuses fonctionnalités des dernières versions de Java.

Ce sont les autres que j’ai essayées:

  • Le CFR
    • Méthode de décompilation prometteuse mais souvent ratée. Je garderai l’oeil sur celui-ci. Aussi activement développé avec le support des dernières fonctionnalités Java.
  • Krakatau
    • Adopte une approche différente en essayant de générer un code Java équivalent au lieu d’essayer de reconstruire la source d’origine, ce qui pourrait le rendre meilleur pour le code obscurci. D’après mes tests, c’était à peu près la même chose que Procyon, mais toujours agréable d’avoir quelque chose de différent. J’ai dû utiliser l’ -skip de ligne de commande -skip pour éviter les erreurs. Développé activement, et c’est intéressant, il est écrit en Python.
  • JD-GUI
    • Travaillé, mais la production de Procyon était bien meilleure. Voici une page comparant les sorties Procyon à l’original et à l’interface graphique JD . JD-GUI est également disponible en tant que plug – in Eclipse , ce qui ne fonctionnait pas du tout pour moi. Ne semble pas être open source et le développement semble sporadique.
  • JAD
    • A travaillé, mais ne supporte que Java 1.4 et inférieur. Egalement disponible en plugin Eclipse . Plus en développement.

J’utilise JAD Decomstackr .

Il y a un plugin Eclipse , jadeclipse . C’est plutôt sympa.

Procyon comprend un décompilateur. C’est le logiciel libre.

Soot est une option pour les nouveaux codes Java. Au moins, il a l’avantage d’être encore maintenu récemment …

En outre, Java Decomstackr est un décompilateur avec 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 d’autres options.

JD-GUI est vraiment bien. Vous pouvez simplement ouvrir un fichier JAR et parcourir le code comme si vous travailliez sur un IDE. Bon produit.

Voici une liste des décompilateurs en date de février 2015:

Procyon , open-source, https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decomstackr

CFR , gratuit, pas de code source disponible, http://www.benf.org/other/cfr/

JD , gratuit pour un usage non commercial uniquement, http://jd.benow.ca/

Fernflower , open-source, https://github.com/fesh0r/fernflower ,

JAD – donné ici uniquement pour des raisons historiques. Gratuit, pas de code source disponible, http://varaneckas.com/jad/ Outdated, non supporté et ne décomstack pas correctement Java 5 et les versions ultérieures.

Vous pouvez tester les décompilateurs mentionnés ci-dessus en ligne, aucune installation requirejse et faire votre propre choix.

Décompilateurs Java dans le cloud: http://www.javadecomstackrs.com/

Il existe quelques programmes que vous pouvez utiliser. Vous obtiendrez le code Java réel, mais parfois le code aura été obscurci, les méthodes sont nommées par une lettre ou un chiffre ou par un mélange aléatoire de lettres et de chiffres.

DJ Decomstackr Mocha

La plupart des décompilateurs pour Java sont basés sur JAD . C’est un excellent outil, mais il n’a malheureusement pas été mis à jour depuis un moment 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+.

Jetez un oeil à cavaj .

Tous les liens JAD répertoriés jusqu’à présent semblent être cassés, alors j’ai trouvé ce site. Fonctionne très bien (pour Linux au moins)! Sur Ubuntu 11.10, je devais télécharger le fichier statique pour une raison quelconque.

http://www.varaneckas.com/jad

  • JAD est celui qui fonctionne et est simple.

  • De plus, si vous voulez simplement voir les méthodes, utilisez javap.

Si vous voulez voir comment le compilateur Java fait certaines choses, vous ne voulez pas la décompilation, vous voulez le 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 posez des questions sur l’optimisation du compilateur, c’est probablement la seule information qui vous intéresse.

Quoi qu’il en soit, j’ai écrit un désassembleur Java open source . À la différence de Javap, cela fonctionne même dans les classes hautement pathologiques, de sorte que vous pouvez voir quels sont les outils d’obfuscation apportés à vos classes. Il peut aussi faire de la décompilation, bien que je ne le recommande pas.

JAD ne fonctionne pas pour moi (problème avec Ubuntu 11.10), alors j’ai avancé et jeté sur JODO . Au moins, il a le code source Open Java et a été capable de décomstackr correctement ma classe .

Je recommande de vérifier d’abord la twig «twigs / générique» . Les troncs ne sont pas stables.

Sur la plate-forme IntelliJ IDEA, vous pouvez utiliser Java Decomstackr 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 fameux outils JD-GUI .

entrer la description de l'image ici

Avec AndroChef Java Decomstackr, vous pouvez décomstackr les fichiers de classe apk , dex, jar et java. C’est simple et facile. AndroChef JD est basé sur FernFlower . Vous pouvez l’évaluer en 10 utilisations gratuites.

AndroChef prend en charge les fonctionnalités du langage Java telles que les génériques, les énumérations et les annotations. Selon certaines études, AndroChef Java Decomstackr est capable de décomstackr 98,04% des applications Java générées avec les compilateurs Java traditionnels – un taux de récupération très élevé. C’est un outil simple mais puissant qui vous permet de décomstackr le bytecode Java et Dalvik (DEX, APK) en source Java lisible.

Pour OSX je recommande: jarzilla ou JD-GUI

Ils vous permettent tous les deux de voir le pot, la guerre, etc. contenu de fichier et décomstack tous les fichiers de classe à l’intérieur d’eux.

Jarzilla: https://code.google.com/p/jarzilla/
JD-GUI: http://jd.benow.ca/