HOWTO · Java
Descompilar clase Java
Aprenda a inspeccionar archivos .class y JAR de Java con Eclipse, IntelliJ IDEA, descompiladores de línea de comandos y JD-GUI.
En esta página
Para inspeccionar código Java compilado, abra un archivo .class independiente en un IDE o descompilador, o explore un archivo .jar con una herramienta que admita archivos comprimidos. Eclipse IDE con Enhanced Class Decompiler (ECD) e IntelliJ IDEA pueden mostrar el código fuente reconstruido; JD-CLI y FernFlower ofrecen flujos de trabajo de línea de comandos, mientras que JD-GUI proporciona una interfaz navegable. La descompilación ayuda a explicar el comportamiento cuando el código fuente no está disponible, pero no puede restaurar el original exactamente: los comentarios y el formato están ausentes del bytecode, y los nombres o la estructura pueden diferir.
Decompilar es uno de los temas a nivel de clase del Tutorial de Java, en el grupo de clases y métodos.
Motivos para descompilar una clase Java
Un archivo .class compilado contiene bytecode de Java de una clase. Un archivo .jar es un archivo comprimido que puede contener archivos de clase, imágenes, configuración y otros recursos. Puede listar o extraer un archivo comprimido con herramientas ZIP; la descompilación es útil cuando desea código legible de una de sus clases compiladas.
Los desarrolladores suelen inspeccionar las clases compiladas para comprender una biblioteca, investigar un comportamiento o comprobar qué se empaquetó. Elija un IDE cuando ya trabaje en uno, un descompilador de línea de comandos cuando necesite procesar archivos de forma repetible, o JD-GUI cuando desee explorar las clases de forma interactiva. Por lo general necesita acceso al archivo y una herramienta que pueda leer su formato; el hecho de que un archivo sea un JAR no significa por sí solo que tenga restricciones de permisos.
Descompilador de Java
Un descompilador de Java analiza el bytecode y reconstruye código Java similar al fuente. El resultado es una aproximación, no una recuperación del proyecto original. El compilador normalmente elimina los comentarios y el formato del código fuente. Según las opciones del compilador y los metadatos de depuración disponibles, también pueden faltar los nombres de las variables locales y la información de líneas. Un JAR es un archivo comprimido de archivos, mientras que un archivo .class es una clase compilada individual; un descompilador puede aceptar cualquiera de los dos, según la herramienta.
Para una inspección rápida, use IntelliJ IDEA o Eclipse IDE. Para un flujo de trabajo en terminal, use JD-CLI o FernFlower. Para explorar un JAR y seleccionar clases en una ventana, use JD-GUI. La descripción general de los descompiladores de Java proporciona contexto adicional sobre las herramientas.
Descompilar una clase Java con Eclipse IDE
Instale el complemento Enhanced Class Decompiler (ECD) desde Eclipse Marketplace y, a continuación, asocie los archivos de clase a su editor:
- Abra Help y elija Eclipse Marketplace. Busque Enhanced Class Decompiler y siga las indicaciones de instalación.
- Abra Window > Preferences y, a continuación, elija General > Editors > File Associations.
- Seleccione el tipo de archivo
*.class. En la lista de editores asociados, elija el editor del descompilador ECD y establézcalo como predeterminado si desea que los archivos de clase se abran allí. - Aplique la preferencia y, después, abra un archivo
.classen el explorador de proyectos o de paquetes (Project o Package Explorer).
Las etiquetas de los menús pueden variar ligeramente entre versiones de Eclipse. Si el archivo se abre en otro editor, vuelva a File Associations y compruebe que el editor del descompilador esté seleccionado para los archivos *.class.
Descompilar una clase Java con IntelliJ IDEA
IntelliJ IDEA puede mostrar el código fuente descompilado de los archivos de clase que puede resolver, incluidas las clases de las bibliotecas. Abra la clase desde la vista Project o navegue hasta ella por su nombre; el IDE presenta una vista del código reconstruido. Esto es útil para inspeccionar sin una configuración de descompilador aparte. El código mostrado sigue derivándose del bytecode y no es el archivo fuente original.
Descompilar una clase Java mediante la línea de comandos
Los descompiladores de línea de comandos son útiles cuando desea procesar un archivo de entrada o un archivo comprimido conocidos. Instale un entorno de ejecución de Java compatible y obtenga la herramienta de su proyecto. Consulte las instrucciones de uso que acompañan a esa versión concreta: la sintaxis de los comandos, las opciones y las formas de entrada aceptadas pueden diferir entre compilaciones. Aquí no se incluye ningún comando específico de una herramienta, porque no se ha verificado ninguna invocación para las versiones mencionadas.
Usar JD-CLI
JD-CLI es un descompilador de Java de línea de comandos. Indique las rutas del ejecutable y de la entrada, y después use la opción de salida documentada por la versión que descargó. Compruebe en la ayuda o la documentación de esa versión si acepta una clase independiente, un JAR o ambos, y dónde escribe el código reconstruido. Descargue JD-CLI desde intoolswetrust/jd-cli y siga la documentación de uso de esa compilación.
Usar FernFlower
FernFlower es otro descompilador de Java. Indique el descompilador, una clase o archivo fuente y un directorio de destino con la sintaxis documentada para su compilación. Compruebe si esa versión acepta una clase independiente además de un JAR y si requiere ajustes adicionales. Del mismo modo, aquí no se incluye ninguna invocación verificada de FernFlower.
El espejo de FernFlower contiene información del proyecto y de la compilación. Un checkout del código fuente puede requerir una configuración de Gradle compatible para compilarse; para una inspección rutinaria, use una versión empaquetada cuando el proyecto la ofrezca. Los comandos de compilación y de descompilación dependen de la versión seleccionada y de la instalación local de Java/Gradle, por lo que no se presentan aquí como pasos de ejecución verificados.
Descompilar una clase Java con JD-GUI
JD-GUI es un descompilador gráfico de Java para abrir archivos de clase y explorar las clases de los archivos JAR. Descargue una versión compatible desde el sitio del proyecto JD-GUI. Abra un archivo .class o un JAR mediante el selector de archivos de la aplicación y, a continuación, seleccione una clase en el panel de navegación para inspeccionar su código reconstruido. Los menús exactos varían según la versión.
Este programa completo de Java imprime un saludo y es adecuado para compilarlo antes de abrir su archivo de clase en JD-GUI.
public class Example1 {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
Su salida estándar es:
Hello World
Cuando inspeccione la clase compilada, JD-GUI puede mostrar el parámetro args con un nombre diferente, como paramArrayOfString, y omitir cualquier comentario del código fuente. Los comentarios y el formato no se almacenan en el bytecode ordinario de las clases. Los metadatos de depuración, cuando están presentes, pueden conservar algunos nombres o información de líneas; usar un depurador durante la compilación no hace por sí solo que una clase sea más legible. Trate el código reconstruido como una guía del comportamiento y consulte el código fuente original cuando importen los comentarios, los nombres o la estructura exactos del proyecto.