# Decompiladores de APK
Aprenda hacking no AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras formas de apoiar o HackTricks:
* Se você quer ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**material oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Junte-se ao grupo** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) ou ao grupo [**telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para os repositórios github do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
## [JD-Gui](https://github.com/java-decompiler/jd-gui)
Primeiro decompilador Java famoso com interface gráfica, você pode usá-lo para investigar o código Java do APK uma vez que o tenha obtido.
## [Jadx](https://github.com/skylot/jadx)
Decompilador Java integrado (multiplataforma) e, no momento, acredito que seja o recomendado.\
Basta **baixar** a **última** versão e executá-la a partir da pasta _**bin**_:
```
jadx-gui
```
Utilizando a interface gráfica, você pode realizar **busca de texto**, ir para as **definições de funções** (_CTRL + clique esquerdo_ na função) e referências cruzadas (_clique direito_ --> _Find Usage_)
Se você **deseja apenas** o **código java** mas sem usar uma interface gráfica, uma maneira muito fácil é usar a ferramenta de linha de comando jadx:
```
jadx app.apk
```
Algumas **opções interessantes do jadx** (versões GUI e CLI) são:
```
-d
--no-res #No resources
--no-src #No source code
--no-imports #Always write entire package name (very useful to know where is the function that you might want to hook)
```
## [GDA-android-reversing-Tool](https://github.com/charles2gan/GDA-android-reversing-Tool)
GDA é também uma poderosa e rápida plataforma de análise reversa. Que não suporta apenas a operação básica de descompilação, mas também muitas funções excelentes como **Detecção de comportamento malicioso, Detecção de vazamento de privacidade, Detecção de vulnerabilidade, Resolução de caminho, Identificação de empacotador, Análise de rastreamento de variáveis, Desofuscação, Scripts Python & Java, Extração de memória do dispositivo, Decifração e cifração de dados** etc.
**Apenas para Windows.**
![](<../../.gitbook/assets/image (207) (1) (1).png>)
## [Bytecode-Viewer](https://github.com/Konloch/bytecode-viewer/releases)
Outra **ferramenta interessante para fazer uma análise estática é**: [**bytecode-viewer**](https://github.com/Konloch/bytecode-viewer/releases)**.** Ela permite que você descompile o APK usando **vários descompiladores ao mesmo tempo**. Então, você pode ver, por exemplo, 2 descompiladores Java diferentes e um descompilador Smali. Ela também permite que você **modifique** o código:
![](<../../.gitbook/assets/image (82).png>)
Se você modificar o código, então você pode **exportá-lo**.\
Um ponto negativo do bytecode-viewer é que ele **não possui referências** ou **referências cruzadas.**
## [**Enjarify**](https://github.com/Storyyeller/enjarify)
Enjarify é uma ferramenta para traduzir bytecode Dalvik para bytecode Java equivalente. Isso permite que ferramentas de análise Java analisem aplicações Android.\
Dex2jar é uma ferramenta mais antiga que também tenta traduzir Dalvik para bytecode Java. Funciona razoavelmente bem na maioria das vezes, mas muitos recursos obscuros ou casos extremos farão com que falhe ou até mesmo produza resultados incorretos silenciosamente. Em contraste, Enjarify é projetado para funcionar em tantos casos quanto possível, mesmo para código onde Dex2jar falharia. Entre outras coisas, Enjarify lida corretamente com nomes de classes unicode, constantes usadas como vários tipos, conversões implícitas, manipuladores de exceção saltando para o fluxo de controle normal, classes que referenciam muitas constantes, métodos muito longos, manipuladores de exceção após um manipulador catchall e valores iniciais estáticos do tipo errado.
## [CFR](https://github.com/leibnitz27/cfr)
CFR descompilará recursos modernos do Java - [incluindo muito do Java ](https://www.benf.org/other/cfr/java9observations.html)[9](https://github.com/leibnitz27/cfr/blob/master/java9stringconcat.html), [12](https://www.benf.org/other/cfr/switch\_expressions.html) & [14](https://www.benf.org/other/cfr/java14instanceof\_pattern), mas é escrito inteiramente em Java 6, então funcionará em qualquer lugar! ([FAQ](https://www.benf.org/other/cfr/faq.html)) - Ele até fará um esforço decente para transformar arquivos de classe de outras linguagens JVM de volta para java!
Esse arquivo JAR pode ser usado da seguinte forma:
```
java -jar ./cfr.jar "$JARFILE" --outputdir "$OUTDIR"
```
Para arquivos JAR maiores, notei que ele esgota a memória. Você pode simplesmente adaptar o tamanho do pool de alocação de memória da JVM se isso também acontecer com você.
```
java -Xmx4G -jar ./cfr.jar "$JARFILE" --outputdir "$OUTDIR"
```
Este exemplo permitirá a alocação máxima de 4GB.
No diretório de saída, você encontrará os arquivos `.java` decompilados, juntamente com um resumo da decompilação
## [Fernflower](https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine)
A seguir temos o [Fernflower](https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine), que faz parte do [IntelliJ IDEA](https://www.jetbrains.com/idea/). Todos mencionam que é um decompilador _analítico_ (conforme declarado na descrição do projeto), mas ninguém explica o que isso realmente significa. Eu só encontrei [esta pergunta no Stackoverflow](https://stackoverflow.com/q/62298929), que infelizmente permanece sem resposta até hoje.
De qualquer forma, como não há lançamentos autônomos, você precisa construí-lo você mesmo. Sendo um projeto baseado em [Gradle](https://gradle.org), você pode cloná-lo e depois executar o seguinte comando, desde que o Gradle esteja instalado em sua máquina.
```
cd ./plugins/java-decompiler/engine && gradle jar
```
Aqui, primeiro mudamos nosso diretório de trabalho para o diretório raiz do Fernflower. Em seguida, instruímos o Gradle a construir o arquivo `./build/libs/fernflower.jar`.
A invocação do Fernflower é semelhante à do CFR.
```
java -jar ./fernflower.jar "$JARFILE" "$OUTDIR"
```
Entre os decompiladores descritos aqui, este é o único que gera os arquivos `.java` em um arquivo JAR. Você pode facilmente extrair os arquivos de código-fonte usando `unzip`.
## [Krakatau](https://github.com/Storyyeller/Krakatau)
Lembra do Enjarify mencionado acima? O mesmo autor também é o desenvolvedor de um decompilador chamado [Krakatau](https://github.com/Storyyeller/Krakatau).
Em contraste com os outros projetos, este é escrito em Python. E eu acho que essa é a razão pela qual ele é um pouco diferente dos outros.
Deixe-me citar do [README do projeto](https://github.com/Storyyeller/Krakatau/blob/master/README.md).
> Em seguida, certifique-se de que você tem jars contendo definições para quaisquer classes externas (ou seja, bibliotecas) que possam ser referenciadas pelo jar que você está tentando decompilar. Isso inclui as classes da biblioteca padrão (ou seja, JRT).
E de acordo com a descrição, essas classes da biblioteca padrão vêm com até a versão 8 do Java na forma do arquivo `rt.jar`. Para versões posteriores, o autor fornece [jrt-extractor](https://github.com/Storyyeller/jrt-extractor), que pode gerar esse arquivo para nós.
Então, baixamos essa ferramenta e executamos os seguintes comandos.
```
cd ./jrt-extractor
javac JRTExtractor.java
java -ea JRTExtractor
```
Este comando deve ter criado um arquivo `rt.jar` dentro do diretório.
Com este arquivo, podemos executar o Krakatau da seguinte forma.
```
./Krakatau/decompile.py -out "$OUTDIR" -skip -nauto -path ./jrt-extractor/rt.jar "$JARFILE"
```
## [procyon](https://github.com/mstrobel/procyon)
Uma vez instalado, o uso é simples.
```
procyon -jar "$JARFILE" -o "$OUTDIR"
```
## Referências
{% embed url="https://eiken.dev/blog/2021/02/how-to-break-your-jar-in-2021-decompilation-guide-for-jars-and-apks/#cfr" %}
Aprenda hacking no AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras formas de apoiar o HackTricks:
* Se você quer ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**material oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Junte-se ao grupo** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) ou ao grupo [**telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para os repositórios github do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).