Engenharia Reversa em APKs – Acesso ao Código Fonte

Tudo que será apresentado neste artigo tem apenas fins acadêmico, nós da HC não se responsabilizamos por quaisquer danos causados por mal uso.

Atualmente podemos considerar que algumas aplicações web têm boa maturidade para segurança, nativamente com modos de segurança, frameworks, etc. que dificulta a exploração, entretanto, as aplicações mobiles não estão no mesmo grau de proteção. Com esse cenário, temos mais oportunidades de conseguir explorar vulnerabilidades em aplicações mobile.

Em um testes de invasão uma das primeiras etapas é o reconhecimento do escopo, uma engenharia reversa da aplicação nos ajudaria a entender melhor como é o seu funcionamento e conseguir mais possibilidades na exploração de potenciais vulnerabilidades.

O Android é uns dos sistemas operacionais mobile mais usado pelo mundo e há diversos aplicativos para esse sistema, então aqui vamos trabalhar com ele, considerando suas aplicações, em especial com a base em Java.

Mas antes de mostrar como é feita a engenharia reversa de apps, vamos definir alguns conceito.

ART – Adroid Runtime

O ART é o ambiente de execução dos aplicativos em Android que foi implementado a partir da versão 5.0. Ele tem algumas vantagens em relação Dalvik, ambiente anterior do Android. Em uma aplicação que tem a base Java, temos o seguinte fluxo.

Código Fonte do Android .Java –> Javac (Compilação) –> .class (Código Binário) –> Dx (Compilador Dalvik) –> .dx (Código Binário) –> Dex2aot (Compilador ART) –> ART ELF (Binário Nativo)

Sabendo desse funcionamento, vamos buscar maneiras de fazer o processo inverso!

APK – Android Application Pack

O APK é o pacote de instalação com os arquivos essenciais para a instalação do aplicativo no dispositivo. Ele pode ser até extraídos como .se fosse um zip, vamos conseguir ver os arquivos contido nesse .apk, mas não acessar o conteúdo, pois estão em binários.

DIVA – Damn insecure and vulnerable App

DIVA é uma aplicação vulnerável para testes e estudos de segurança. Vamos utilizá-la em nossos exemplo.

Repositório: https://github.com/payatu/diva-android

Abaixo apresentaremos alguns métodos de como fazer a engenharia reversa de aplicativos Android e ver o seu código fonte.

APKTOOL

O apktool é ferramenta para engenharia reversa de aplicativos Android. Ele pode decodificar para a forma quase original e reconstruí-los após fazer algumas modificações.

Repositório e mais informações, em: https://ibotpeaches.github.io/Apktool/

O seu uso é simples:

apktool d <aplicacao>.apk

A opção “d” no comando significa que queremos descompilar o .apk.

O seu funcionamento parece muito com um unzip do .apk, porém, com o apktool conseguimos ver o contéudo dos arquivos no final da extração.

Arquivos extraido e visiveis!

Dex2JAR e JD-GUI

Com a necessidade de ter uma melhor visualização, temos a opção de usar o Dex2JAR e JD-GUI juntos para facilitar o entendimento do código da aplicação.

O Dex2Jar fará a descompilação do código e JD-GUI é uma interface para uma melhor visualização do código.

Então vamos lá!

Lembra do fluxo de compilação para ART que falamos mais acima? Ele é importante para essa etapa, aqui vamos pegar o binário .dex, transformar para Java. Para isso, vamos usar o Dex2Jar. Repositório e mais informações em: https://github.com/pxb1988/dex2jar

./d2j-dex2jar.sh ../diva.apk -o ../diva.jar

./d2j-dex2jar.sh <aplicacao>.apk -o <output>.jar

Agora que voltamos um passo na compilação e temos o arquivo .jar, vamos utilizar o JD-GUI para visualizar o arquivo. Repositório e mais informações em: https://java-decompiler.github.io/

Execute o JD-GUI e selecione o arquivo .jar

Agora sim! Temos todos os arquivos do .apk visiveis e organizados, facilitando o entendimento do código daquela aplicação.

JADX

Quer mais facilidade que os passos anteriores? Ter o .apk e já ter os códigos em maos? Use o JADX!

Repositório e mais informações em: https://github.com/skylot/jadx

Seu uso é simples:

Execute o JADX e selecione o .apk


Sucesso!

Agora basta estudar a logica do código e entender melhor com funciona a aplicação.

Mas nem tudo são flores: Algumas aplicações terão ofuscação de código, essa tecnica irá fazer algumas alterações no fonte, como inserir codigo sem sentido, para dificultar o entendimento. Então não se assuste ao acessar o codigo de uma aplicação e nada fazer sentido.

Isso foi somente uma parte do processo de engenharia reversa, desejamos boa sorte e códigos para ser analisados!

Leave a Reply

Your email address will not be published. Required fields are marked *