Un descompilador de Java es un tipo especial de descompilador que toma un archivo de clase como entrada y produce código fuente de Java como salida. La descompilación es exactamente el proceso inverso a la compilación. Por tanto, el descompilador no produce una réplica del código fuente. Esto se debe a que se perdió un poco de información del código fuente durante la compilación del programa.
Pero hay muchas complejidades, por ejemplo, el código Java está estructurado y el código de bytes no está estructurado. Además, la transformación no es uno a uno: dos programas Java diferentes pueden producir un código de bytes idéntico.
Hay los siguientes descompiladores de Java disponibles:
ssh forma completa
- Descompilador DJ Java
- JReversePro
- JUDÍOS
- JD-CORE/JD-GUI/JD Eclipse
Descompilador JAD
JAD es una aplicación de línea de comandos. Está escrito en C++. La función principal es desmontar los archivos .class. JAD se puede implementar desde la consola y descompilará las clases de Java en el código fuente. De esta manera, los desarrolladores pueden profundizar en el código de las bibliotecas de tiempo de ejecución de Java e incluso embellecer las líneas, preparándolas para una recompilación. Existe el riesgo de sobrescribir los archivos de código fuente, especialmente cuando se utiliza el parámetro '-o' (sobrescribir archivos de salida sin confirmación).
Ejemplo
Creemos un programa Java simple que sume dos números.
import java.util.*; class DecompilerDemo { public static void main(String args[]) { int a,b,c; Scanner sc=new Scanner(System.in); System.out.print('Enter the value of a: '); a=sc.nextInt(); System.out.print('Enter the value of b: '); b=sc.nextInt(); c=a+b; System.out.println('sum of a and b is: '+c); } }
Siga los pasos para convertir el .class en código fuente Java legible. Aquí estamos usando el descompilador JAD.
Paso 1: Descargue la herramienta JAD desde https://bit.ly/2XuRzT5
Paso 2: Extraiga el archivo zip y obtenga jad.exe.
Paso 3: Cree un archivo .java (DecompilerDemo.java) en la misma carpeta en la que extrajo el archivo zip.
Etapa 4: Compile y ejecute el archivo .java. Generará un archivo .class en la carpeta respectiva.
Paso 5: Ahora mueva el archivo .class y la aplicación jad a otra carpeta.
Paso 6: Escriba el comando: jad DecompilerDemostración
El comando anterior genera un archivo .jad en la carpeta respectiva.
Paso 7: Escriba el comando: jad ?s java DecompilerDemo
si no si no si java
Genera el archivo .java en la misma carpeta.
Abra DecompilerDemo.java y obtenemos el siguiente código:
// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov. // Jad home page: http://www.kpdus.com/jad.html // Decompiler options: packimports(3) // Source File Name: DecompilerDemo.java import java.io.PrintStream; import java.util.Scanner; class DecompilerDemo { DecompilerDemo() { } public static void main(String args[]) { Scanner scanner = new Scanner(System.in); System.out.print('Enter the value of a: '); int i = scanner.nextInt(); System.out.print('Enter the value of b: '); int j = scanner.nextInt(); int k = i + j; System.out.println((new StringBuilder()).append('sum of a and b is: ').append(k).toString()); } }
Podemos observar que el archivo .java escrito es diferente del archivo .java generado pero da el mismo resultado.
Desensamblador de archivos de clase Java
Comando javap
El javap es una herramienta de línea de comandos de Java que viene con JDK. Se utiliza para desmontar el archivo de clase e imprime una versión legible por humanos de esa clase. Su salida depende de la opción utilizada. Sin utilizar ninguna opción, javap imprime el paquete, los campos públicos y protegidos y los métodos de las clases que se le pasan. A javap También se utiliza para averiguar qué métodos están disponibles para una clase si no se tiene el código fuente que se utilizó para crear la clase. El formato general del comando javap es:
javap [options] filename
Opciones
Con el comando javap, hay muchas opciones disponibles. Algunos de ellos son:
Desensamblar un archivo de clase usando el comando javap
class DisassembleDemo { public static void main(String args[]) { System.out.println('Java'); } }
Genere el archivo de clase del programa anterior y use el siguiente comando para desmontar el archivo de clase.
javap -c -p DisassembleDemo
Producción
El siguiente resultado muestra lo que tiene el archivo de clase dentro.
Pero no obtenemos el código fuente de Java utilizando el comando javap. Por tanto, hay muchos descompiladores disponibles que convierten un archivo .class en un archivo .java.