logo

Descompilador Java

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.

Descompilador Java

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.

Descompilador Java2

Etapa 5: Agora mova o arquivo .class e o aplicativo jad para outra pasta.

Descompilador Java3

Etapa 6: Digite o comando: jad DecompilerDemo

Descompilador Java4

O comando acima gera um arquivo .jad na respectiva pasta.

Descompilador Java5

Etapa 7: Digite o comando: jad ?s java DecompilerDemo

converter string em char
Descompilador Java6

Ele gera o arquivo .java na mesma pasta.

Descompilador Java7

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:

    -c:Ele imprime código desmontado.-p:Ele mostra todas as classes e membros.-s:Ele imprime assinaturas de tipo interno.-constantes:Mostra constantes finais estáticas.

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.

Descompilador Java8

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.