O que é um bom descompilador e descompilador Java?

Estou usando o JD-GUI para descompilar arquivos Java JAR, mas o problema é que deixa muitos erros, como variáveis duplicadas que tenho que consertar sozinho e verificar se o programa ainda funciona (se eu consertei os erros corretamente).

Eu também tentei o Fernflower, mas isso deixa em branco classes se estiver faltando uma dependência.

Eu gostaria de saber qual descompilador:

  • dá a menor quantidade de erros
  • desofusca o a maioria.

Comentários

  • Apenas por curiosidade, quais recursos você espera que um desofuscador ofereça? Além de renomear as variáveis manualmente, eu não ‘ não vejo nenhuma maneira de realmente desofuscar algum código.

Resposta

Minhas desculpas pela resposta tardia.
Tenho trabalhado em um novo descompilador Java de código aberto. Sinta-se à vontade para dar uma olhada.
Eu não testei em nenhum código ofuscado, mas vi ele descompilar muitos métodos que o JD-GUI não conseguiu manipular. Observe que é um trabalho em andamento e tenho certeza de que encontrará muitos códigos que não serão descompilados.

Comentários

  • Primeiro, seu descompilador é o Procyon, que você vê em outras respostas. Em segundo lugar, embora eu geralmente hesite em ” Olhe para minha biblioteca que faz isso! ” respostas, isso seria um erro aqui. Strobel ‘ s readme ao qual ele se vincula, acima, vale uma leitura atenta. Teria sido uma resposta ótima em si, mas é provavelmente um pouco longo demais para SE.
  • +10000 Este é um trabalho realmente ótimo e apenas descompilou uma aula que passei horas tentando reconstruir depois que o JD-GUI obteve apenas metade.
  • Embora eu pessoalmente odeie os comentários do +1, ‘ devo dizer que você ‘ tem um bom projeto em andamento que me ajudou em uma situação difícil. Continue assim!
  • @Signus Obrigado, ‘ fico feliz que meu trabalho tenha sido útil para você :).
  • @DavidGomes Ah, BitBucket finalmente cumpriu sua promessa de excluir repositórios Mercurial. Corrigido.

Resposta

Entradas antigas e ausentes

JAD Algum tempo atrás, todo mundo descompilador de escolha estava cansada. Atualmente, o projeto está morto (além disso, não era de código aberto), mas ainda assim você vê muitas pessoas se referindo a ele.

Java DeObfuscator Também uma ferramenta mais antiga do fileoffset.com, mas ainda funciona mais ou menos. A interface é um tanto desajeitada para usar em projetos maiores, mas a ferramenta é código aberto .

JODE JODE é um pacote java contendo um descompilador e um otimizador para Java. Este pacote está disponível gratuitamente sob a GNU GPL. Não é atualizado há algum tempo.

AndroChef Ferramenta proprietária para descompilar programas Android e Arquivos Java, disponíveis aqui . Não vale o dinheiro dadas as alternativas, assim como DJ Decompiler .

Vela Um descompilador de código aberto de Brad Davis. Estou mencionando isso para ser completo, mas está longe de ser um recurso completo.


Ferramentas modernas

JD-Gui Provavelmente uma das ferramentas mais utilizadas para descompilação Java, pois é fácil de usar e fornece uma interface gráfica de usuário que permite abrir e inspecionar rapidamente um arquivo de classe ou JAR. Você pode encontrá-lo aqui .

FernFlower Muito novo e promissor descompilador analítico de Java (tornando-se parte integrante do IntelliJ 14).

É uma ferramenta de linha de comando. Este é capaz de mostrar os parâmetros Unicode com seus nomes completos.

Baixe aqui. É uma ferramenta de linha de comando. Este é capaz de mostrar os parâmetros Unicode com seus nomes completos.
Observe que também já está integrado por padrão no IntelliJ.

CFR

