Comment puis-je ouvrir Java.fichiers de classe d'une manière lisible par l'homme?


J'essaie de comprendre ce que fait le fichier de classe d'une applet Java sous le capot. En l'ouvrant avec le bloc-notes ou Textpad montre juste un tas de charabia.

Y a-t-il un moyen de le remobiliser dans un format quelque peu lisible afin que je puisse essayer de comprendre ce qu'il fait?

  • Environnement == Windows w/ VS 2008 installé.
Author: Pops, 2008-09-17

17 answers

Jd-gui est le meilleur décompilateur pour le moment. il peut gérer les nouvelles fonctionnalités en Java, par rapport au JAD poussiéreux.

 187
Author: DarenW, 2013-10-19 02:20:22

Si cela ne vous dérange pas de lire le bytecode, javap devrait fonctionner correctement. Il fait partie de l'installation JDK standard.

Usage: javap <options> <classes>...

where options include:
   -c                        Disassemble the code
   -classpath <pathlist>     Specify where to find user class files
   -extdirs <dirs>           Override location of installed extensions
   -help                     Print this usage message
   -J<flag>                  Pass <flag> directly to the runtime system
   -l                        Print line number and local variable tables
   -public                   Show only public classes and members
   -protected                Show protected/public classes and members
   -package                  Show package/protected/public classes
                             and members (default)
   -private                  Show all classes and members
   -s                        Print internal type signatures
   -bootclasspath <pathlist> Override location of class files loaded
                             by the bootstrap class loader
   -verbose                  Print stack size, number of locals and args for methods
                             If verifying, print reasons for failure
 67
Author: Michael Myers, 2008-09-16 20:08:16

Vous voulez un décompilateur java, vous pouvez utiliser l'outil de ligne de commande javap pour ce faire. En outre, Java Decompiler HOW-TO décrit comment décompiler un fichier de classe.

 7
Author: Drew Frezell, 2008-09-16 20:05:14

Utiliser Jad décompiler, il est probablement votre meilleure option. À moins que le code n'ait été obscurci, il produira un résultat correct.

 2
Author: Rasmus Faber, 2008-09-16 20:03:26

Ce que vous recherchez est un dé-compilateur java. Je recommande JAD http://www.kpdus.com/jad.html Il est gratuit pour un usage non commercial et fait le travail.

Remarque: cela ne va pas rendre le code exactement le même que ce qui a été écrit. c'est-à-dire que vous allez perdre des commentaires et éventuellement des noms de variables, donc ce sera un peu plus difficile que de simplement lire du code source normal. Si le développeur est vraiment secret, il aura également obscurci son code, ce qui le rendra encore plus difficile à lire.

 2
Author: David Beleznay, 2008-09-16 20:05:58

Cpuguru, si votre applet a été compilé avec javac 1.3 (ou moins), votre meilleure option est d'utiliser Jad.

Malheureusement, le dernier JDK supporté par JAD 1.5.8 (14 avril 2001) est JDK 1.3.

Si votre applet a été compilé avec un compilateur plus récent, vous pouvez essayer JD-GUI: ce décompilateur est en cours de développement, néanmoins, il génère des sources Java correctes, la plupart du temps, pour les classes compilées avec les JDKs 1.4, 1.5 ou 1.6.

DarenW, merci pour votre message. JD-GUI n'est pas encore le meilleur décompilateur ... mais je travaille sur:)

 2
Author: Emmanuel Dupuy, 2008-12-23 17:56:50

C'est du code compilé, vous devrez utiliser un décompilateur comme JAD: http://www.kpdus.com/jad.html

 1
Author: cynicalman, 2008-09-16 20:03:44

, Vous devez utiliser un décompilateur. D'autres ont suggéré JAD, il y a d'autres options, JAD est le meilleur.

Je vais faire écho aux commentaires que vous risquez de perdre un peu par rapport au code source d'origine. Il va s'intéresser particulièrement drôle si le code utilisé génériques, en raison de l'effacement.

 1
Author: Zac Gochenour, 2008-09-16 20:12:50

JAD et / ou JADclipse Eclipse plugin, à coup sûr.

 1
Author: John Gardner, 2008-09-16 20:35:47

Si le fichier de classe que vous souhaitez examiner est open source, vous ne devez pas le décompiler, mais plutôt attacher les fichiers source directement dans votreE. de cette façon, vous pouvez simplement afficher le code d'une classe de bibliothèque comme s'il s'agissait de la vôtre

 1
Author: arturh, 2009-05-13 10:54:10

Jd-gui " http://code.google.com/p/innlab/downloads/detail?name=jd-gui-0.3.3.windows.zip&can=2&q= " est la meilleure option pour décompiler.fichier de classe....

 1
Author: Karthikeyan Subramanian, 2013-09-27 10:05:57

Comme suggéré, vous pouvez utiliser JAD pour le décompiler et afficher les fichiers. Pour faciliter la lecture, vous pouvez utiliser le plugin JADclipse pour eclipse pour intégrer JAD directement à eclipse ou utiliser DJ Java Decompiler qui est beaucoup plus facile à utiliser que la ligne de commande JAD

 0
Author: , 2008-09-16 20:07:55

JAD est une excellente option si vous voulez du code Java lisible en conséquence. Si vous voulez vraiment creuser dans les internes du format de fichier .class, vous allez vouloir javap. Il est fourni avec le JDK et vous permet de "décompiler" le bytecode hexadécimal en ASCII lisible. Le langage qu'il produit est toujours bytecode (pas quelque chose comme Java), mais il est assez lisible et extrêmement instructif.

Aussi, {si vous[7]}vraiment voulez, vous pouvez ouvrir n'importe quel .class fichier dans un éditeur hexadécimal et lire le bytecode directement. Le résultat est identique à l'utilisation de javap.

 0
Author: Daniel Spiewak, 2008-09-16 20:09:25

Il n'est pas nécessaire de décompiler l'applet.classe. Les classes d'API Java publiques sourcecode sont fournies avec le JDK (si vous choisissez de l'installer) et sont mieux lisibles que le bytecode décompilé. Vous pouvez trouver compressé dans src.zip (situé dans votre dossier d'installation JDK).

 0
Author: Arno, 2008-09-16 20:45:34

CFR-another java decompiler est un excellent décompilateur pour Java moderne écrit i Java 6.

 0
Author: tidbeck, 2017-01-18 13:54:18

Comme l'a souligné @MichaelMyers, utilisez

javap -c <name of java class file> 

Pour obtenir le code assembleur JVM. Vous pouvez également rediriger la sortie vers un fichier texte pour une meilleure visibilité.

javap -c <name of java class file> > decompiled.txt
 0
Author: Nilashish C, 2018-02-16 15:51:07

Vous pouvez également utiliser les décompilateurs java en ligne disponibles. Pour par exemple http://www.javadecompilers.com

 0
Author: Prachi Sharma, 2018-02-23 11:50:23