¿Cómo puedo abrir archivos Java .class de una manera legible para los humanos?

Estoy tratando de descubrir 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.

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

  • Entorno == Windows w / VS 2008 instalado.

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

Si no te importa leer bytecode, javap debería funcionar bien. Es parte de la instalación estándar de JDK.

Usage: javap  ... where options include: -c Disassemble the code -classpath  Specify where to find user class files -extdirs  Override location of installed extensions -help Print this usage message -J Pass  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  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 

Si desea un descomstackdor de Java, puede usar la herramienta de línea de comandos javap para hacerlo. Además, Java Decompiler HOW-TO describe cómo puede descomstackr un archivo de clase.

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

lo que estás buscando es un comstackdor 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 igual a lo 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.

cpuguru, si su applet ha sido comstackdo 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 comstackdo con un comstackdor más reciente, puede probar JD-GUI : este decomstackdor está en desarrollo, sin embargo, genera fonts correctas de Java, la mayoría de las veces, para las clases comstackdas con los JDK 1.4, 1.5 o 1.6.

DarenW, gracias por tu publicación. JD-GUI aún no es el mejor decomstackdor … pero estoy trabajando en 🙂

Eso es código comstackdo, necesitarás usar un descomstackdor como JAD: http://www.kpdus.com/jad.html

Necesitas usar un descomstackdor. 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 generics, debido a borrado.

JAD y / o JADclipse Eclipse plugin, seguro.

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

jd-gui ” http://code.google.com/p/innlab/downloads/detail?name=jd-gui-0.3.3.windows.zip&can=2&q= ” es la mejor opción y fácil de usar para descomstackr .class archivo….

Como se sugiere, puede usar JAD para descomstackrlo 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.

JAD es una excelente opción si quieres un código Java legible como resultado. Sin embargo, si realmente quieres profundizar en las .class internas del formato de archivo .class , vas a querer javap . Se incluye con el JDK y le permite “descomstackr” 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 lo desea, puede abrir cualquier archivo .class en un editor hexadecimal y leer directamente el bytecode. El resultado es idéntico al uso de javap .

No hay necesidad de descomstackr 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 decomstackdo. Puede encontrar comprimido en src.zip (ubicado en su carpeta de instalación JDK).

CFR: otro descomstackdor de Java es un gran decomstackdor para Java moderno escrito en Java 6.

Como lo señaló @MichaelMyers, use

 javap -c  

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

 javap -c  > decompiled.txt 

también puede usar los descomstackdores en línea java disponibles. Por ejemplo, http://www.javadecompilers.com