web-dev-qa-db-fra.com

Décompilateur Java

Pouvez-vous recommander un décompilateur Java pour Eclipse? Mes autres questions sont les suivantes: quelles sont les restrictions à l'utilisation d'un code décompilé provenant d'un autre programme Java? Illégal ou quoi? Je ne sais pas beaucoup sur les licences. Merci d'avoir lu.

21
MartK

Je suggérerais celui qui apparaît sur google, qui est le JD décompilateur Java . Il fonctionne vraiment bien. 

En ce qui concerne les restrictions, il vous faudrait lire une licence de logiciel particulier, il pourrait être écrit que toute méthode de décompilation est interdite. 

30
Mirek Pluta

J'aime JadClipse - mais cela montre son âge par endroits. Tu auras besoin de:

  • un binaire jad
  • jadClipse installé
  • pointer les préférences Eclipse vers le binaire jad ci-dessus
  • lui dire de produire des numéros de ligne et de s'aligner pour le débogage

Il y a plusieurs lacunes:

  • le code est produit séquentiellement, si le code d'octet a été réarrangé de manière à ce que quelque chose vienne tard dans le code d'octet mais apparaisse plus tôt dans la source d'origine, le jad ne rembobine pas pour mettre le code désassemblé sur la bonne ligne. 
  • jad ne comprend pas très bien le bytecode Java 5 + 6.

J'ai utilisé ce plugin Eclipse: JadClipse

et ce décompilateur Java: JAD

5
treaz

J'ai essayé plusieurs décompilateurs et la plupart d'entre eux n'ont pas réussi à produire une source correcte pour l'applet que je tentais de décompiler (qui était http://mrl.nyu.edu/~perlin/experiments/emotive-actors/ , au cas où quelqu'un voudrait se reproduire).

Celui qui a parfaitement fonctionné était Cavaj 1.11 , le code qu’il génère ne contient aucune erreur de syntaxe et l’applet compilée à partir des sources est identique à l’original. Ce qui me manquait du côté de l'interface utilisateur était: Les raccourcis clavier Ctrl-A/Ctrl-C ne fonctionnaient pas et aucune conversion par lots n'était disponible.

Les autres décompilateurs que j'ai essayés étaient:

  • JD Java decompiler (freeware) a l'air sympa, mais il a commis beaucoup d'erreurs avec les déclarations de variables (certaines déclarations manquaient, d'autres étaient mal placées)
  • Neshkov DJ Java Decompiler (shareware) a également l’air sympa, le code qu’il a généré contenait moins d’erreurs de syntaxe que JD, mais le code ne fonctionnait pas. Étant donné que le produit n'est pas gratuit, on pourrait en attendre un peu plus.
5
Suma

JD est le meilleur décompresseur Java que je connaisse.

2
secmask

Je ne peux pas répondre à votre première question: ce serait partial, peut-être ...

Concernant votre deuxième question, la décompilation est légale. Ce point est très important pour moi. Jetez un oeil sur cette page intéressante: http://www.program-transformation.org/Transform/LegalityOfDecompilation

2
Emmanuel Dupuy

J'ai trouvé JD très bon. Cependant, je suis tombé sur un ou deux bugs mineurs qui ont entraîné un comportement inattendu au moment de l'exécution.

Par exemple, j'ai eu un exemple où l'instruction de cas originale n'avait pas de "pause" sur le dernier nœud (parce que cela est naturellement inutile), mais parce que JD a fini par réorganiser les nœuds, cela signifiait que le cas "par défaut" était appelé de façon inattendue. J'ai également eu un problème avec les jeux de caractères pour lesquels j'avais besoin d'appels supplémentaires toString () à la fin de la session pour pouvoir se déconnecter comme prévu. A part ça, c'était génial!

J'ai utilisé un autre décompilateur DJ pour m'aider à comprendre ce qui n'allait pas avec le code décompilé par JD. Mais il y avait d'autres choses que DJ ne pouvait pas gérer, alors je suppose qu'un mélange des deux décompilateurs a fonctionné pour moi :)

J'espère que M. Dupuy lira ceci!

1
Matthew Paterson