it-swarm-pt.tech

Como posso abrir arquivos Java .class de maneira legível?

Eu estou tentando descobrir o que o arquivo de classe de um applet Java está fazendo sob o capô. Abri-lo com o Bloco de Notas ou o Textpad apenas mostra um monte de gobbledy-gook.

Existe alguma maneira de recuperá-lo em um formato legível para que eu possa tentar descobrir o que está fazendo?

  • Ambiente == Windows com VS 2008 instalado.
96
cpuguru

jd-gui é o melhor descompilador no momento. Ele pode lidar com recursos mais recentes em Java, em comparação com o JAD empoeirado.

195
DarenW

Se você não se importar em ler o bytecode, o javap deve funcionar bem. Faz parte da instalação padrão do JDK.

Usage: javap <options> <classes>...

where options include:
   -c                        Disassemble the code
   -classpath <pathlist>     Specify where to find user class files
   -extdirs <dirs>           Override location of installed extensions
   -help                     Print this usage message
   -J<flag>                  Pass <flag> directly to the runtime system
   -l                        Print line number and local variable tables
   -public                   Show only public classes and members
   -protected                Show protected/public classes and members
   -package                  Show package/protected/public classes
                             and members (default)
   -private                  Show all classes and members
   -s                        Print internal type signatures
   -bootclasspath <pathlist> Override location of class files loaded
                             by the bootstrap class loader
   -verbose                  Print stack size, number of locals and args for methods
                             If verifying, print reasons for failure
68
Michael Myers

Você quer um decompilador Java, você pode usar a ferramenta de linha de comando javap para fazer isso. Além disso, Java Decompiler HOW TO descreve como você pode descompilar um arquivo de classe.

7
Drew Frezell

Usar Jad para descompilar é provavelmente sua melhor opção. A menos que o código tenha sido ofuscado, ele produzirá um resultado satisfatório.

2
Rasmus Faber

o que você está procurando é um de-compilador Java. Eu recomendo JAD http://www.kpdus.com/jad.html É livre para uso não comercial e faz o trabalho. 

Nota: isso não tornará o código exatamente igual ao que foi escrito. Ou seja, você perderá comentários e, possivelmente, nomes de variáveis, portanto, será um pouco mais difícil do que apenas ler o código-fonte normal. Se o desenvolvedor for realmente reservado, eles terão ofuscado seu código, tornando ainda mais difícil a leitura. 

2
David Beleznay

cpuguru, se o seu applet foi compilado com o javac 1.3 (ou menos), sua melhor opção é usar o Jad.

Infelizmente, o último JDK suportado pelo JAD 1.5.8 (14 de abril de 2001) é o JDK 1.3.

Se seu applet foi compilado com um compilador mais recente, você poderia tentar JD-GUI : este descompilador está em desenvolvimento, no entanto, ele gera fontes Java corretas, na maioria das vezes, para classes compiladas com os JDKs 1.4, 1.5 ou 1.6.

DarenW, obrigado pelo seu post. O JD-GUI ainda não é o melhor decompilador ... mas estou trabalhando :)

2
Emmanuel Dupuy

Se o arquivo de classe que você deseja examinar for de código aberto, você não deve descompilá-lo, mas anexar os arquivos de origem diretamente no seu IDE. Dessa forma, você pode ver o código de alguma classe de biblioteca como se fosse sua própria

1
arturh

Isso é código compilado, você precisará usar um decompiler como JAD: http://www.kpdus.com/jad.html

1
cynicalman

Você precisa usar um descompilador. Outros sugeriram JAD, existem outras opções, JAD é o melhor.

Vou repetir os comentários que você pode perder um pouco em comparação com o código-fonte original. Vai parecer especialmente engraçado se o código usasse genéricos, devido ao apagamento.

1
Zac Gochenour

Como apontado por @MichaelMyers, use 

javap -c <name of Java class file> 

para obter o código de montagem da JVM. Você também pode redirecionar a saída para um arquivo de texto para melhor visibilidade.

javap -c <name of Java class file> > decompiled.txt
1
Nilashish C

jd-gui " http://code.google.com/p/innlab/downloads/detail?name=jd-gui-0.3.3.windows.Zip&can=2&q= " é a melhor opção e amigável para descompilar o arquivo .class ....

1
Karthikeyan Subramanian

Plugin JAD e/ou JADclipse Eclipse, com certeza.

1
John Gardner

você também pode usar os decompiladores Java online disponíveis. Por exemplo, http://www.javadecompilers.com

0
Prachi Sharma

Não há necessidade de descompilar o Applet.class. O código fonte das classes da API Java pública vem com o JDK (se você escolher instalá-lo) e é mais legível do que o bytecode decompilado. Você pode encontrar compactado em src.Zip (localizado na pasta de instalação do JDK).

0
Arno

Como sugerido, você pode usar o JAD para descompilá-lo e visualizar os arquivos. Para facilitar a leitura, é possível usar o plug-in do JADclipse para Eclipse para integrar o JAD diretamente ao Eclipse ou usar o DJ Java Decompiler, que é muito mais fácil de usar do que a linha de comando JAD

0
amitwadhwa

O JAD é uma excelente opção se você quiser um código Java legível como resultado. Se você realmente quer cavar no interior do formato de arquivo .class, você vai querer javap. É empacotado com o JDK e permite "descompilar" o código de bytes hexadecimal em ASCII legível. A linguagem que ela produz ainda é bytecode (não é nada parecido com Java), mas é razoavelmente legível e extremamente instrutiva.

Além disso, se você realmente quiser, você pode abrir qualquer arquivo .class em um editor hexadecimal e ler o bytecode diretamente. O resultado é idêntico ao uso de javap.

0
Daniel Spiewak

CFR - outro decompilador Java é um ótimo descompilador para Java moderno escrito i Java 6.

0
tidbeck