Question

Quel programme puis-je utiliser pour décompiler un fichier de classe? Vais-je réellement obtenir du code Java ou s'agit-il uniquement du code assembleur JVM?

En ce qui concerne les performances Java sur ce site, je vois souvent les réponses de personnes qui ont "décompilé". le fichier de classe Java pour voir comment le compilateur optimise certaines choses.

Était-ce utile?

La solution

Mise à jour de février 2016:

www.javadecompilers.com répertorie JAD comme étant:

  

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

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

Le même site répertorie d'autres outils.

Et javadecompiler, comme indiqué par Salvador Valence dans les commentaires (septembre 2017), propose un SaaS dans lequel vous importez le .class fichier sur le nuage et il vous renvoie le code décompilé.

Réponse originale: octobre 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 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 aujourd'hui sur Internet, tels que & # 8220; DJ Java Decompiler & # 8221; ou & # 8220; Cavaj Java Decompiler & # 8221 ;, sont alimentés par JAD: ils ne peuvent pas afficher les sources Java 5.

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

  • Prise en charge explicite de la décompilation et de l'analyse Java 5 + & # 8220; .class & # 8221; fichiers.
  • Une belle interface graphique:

capture d'écran

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

Il propose une version de démonstration en direct en ligne entièrement fonctionnelle! Vous pouvez simplement déposer un fichier JAR sur la page et voir le code source décompilé sans rien installer.

Autres conseils

Il existe quelques décompilateurs ... Une recherche rapide donne:

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

Et beaucoup d'autres.

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

Pour voir le code source Java, vérifiez un décompilateur. Recherchez jad .

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

J'en ai essayé plusieurs, et Procyon a semblé fonctionner de mon mieux. Il est en cours de développement et supporte de nombreuses fonctionnalités des dernières versions de Java.

Ce sont les autres que j'ai essayés:

  • CFR
    • Décompilation de méthodes prometteuse, mais souvent infructueuse. Je vais garder mes yeux sur celui-ci. Développé activement avec prise en charge des dernières fonctionnalités de Java.
  • Krakatau
    • Adopte une approche différente en ce sens qu’il essaie de générer un code Java équivalent au lieu d’essayer de reconstruire le code source, ce qui pourrait le rendre meilleur pour le code obscurci. D'après mes tests, c'était à peu près à la hauteur de Procyon, mais quand même agréable d'avoir quelque chose de différent. J'ai dû utiliser l'indicateur de ligne de commande -skip pour que cela ne s'arrête pas en cas d'erreur. Développé de manière active et assez intéressant, il est écrit en Python.
  • JD-GUI
  • JAD
    • Fonctionne, mais ne supporte que Java 1.4 et inférieur. Également disponible en tant que plug-in Eclipse . N'est plus en développement.

J'utilise JAD Decompiler .

Il existe un plug-in Eclipse , jadeclipse . C'est assez sympa.

Procyon comprend un décompilateur. Ce sont des logiciels libres.

Soot est une option pour le code Java plus récent. Au moins, il a l'avantage d'être encore récemment maintenu ...

De même, Le décompilateur Java est un décompilateur doté à la fois d'un seule interface graphique et intégration Eclipse.

Enfin, Jdec n'a pas été mentionné, bien que ce ne soit pas aussi raffiné. comme d'autres options.

JD-GUI est vraiment bon. Vous pouvez simplement ouvrir un fichier JAR et parcourir le code comme si vous travaillez sur un IDE. Bonnes choses.

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

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

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

JD , gratuit pour les utilisateurs non commerciaux, http: //jd.benow .ca /

Fernflower , open-source, https://github.com/fesh0r/ Fleur de Fougère ,

JAD & # 8211; donné ici que pour des raisons historiques. Gratuit, aucun code source disponible, http://varaneckas.com/jad/ Obsolète, non pris en charge et ne décompile pas correctement Java 5 et versions ultérieures.

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

Les décompilateurs Java dans le cloud: http://www.javadecompilers.com//

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

DJ Decompiler Moka

La plupart des décompilateurs pour Java sont basés sur le JAD . C'est un excellent outil, mais malheureusement, il n'a 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+.

Consultez cavaj .

Tous les liens JAD répertoriés jusqu'à présent semblent être rompus. J'ai donc 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 en est un qui fonctionne et qui est simple.

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

Si vous voulez voir comment le compilateur Java fait certaines choses, vous ne voulez pas de décompilation, vous voulez un désassemblage. La décompilation implique la transformation du bytecode en source Java, ce qui signifie que beaucoup d’informations de bas niveau sont perdues. Si vous vous interrogez sur l’optimisation du compilateur, il s’agit probablement des informations qui vous intéressent.

Quoi qu'il en soit, j’ai écrit un désassembleur Java open source . Contrairement à Javap, cela fonctionne même sur les classes très pathologiques, vous pouvez ainsi voir ce que les outils d'obfuscation font à vos classes. Il peut également effectuer une décompilation, bien que je ne le recommande pas.

JAD ne fonctionnant pas pour moi (problème Ubuntu 11.10), je me suis donc avancé et arrêté sur JODO . Au moins, il a un code source Open Java et a été capable de décompiler correctement ma .class .

Je recommande de vérifier d'abord 'branches / generic' . Le tronc n'est pas stable.

Sur la plate-forme IntelliJ IDEA, vous pouvez utiliser le plug-in de décompression Java IntelliJ . 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 .

 entrer la description de l'image ici

Avec AndroChef Java Decompiler , vous pouvez décompiler des fichiers de classe apk, dex, jar et java. C'est simple et facile AndroChef JD est basé sur la 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 Decompiler est capable de décompiler 98,04% des applications Java générées avec des compilateurs Java traditionnels, ce qui représente un taux de récupération très élevé. C’est un outil simple mais puissant qui vous permet de décompiler le bytecode Java et Dalvik (DEX, APK) en une source lisible en Java.

Pour OSX, je recommande: jarzilla ou JD-GUI

Ils vous permettent tous les deux de visualiser le pot, la guerre, etc. contenu du fichier et décompile tous les fichiers de classe qu’ils contiennent.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top