Um descompilador Java é um tipo especial de descompilador que recebe um arquivo de classe como entrada e produz código-fonte Java como saída. A descompilação é exatamente o processo inverso da compilação. Assim, o descompilador não produz uma réplica do código-fonte. É porque um pouco de informação foi perdida do código-fonte durante a compilação do programa.
sistema de arquivos no linux
Mas existem muitas complexidades, por exemplo, o código Java é estruturado e o código de bytes não é estruturado. Além disso, a transformação não é um para um: dois programas Java diferentes podem produzir códigos de bytes idênticos.
Existem os seguintes descompiladores Java disponíveis:
- Descompilador DJ Java
- JReversePro
- JUDEUS
- JD-CORE/JD-GUI/JD Eclipse
Descompilador JAD
O JAD é um aplicativo de linha de comando. Está escrito em C++. A principal função é desmontar os arquivos .class. O JAD pode ser implementado a partir do console e descompilará as classes Java no código-fonte. Dessa forma, os desenvolvedores podem se aprofundar no código das bibliotecas Java runtime e até embelezar as linhas, preparando-as para uma recompilação. Existe o risco de sobrescrever arquivos de código-fonte, especialmente quando o parâmetro '-o' (sobrescrever arquivos de saída sem confirmação) é usado.
Exemplo
Vamos criar um programa Java simples que soma dois 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 as etapas para converter o .class em código-fonte Java legível. Aqui estamos usando o descompilador JAD.
Passo 1: Baixe a ferramenta JAD em https://bit.ly/2XuRzT5
Passo 2: Extraia o arquivo zip e obtenha jad.exe.
Etapa 3: Crie um arquivo .java (DecompilerDemo.java) na mesma pasta em que você extraiu o arquivo zip.
Passo 4: Compile e execute o arquivo .java. Irá gerar um arquivo .class na respectiva pasta.
Etapa 5: Agora mova o arquivo .class e o aplicativo jad para outra pasta.
Etapa 6: Digite o comando: jad DecompilerDemo
O comando acima gera um arquivo .jad na respectiva pasta.
Etapa 7: Digite o comando: jad ?s java DecompilerDemo
converter string em char
Ele gera o arquivo .java na mesma pasta.
Abra o DecompilerDemo.java e obtemos o seguinte 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 o arquivo .java escrito é diferente do arquivo .java gerado, mas fornece a mesma saída.
Desmontador de arquivo de classe Java
Comando javap
O javap é uma ferramenta de linha de comando Java que vem com o JDK. Ele é usado para desmontar o arquivo de classe e imprimir uma versão legível dessa classe. Sua saída depende da opção utilizada. Sem usar nenhuma opção, o javap imprime o pacote, os campos protegidos e públicos e os métodos das classes passadas para ele. A javap também é usado para descobrir quais métodos estão disponíveis para uma classe se você não tiver o código-fonte usado para criar a classe. O formato geral do comando javap é:
javap [options] filename
Opções
Com o comando javap, muitas opções estão disponíveis. Alguns deles são:
Desmonte um arquivo de classe usando o comando javap
class DisassembleDemo { public static void main(String args[]) { System.out.println('Java'); } }
Gere o arquivo de classe do programa acima e use o seguinte comando para desmontar o arquivo de classe.
javap -c -p DisassembleDemo
Saída
A saída a seguir mostra o que o arquivo de classe contém.
Mas não obtemos o código-fonte Java usando o comando javap. Portanto, existem muitos descompiladores disponíveis que convertem um arquivo .class em um arquivo .java.