MouseOver Studio

MouseOver Studio header image 2

Decompilando Java com Eclipse e JAD

March 8th, 2008 por Diego Carrion · 3 comentários

Por motivos X que não devem acontecer, o código fonte de uma livraria Y foi perdido, ficando somente o Java Archive (JAR).

Ouvi que existe um método de recuperar um código fonte, utilizando decompiladores. Possivelmente não se consiga recuperar o código das classes em um 100%, mas muita coisa deve dar para recuperar, dependendo do caso.

Pesquisei um pouco e ao parecer o melhor decompilador e o mais popular é o Jad. Existem muitos outros mas parecem estar bem desatualizados e somente dão suporte ate a versão 1.3 do Java. Mesmo o Jad sendo o mais atualizado dos que encontrei, a noticia mais nova no site e do dia 2 de Julho de 2006.

Uma coisa que me fez pegar confiança no Jad é que existem um monte de ferramentas com interface gráfica que utilizam o Jad por detrás e também existe um plugin do Jad para o Eclipse chamado JadClipse, que é o que vou utilizar agora. A última versão é para o Eclipse Europa e foi lançada em Maio do 2007.

Baixei o plugin, coloquei ele na pasta plugins da minha instalação do Eclipse e abri o mesmo.

Ao abrir o Eclipse não apareceu nada diferente, mas sim nas preferências. No menu Java foi adicionado um submenu JadClipse, com muitas opções para configurar o plugin. Eu deixei as preferências no padrão. Em General > Editors > File Associations da para apreciar que existe uma asociação entre os arquivos .class e o JadClipse Class File Viewer.

Num dos projetos que estavam atualmente no Working Set tinha um que utilizava algumas livrarias do JBoss. Naveguei dentro de um arquivo .jar ate achar um arquivo .class e dei duplo click nele. Parece que nesse momento o Jad decompila o arquivo e deveria mostrar o resultado, mas ele mostrou para mim o seguinte:

DECOMPILATION REPORT

Decompiled from: /home/dcrec1/workspace/jboss-4.2.2.GA/server/default/lib/mail.jar
Total time: 2 ms
Jad reported messages/errors:
Exit status: 0
Caught exceptions:
java.io.IOException: java.io.IOException: jad: not found
at java.lang.UNIXProcess.(UNIXProcess.java:148)

Parece que por algum motivo o programa Jad não esta sendo encontrado. É obvio, não instalei ele!

Baixei a ultima versão do Jad e coloquei o arquivo jad dentro da pasta /usr/bin . Repeti o processo e o resultado foi o mesmo.

Voltei nas configurações do JadClipse e nelas existe um campo chamado Path to decompiler. Escrevi /usr/bin/jad como valor, apliquei as mudanças e repeti o processo de decompilação. A nova mensagem foi a seguinte:

DECOMPILATION REPORT

Decompiled from: /home/dcrec1/workspace/jboss-4.2.2.GA/server/default/lib/mail.jar
Total time: 25 ms
Jad reported messages/errors:
/usr/bin/jad: error while loading shared libraries: libstdc++-libc6.2-2.so.3: cannot open shared object file: No such file or directory
Exit status: 127

O erro se deu porque faltam livrarias no meu ambiente. Resolvi o problema no Ubuntu instalando o pacote libstdc++2.10-glibc2.2.

Repeti por terceira vez o processo e funcionou uma beleza! O código decompilado apareceu rapidamente e no final do código apareceu o seguinte texto como comentário:

DECOMPILATION REPORT

Decompiled from: /home/dcrec1/workspace/jboss-4.2.2.GA/server/default/lib/mail.jar
Total time: 45 ms
Jad reported messages/errors:
The class file version is 48.0 (only 45.3, 46.0 and 47.0 are supported)
Exit status: 0
Caught exceptions:

Ao parecer aconteceu algum erro mas não da para ser identificado a simples vista. Me parece que não daria para descobrir que o código gerado foi decompilado, os nomes das variáveis não apresentam caracteres estranhos nem as propriedades ou algum método.

Agora somente falta fazer testes para ver que tão parecido fica o código decompilado com o pre-compilado. Mesmo podendo não recuperar a classe em um 100%, acho que o JadClipse vai me ajudar bastante quando utilize ele na segunda-feira com a livraria mencionada no começo do post.

Tags: Tutoriales · eclipse · java · programação

3 respostas ate agora ↓

Deixar um comentário