Gratuito e de código aberto . Este visa descompilar recursos Java modernos , incluindo expressões de switch Java 12, lambdas Java 8 (antes e depois de alterações do Java beta 103), switches Java 7 String etc., embora seja escrito em Java 6.

Também uma ferramenta de linha de comando.Este faz um trabalho ainda melhor e é um pouco mais rápido.

Procyon

Código aberto e também visa lidar com recursos do Java 8 (lambdas, operador ::). Precisa do Java 7 para ser executado.

Krakatau Krakatau é interessante porque foi escrito em Python. Atualmente, ele contém três ferramentas: um descompilador e desmontador para arquivos de classe Java e um montador para criar arquivos de classe.

Ainda não oferece suporte aos recursos do Java 8.

Soot

Soot é uma estrutura para analisar e transformar aplicativos Java e Android, originalmente desenvolvida pelo Sable Research Group da McGill University. Não é muito usado “apenas” como um descompilador, pois também define uma linguagem de código de byte intermediário.

Recaf

Um editor Java Bytecode e ferramenta de engenharia reversa que visa ser intuitivo de usar. Ele pode apresentar bytecode por meio de vários descompiladores (CFR, FernFlower, Procyon) ou em um layout de tabela para permitir a exibição de elementos de classe que são indecifráveis em descompiladores padrão. Recaf usa menus sensíveis ao contexto para interagir com classes, métodos e campos, permitindo aos usuários pesquisar casos de uso, renomear itens e editar definições em um formato desmontado.

Ele suporta jars, wars, classes, e extração de classes de processos Java em execução.

Ele foi escrito completamente em Java e é totalmente código-fonte aberto .

Visualizador de Bytecode de Konloch

Um Visualizador de Bytecode de Java Leve Avançado, Decompilador de Java GUI, Editor de Bytecode de GUI, GUI Smali, GUI Baksmali, GUI APK Editor, GUI Dex Editor, GUI APK Decompiler, GUI DEX Decompiler, GUI Procyon Java Decompiler, GUI Krakatau, GUI CFR Java Decompiler, GUI FernFlower Java Decompiler, GUI DEX2Jar, GUI Jar2DJ, GUI Jar-Jar, Hex Viewer, Code Searcher, Debugger e muito mais.

Escrito completamente em Java, e é código aberto .

Ele usa FernFlower, Procyon e CFR para descompilação, o que torna este ferramenta visual incrível usando descompiladores de última geração:

Enigma

Uma ferramenta especificamente voltada para a desofuscação :

Originalmente usada para desofuscar versões do Minecraft. Usa Procyon internamente.

Um fork mais atualizado pode ser encontrado aqui

É divertido observe que muito esforço em descompiladores e desofuscadores para Java é o resultado da cena de modding em torno do Minecraft, um dos jogos mais populares implementados em Java.

Fonte: http://blog.macuyiko.com/post/2015/a-quick-look-at-java-decompilers.html

Comentários

  • Esta resposta pode precisar ser atualizado. Parece que o JD-Gui está sendo desenvolvido ativamente desde março de 2019. java-decompiler.github.io
  • Tenho algum java 7 código para o qual eu ‘ estou tentando escrever alguns aspectos. O descompilador integrado do Intellij em alguns casos tem nomes de variáveis incorretos e pode deixar de fora blocos de código. JD-Gui mostra esses blocos e também exibe o que parece ser nomes de variáveis mais precisos. Ele também mostra lado a lado as diferenças entre uma versão antiga e uma nova versão do JD-Gui. É ‘ vale a pena dar uma olhada se você ‘ está fazendo uma reversão séria.

Resposta

Não posso “falar com qual deles é o melhor, mas existem alguns descompiladores java por aí, conforme indicado por este Pergunta SO . Nenhum desses descompiladores parece tentar lidar ativamente com a ofuscação e muitos desses projetos foram abandonados.

