Pergunta

Alguém sabe de um decompiler livre que pode descompilar um arquivo Jar inteira, em vez de uma única classe? Eu tenho um problema com sub classes como nome $ nome 1.class $ 2.class name.class

Foi útil?

Solução

2009: JavaDecompiler pode fazer um bom trabalho com um frasco: desde 0.2.5, todos os arquivos, em arquivos JAR, são exibidos.

http://java.decompiler.free.fr/sites/default/screenshots/screenshot1.png

Veja também a pergunta "Como faço para‘descompilar’ arquivos de classe Java? ".

O JD-Eclipse não parece ter mudado desde o final de 2009 embora (ver alterações ).
Portanto, a sua integração com a mais recente Eclipse (3.8, 4.2 ou superior) pode ser problemático.

JD-Core é mantido ativamente.

Ambos são o resultado do trabalho fantástico de (usuário SO) Emmanuel Dupuy .


2018: Uma opção mais moderna, mencionado nos comentários por David Kennedy Araujo :

JetBrains / intellij na comunidade / plugins / java-decompiler / motor

Fernflower é o decompiler analítica primeira 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\

Veja também Como a decompile para arquivos Java IntelliJ IDEA para um comando trabalhar com recente IDEA IntelliJ.

Outras dicas

Se acontecer de você ter tanto 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 poderia ser um pequeno pedaço minúsculo off com isso, mas ele deve funcionar mais ou menos como anunciado. Você deve acabar com $JAR.tmp contendo seus arquivos descompilados.

Antes de tudo, vale a pena lembrar que todos os ficheiros de arquivo Java (.jar / .war / etc ...) são todos os arquivos basicamente apenas fancy.zip , com alguns manifesta adicionados e metadados.

Em segundo lugar, para resolver este problema que eu pessoalmente usar várias ferramentas que lidam com este problema em todos os níveis:

  • Jad + Jadclipse enquanto trabalhava no IDE para decompiling arquivos .class
  • WinRAR , a minha ferramenta de compressão favorito suporta nativamente arquivos Java (mais uma vez, ver primeiro parágrafo).
  • Beyond Compare , minha ferramenta diff favorito, quando configurado corretamente pode fazer em -a-fly comparações entre qualquer arquivo, incluindo jars. Bem uma tentativa vale a pena.

A vantagem de tudo o já mencionado, é que eu não preciso para realizar qualquer outra ferramenta externa que enche meu ambiente de trabalho. Tudo o que eu nunca vai precisar de um desses arquivos pode ser tratado dentro do meu IDE ou diffed com outros arquivos nativamente.

Eu tive sucesso razoável com uma ferramenta chamada (frustrantemente) " JD: Java Decompiler ".

Eu achei melhor que a maioria decompilers quando se lida com classes compiladas para Java 5 e superior . Infelizmente, ele ainda pode ter alguns soluços, onde JAD normalmente sucesso.

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
  • chmod + x decomplie.jar.sh // executável
  • ln -s ./decomplie.jar.s / usr / bin / dj

Pronto para usar, basta digitar dj your.jar e você obterá pasta your.jar.src com fontes. opção Use -d para modo de depuração.

Um arquivo jar é apenas um arquivo zip com extensão jar. Você deve ser capaz de descompactação (WinZip) um frasco como um arquivo zip.

Você extraí-lo e, em seguida, usar jad contra a dir.

Nota:. Esta solução só funciona para usuários de Mac e nix *

Eu também tentou encontrar Jad sem sorte. Minha solução rápida era baixar MacJad que contém jad. Uma vez que você fez o download pode encontrar jad em [onde-você baixou-macjad] / MacJAD / Contents / Resources / jad.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top