logo

Descompilador de Java

Un descompilador de Java és un tipus especial de descompilador que pren un fitxer de classe com a entrada i produeix el codi font de Java com a sortida. La descompilació és exactament el procés invers de la compilació. Per tant, el descompilador no produeix una rèplica del codi font. És perquè es va perdre una mica d'informació del codi font durant la compilació del programa.

Però hi ha moltes complexitats, per exemple, el codi Java està estructurat i el codi byte no està estructurat. A més, la transformació no és d'un a un: dos programes Java diferents poden produir el mateix codi de bytes.

Hi ha disponibles els següents descompiladors de Java:

  • DJ Java Descompiler
  • JReversePro
  • jueus
  • JD-CORE/ JD-GUI/ JD Eclipse

Descompilador JAD

El JAD és una aplicació de línia d'ordres. Està escrit en C++. La funció principal és desmuntar els fitxers .class. El JAD es pot desplegar des de la consola i descompilar les classes Java al codi font. D'aquesta manera, els desenvolupadors poden aprofundir en el codi de les biblioteques d'execució de Java i fins i tot embellir les línies, preparant-les per a una recompilació. Hi ha un risc de sobreescriure dels fitxers de codi font, especialment quan s'utilitza el paràmetre '-o' (sobreescriure fitxers de sortida sense confirmació).

Exemple

Creem un programa Java senzill que afegeixi 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); } } 

Seguiu els passos per convertir el .class en codi font de Java llegible. Aquí estem utilitzant el descompilador JAD.

Pas 1: Baixeu l'eina JAD de https://bit.ly/2XuRzT5

Pas 2: Extraieu el fitxer zip i obteniu jad.exe.

Descompilador de Java

Pas 3: Creeu un fitxer .java (DecompilerDemo.java) a la mateixa carpeta on heu extret el fitxer zip.

pitó tupla ordenat

Pas 4: Compileu i executeu el fitxer .java. Generarà un fitxer .class a la carpeta corresponent.

Descompilador Java 2

Pas 5: Ara moveu el fitxer .class i l'aplicació jad a una altra carpeta.

Descompilador Java 3

Pas 6: Escriviu l'ordre: jad DecompilerDemo

Descompilador Java 4

L'ordre anterior genera un fitxer .jad a la carpeta corresponent.

Descompilador Java 5

Pas 7: Escriviu l'ordre: jad ?s java DecompilerDemo

ipconfig gratuït
Descompilador Java 6

Genera el fitxer .java a la mateixa carpeta.

Descompilador Java 7

Obrim el DecompilerDemo.java obtenim el següent codi:

 // 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()); } } 

Podem observar que el fitxer .java escrit és diferent del fitxer .java generat però dóna la mateixa sortida.

Desensamblador de fitxers de classe Java

comanda javap

El javap és una eina de línia d'ordres Java que ve amb JDK. S'utilitza per desmuntar el fitxer de classe i imprimeix una versió llegible per l'home d'aquesta classe. La seva sortida depèn de l'opció utilitzada. Sense utilitzar cap opció, javap imprimeix el paquet, els camps protegits i públics i els mètodes de les classes que se li han passat. A javap també s'utilitza per esbrinar quins mètodes estan disponibles per a una classe si no teniu el codi font que s'ha utilitzat per crear la classe. El format general de l'ordre javap és:

 javap [options] filename 

Opcions

Amb l'ordre javap, hi ha moltes opcions disponibles. Alguns d'ells són:

    -c:Imprimeix codi desmuntat.-p:Mostra totes les classes i membres.-s:Imprimeix signatures de tipus intern.- constants:Mostra constants finals estàtiques.

Desmunteu un fitxer de classe mitjançant l'ordre javap

 class DisassembleDemo { public static void main(String args[]) { System.out.println('Java'); } } 

Genereu el fitxer de classe del programa anterior i utilitzeu l'ordre següent per desmuntar el fitxer de classe.

 javap -c -p DisassembleDemo 

Sortida

La sortida següent mostra què té el fitxer de classe dins.

Descompilador Java 8

Però no obtenim el codi font de Java mitjançant l'ordre javap. Per tant, hi ha molts descompiladors disponibles que converteixen un fitxer .class en un fitxer .java.