Alguém sabe de um descompilador gratuito que pode descompilar um arquivo Jar inteiro em vez de uma única classe? Eu tenho um problema com subclasses como nome $ 1.class name $ 2.class name.class
Alguém sabe de um descompilador gratuito que pode descompilar um arquivo Jar inteiro em vez de uma única classe? Eu tenho um problema com subclasses como nome $ 1.class name $ 2.class name.class
Respostas:
2009: O JavaDecompiler pode fazer um bom trabalho com um jar: desde 0.2.5, Todos os arquivos, nos arquivos JAR, são exibidos.
Consulte também a pergunta "Como faço para" descompilar "arquivos de classe Java?" .
O JD-Eclipse parece não ter mudado desde o final de 2009 (consulte Alterações ).
Portanto, sua integração com o Eclipse mais recente (3.8, 4.2+) pode ser problemática.
O JD-Core é mantido ativamente.
Ambos são o resultado do fantástico trabalho de (usuário de SO) Emmanuel Dupuy .
2018: Uma opção mais moderna, mencionada nos comentários de David Kennedy Araujo :
JetBrains / intellij-community / plugins / descompilador java / engine
Fernflower é o primeiro descompilador analítico realmente trabalhando para Java e provavelmente para uma linguagem de programação de alto nível em geral.
java -jar fernflower.jar [-<option>=<value>]* [<source>]+ <destination> java -jar fernflower.jar -hes=0 -hdc=0 c:\Temp\binary\ -e=c:\Java\rt.jar c:\Temp\source\
Consulte também Como descompilar para arquivos java a idéia intelectual de um comando que trabalha com o IntelliJ IDEA recente.
Antes de tudo, vale lembrar que todos os arquivos Java ( .jar
/ .war
/ etc ...) são basicamente apenas .zip
arquivos sofisticados , com alguns manifestos e metadados adicionados.
Segundo, para resolver esse problema, eu pessoalmente uso várias ferramentas que lidam com esse problema em todos os níveis:
.class
arquivosjar
s. Vale a pena tentar.A vantagem de tudo o que foi mencionado acima é que não preciso segurar nenhuma outra ferramenta externa que atrapalhe meu ambiente de trabalho. Tudo o que eu precisarei de um desses arquivos pode ser tratado dentro do meu IDE ou difundido com outros arquivos nativamente.
Se você tiver um shell bash e jad:
JAR=(your jar file name)
unzip -d $JAR.tmp $JAR
pushd $JAR.tmp
for f in `find . -name '*.class'`; do
jad -d $(dirname $f) -s java -lnc $f
done
popd
Eu posso estar um pouquinho, com isso, mas deve funcionar mais ou menos como anunciado. Você deve $JAR.tmp
conter os arquivos descompilados.
javap
dentro dessa estrutura básica de loop, e está funcionando para mim.
Eu tive um sucesso razoável com uma ferramenta chamada (frustrantemente) " JD: Java Decompiler ".
Eu o achei melhor do que a maioria dos decompiladores ao lidar com classes compiladas para Java 5 e superior . Infelizmente, ele ainda pode ter alguns problemas onde o JAD normalmente seria bem-sucedido.
Algo como:
jar -xf foo.jar && find . -iname "*.class" | xargs /opt/local/bin/jad -r
talvez?
Insira o seguinte em decompile.jar.sh
# Usage: decompile.jar.sh some.jar [-d]
# clean target folders
function clean_target {
rm -rf $unjar $src $jad_log
}
# clean all debug stuff
function clean_stuff {
rm -rf $unjar $jad_log
}
# the main function
function work {
jar=$1
unjar=`basename $jar.unjar`
src=`basename $jar.src`
jad_log=jad.log
clean_target
unzip -q $jar -d $unjar
jad -d $src -ff -r -lnc -o -s java $unjar/**/*.class > $jad_log 2>&1
if [ ! $debug ]; then
clean_stuff
fi
if [ -d $src ]
then
echo "$jar has been decompiled to $src"
else
echo "Got some problems check output or run in debug mode"
fi
}
function usage {
echo "This script extract and decompile JAR file"
echo "Usage: $0 some.jar [-d]"
echo " where: some.jar is the target to decompile"
echo " use -d for debug mode"
}
# check params
if [ -n "$1" ]
then
if [ "$2" == "-d" ]; then
debug=true
set -x
fi
work $1
else
usage
fi
Pronto para usar, basta digitar dj your.jar
e você receberá uma your.jar.src
pasta com as fontes. Use a -d
opção para o modo de depuração.
Você o extrai e, em seguida, usa jad contra o dir.