2008-09-16 17 views
87

Estoy tratando de averiguar qué hace un archivo de clase de un applet de Java bajo el capó. Abrirlo con el Bloc de notas o el Panel de texto solo muestra un montón de gobbledy-gook.¿Cómo puedo abrir archivos .class de Java de una manera legible para los humanos?

¿Hay alguna manera de rebatirlo en un formato algo legible para que pueda intentar descubrir qué está haciendo?

  • Entorno == Windows w/VS 2008 instalado.
+5

Sólo una cosa de semántica, ¿no debería ser uno = no dos? == es una pregunta while = es una declaración y estás haciendo una declaración sobre tu entorno. – icco

+0

¿Puedes aclarar esta pregunta? Mi primer pensamiento fue que quería leer el código de bytes real, pero parece que realmente quiere descompilar el código de otra persona. –

+11

@icco, = significa asignación, == significa igualdad. Él está diciendo que (Environment == Windows w/VS2008 installed) es verdadero, sin dar una orden para configurar Environment to Windows w/VS2008 instalado. Hombre que era oftálmico y nerd. – Blorgbeard

Respuesta

176

jd-gui es el mejor descompilador en este momento. puede manejar características más nuevas en Java, en comparación con el JAD polvoriento.

+1

¡Whoah! Simplemente probé esto (perdí mi computadora portátil y necesitaba recuperar algunas fuentes a toda prisa) y fue increíble. –

+3

guau, ¡genial! Estoy asombrado de lo útil que esta respuesta ha sido para otros. el voto lentamente se arrastra hacia arriba ... ¡y ni siquiera soy un experto en Java! pero amo las buenas herramientas. – DarenW

+0

Lo intenté ... genial. Uno debe usar ... muy fácil de manejar. Gracias a DarenW –

2

Usar Jad para descompilarlo es probablemente su mejor opción. A menos que el código haya sido ofuscado, producirá un resultado aceptable.

7

¿Quieres un descompilador de Java, puede utilizar la herramienta de línea de comandos javap para hacer esto. Además, Java Decompiler HOW-TO describe cómo puede descompilar un archivo de clase.

2

lo que está buscando es un compilador de Java. Recomiendo JAD http://www.kpdus.com/jad.html Es gratis para uso no comercial y hace el trabajo.

Nota: esto no hará que el código sea exactamente el mismo que el que se escribió. es decir, perderás comentarios y posiblemente nombres de variables, por lo que será un poco más difícil que solo leer el código fuente normal. Si el desarrollador es realmente reservado, también habrá ofuscado su código, lo que lo hará aún más difícil de leer.

0

Como se sugiere, puede usar JAD para descompilarlo y ver los archivos. Para facilitar la lectura puede usar el plugin JADclipse para eclipse para integrar JAD directamente en eclipse o usar DJ Java Decompiler, que es mucho más fácil de usar que la línea de comando JAD

63

Si no le molesta leer bytecode, javap debería trabaja bien. Es parte de la instalación estándar de JDK.

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 
+7

eso es genial. ¡No puedo creer que no supiera sobre esto! oh, necesito ir a jugar ... –

0

JAD es una excelente opción si desea un código Java legible como resultado. Si realmente desea profundizar en las partes internas del formato de archivo .class, va a querer javap. Se incluye con el JDK y le permite "descompilar" el bytecode hexadecimal en ASCII legible. El lenguaje que produce sigue siendo bytecode (nada parecido a Java), pero es bastante legible y extremadamente instructivo.

Además, si realmente quiere, puede abrir cualquier archivo .class en un editor hexadecimal y leer el bytecode directamente. El resultado es idéntico al uso de javap.

1

Necesita usar un descompilador. Otros han sugerido JAD, hay otras opciones, JAD es el mejor.

Me hará eco de los comentarios que puede perder un poco en comparación con el código fuente original. Va a ser especialmente divertido si el código usa genéricos, debido a borrado.

1

plugin de JAD y/o JADclipse Eclipse, seguro.

0

No hay necesidad de descompilar Applet.class. El código fuente de las clases API públicas de Java viene con el JDK (si elige instalarlo) y es mejor legible que el bytecode decompilado. Puede encontrar comprimido en src.zip (ubicado en su carpeta de instalación JDK).

1

Si el archivo de clase que desea examinar es de código abierto, no debe descompilarlo, sino que debe adjuntar los archivos de origen directamente a su IDE. De esta manera, puede ver el código de alguna clase de biblioteca como si fuera su propio

2

cpuguru, si su applet ha sido compilada con javac 1.3 (o menos), su mejor opción es usar Jad.

Desafortunadamente, el último JDK soportado por JAD 1.5.8 (14 de abril de 2001) es JDK 1.3.

Si su applet ha sido compilada con un compilador más reciente, puede intentar JD-GUI: este descompilador está en desarrollo, sin embargo, genera fuentes Java correctas, la mayoría de las veces, para las clases compiladas con los JDK 1.4, 1.5 o 1.6 .

DarenW, gracias por su publicación. JD-GUI no es la mejor decompilador aún ... pero estoy trabajando en :)

+0

buen trabajo con jd-gui .. – anacron

0

Como ha señalado @MichaelMyers, utilice

javap -c <name of java class file> 

para obtener el código ensamblador JVM. También puede redirigir la salida a un archivo de texto para una mejor visibilidad.

javap -c <name of java class file> > decompiled.txt 
Cuestiones relacionadas