Eu não tentei Krakatau , mas parece que pode ajudar com o que você está procurando.

  • Do readme:” O descompilador Krakatau tem uma abordagem diferente para a maioria dos descompiladores Java. Ele pode ser considerado mais como um compilador cuja linguagem de entrada é bytecode Java e cuja linguagem de destino é o código-fonte Java. O Krakatau obtém bytecode arbitrário e tenta transformá-lo em código Java equivalente. Isso o torna robusto para pequenas ofuscações, embora tenha a desvantagem de não reconstruir a fonte “original”, levando a uma saída menos legível do que um descompilador de correspondência de padrões produziria para classes Java não ofuscadas. “
  • Isso está aberto fonte e parece estar ativamente (no momento da redação deste artigo) mantida.

Comentários

  • Essa é realmente a saída do desmontador. O descompilador descompila para a saída Java. (PSEu ‘ sou o desenvolvedor)
  • JD-GUI é um dos melhores descompiladores Java no momento, mas deve ser usado em conjunto com desofuscadores no Bytecode antes de descompilar o código. Os melhores desofuscadores para java que conheço vêm de rune-server.org ou moparscape.org/ smf ou moparisthebest.org/smf são comunidades de hackers para o Runescape Game, que é totalmente escrito em Java e altamente ofuscado. ul>

Resposta

Experimente dar uma olhada no Visualizador de Bytecode https://github.com/Konloch/bytecode-viewer Tem a opção de descompilar usando 5 descompiladores diferentes:

  • FernFlower
  • Procyon
  • CFR
  • Krakatau
  • JD-GUI

Comentários

  • Esta foi uma sugestão muito boa – obrigado, muito melhor do que apenas usar o cli fernflower!

Resposta

Em primeiro lugar, há uma solução para problemas do Fernflower com classes ausentes aqui . Você pode agradecer a agaricusb por isso.

Por enquanto, o Fernflower continua sendo o melhor descompilador de Java. Não foi mantido nos últimos anos. Tentei entrar em contato com o autor recentemente, mas ainda não tive sorte.

Quanto ao AndroChef Java Decompiler, ele usa o Fernflower como mecanismo com a permissão do autor. Ainda não tenho certeza se usa patch / modificação versão ou É apenas uma interface de usuário.

O descompilador Procyon desenvolvido por @mike-strobel parece ser bom, mas o Fernflower ainda teve uma vantagem ENORME e foi capaz de descompilar aproximadamente 95% do meu aplicativo (~ 3000 classes) enquanto procyon foi capaz de lidar com apenas 60% (verificado em janeiro de 2014).

Comentários

  • Seu aplicativo é ” nativo ” Java ou foi convertido do formato Android? Se for o primeiro, eu estaria muito interessado em colocar minhas mãos em seus binários para ver onde o Procyon quebra em comparação com o Fernflower.
  • @MikeStrobel It ‘ s ” aplicativo Java ” nativo. É ‘ apenas para uso interno, então posso ‘ compartilhá-lo de qualquer maneira.
  • qualquer chance de você perder me um e-mail descrevendo quais tipos de problemas você enfrentou? Estou sempre interessado em saber como o Procyon pode ser melhorado. Minhas informações de contato estão no site do BitBucket do projeto ‘.
  • @MikeStrobel obrigado pelo interesse. Eu ‘ tentarei fornecer informações estendidas e aulas de exemplo, mas sem promessas.

Resposta

Estou usando https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine É o descompilador do IntelliJ, ele descompila códigos em que o JD-GUI falha.

É um espelho não oficial para download: http://files.minecraftforge.net/maven/net/minecraftforge/fernflower/

Resposta

Gostaria de recomendar o AndroChef Java Decompiler AndroChef Java Decompiler com êxito descompila arquivos ofuscados Java 6 e Java 7 .class e .jar.

Comentários

  • PRESTE ATENÇÃO COM ANDROCHEF! AndroChef é apenas um invólucro para o descompilador fernflower abandonado, não ‘ não desperdice seu dinheiro com ele!

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *