Descompilar clase Java

Haider Ali 12 octubre 2023
  1. Razones para descompilar una clase Java
  2. Descompilador de Java
  3. Descompilar la clase Java usando Eclipse IDE
  4. Descompilar la clase Java usando IntelliJ IDEA
  5. Descompilar la clase Java mediante la línea de comandos
  6. Descompilar la clase Java usando JD-GUI
Descompilar clase Java

En esta guía, aprenderemos sobre el arte de descompilar un archivo .class de Java. Veremos una breve descripción general de la descompilación, cómo descompilamos un archivo .class en Java y qué cambios podemos ver cuando descompilamos un archivo en Java.

Razones para descompilar una clase Java

Al menos una vez en su carrera como desarrolladores de Java, se encuentran con una situación en la que tienen que enfrentarse a archivos JAR o en la que tienen que descompilar un archivo .class a un código fuente.

Como sabemos, los archivos JAR son un paquete de archivo Java con una colección de diferentes archivos de clase Java y otros recursos como imágenes, audio, etc. Estos archivos están creados en formato ZIP y usan la extensión .jar.

El problema con los archivos JAR es que un usuario no tiene permiso para abrir este archivo. La única forma de acceder a estos archivos es si el usuario descompila el archivo JAR.

Para poder leer los archivos .class en el archivo, tendremos que usar herramientas de software para descompilar este archivo.

Por otro lado, con archivos .class podemos usar software como Eclipse IDE e IntelliJ IDEA. Además, los argumentos de la línea de comandos se pueden usar para descompilar un archivo .class.

Descompilador de Java

La descompilación está bajo la acción de la ingeniería inversa, ya que estamos descompilando un archivo JAR en un archivo de clase legible. Aprenderemos sobre esto más adelante en esta guía, pero primero, echemos un vistazo a los archivos .class.

Hay varias formas de descompilar un archivo .class. Todo se reduce a lo que es más adecuado para el usuario que trabaja con estos archivos.

Hay herramientas de software que ayudan con este proceso, pero también hay otras formas en las que podemos descompilar un archivo .class en nuestro código fuente. Dos de los métodos que estamos usando son software como Eclipse IDE e IntelliJ IDEA.

La ventaja más importante de usar estos dos es que los descompiladores son muy fáciles de usar. Veamos el software más utilizado, Eclipse IDE.

Hay algunos pasos que deberá seguir para esto.

Descompilar la clase Java usando Eclipse IDE

Se utiliza un complemento para descompilar un archivo .class; en este software, el complemento se llama Descompilador de clase mejorado (ECD). Enhanced Class Decompiler se puede instalar fácilmente desde el mercado del software, llamado Eclipse Marketplace.

  • Para ello, iremos a la opción Ir a ayuda y seleccionaremos Eclipse Marketplace.
  • Después de esto, busque Descompilador de clase mejorado. Después de esto, necesitamos configurar el ECD para que funcione correctamente.
  • Para configurar el ECD, hacemos clic en la opción Ir a la ventana del menú y luego hacemos clic en Preferencias.
  • Luego selecciona General, donde encontrarás la opción Editores del desplegable.
  • Después de hacer clic en la opción anterior, seleccione Asociación de archivos en otro menú desplegable.
  • Luego, finalmente, seleccione la opción *.class sin fuente.

Ahora se puede descompilar un archivo .class simplemente haciendo clic en él.

Descompilar la clase Java usando IntelliJ IDEA

La razón principal para usar este software es que no necesitamos descargar ni configurar un descompilador. Este software tiene un descompilador predeterminado, lo que facilita al usuario el uso de IntelliJ IDEA.

Todo lo que tenemos que hacer es abrir un archivo .class en IntelliJ IDEA, que descompilará automáticamente ese archivo.

Descompilar la clase Java mediante la línea de comandos

Otro método para descompilar un archivo .class es mediante la línea de comandos. Este método viene con tres opciones. Depende totalmente del usuario elegir.

Usar JD-CLI

JD-CLI se utiliza para sentencias de una sola línea de comandos. Solo se necesita un comando para descompilar un archivo de clase.

Este es el comando utilizado para descompilar un archivo de clase:

java - jar jd - cli.jar[class - file]

Podemos descargar este descompilador haciendo clic aquí: intoolswetrust/jd-cli: Command Line Java Decompiler (github.com).

Usar flor de helecho

FernFlower es otro descompilador descargado al sistema para descompilar un archivo .class.

Tendríamos que clonar este descompilador para poder usar FernFlower. Lo hacemos haciendo clic aquí: fesh0r/fernflower: Espejo no oficial de FernFlower Java Decompiler (github.com).

Estos son los comandos usados para clonar:

git clone https: // github.com/fesh0r/fernflower
cd fernflower
gradle build

Para descompilar un archivo, use este comando.

java - jar fernflower.jar[path to JAR or.class file][directory to store the decompiled files]

Descompilar la clase Java usando JD-GUI

Descompilar un archivo JAR es diferente a un archivo .class. El descompilador de Java es la herramienta de software más utilizada para descompilar un archivo JAR.

Esta herramienta se puede descargar fácilmente. Se pueden descargar diferentes versiones de este software según lo requiera el usuario haciendo clic aquí.

Entre estas versiones, JD-GUI es la versión de interfaz de usuario más conocida del descompilador de Java. JD-GUI es una aplicación que permitirá al usuario ver los archivos de clase ocultos en los archivos JAR.

Tenga en cuenta que la información de bajo nivel, como los comentarios en un archivo .class, desaparecerá. También hay posibilidades de que desaparezcan algunos nombres de variables originales, pero eso depende de la opción que elija el usuario durante la compilación.

Si se usó un depurador durante la compilación, tenga la seguridad de que el archivo .class estará en una forma más legible ya que no obtenemos el mismo código fuente.

Entendamos mejor este concepto con la ayuda de un ejemplo simple de Hola Mundo usando comentarios.

class Example1 {
  public static void main(String[] args) {
    // This is the comment used.
    System.out.println("Hello World");
  }
}

Cuando descompilemos este archivo HelloWorld que ahora mismo está en forma de archivo JAR, obtendremos este archivo .class como salida.

Producción :

class Example1
{
    public static void main(String[] paramArrayOfString){System.out.println("Hello World");}
}

Como puedes ver, la clara diferencia entre estos dos archivos es que los comentarios han desaparecido y el cambio visible en el parámetro del método principal.

Al final, depende del usuario qué herramienta de software usar para descompilar un archivo JAR de Java, ya que hay muchas opciones.

Autor: Haider Ali
Haider Ali avatar Haider Ali avatar

Haider specializes in technical writing. He has a solid background in computer science that allows him to create engaging, original, and compelling technical tutorials. In his free time, he enjoys adding new skills to his repertoire and watching Netflix.

LinkedIn

Artículo relacionado - Java Class