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!
Views: 8282
Olá amigo tudo joia amigo sou novo por aqui ..viu amigo fãs um vídeo explicando melhor sobre esta engenharia
.tenho um probleminha de vista ..mais se você puder fazer um vídeo.. valeu mesmo um forte abraço
Eu que não tenho problema de vista não consegui enxergar nada! rsrsrs
Opaaaaa eu estou querendo fazer um app para somente receber mensagens dos perdidos do meu sistema que TB tá indo pelo whatsapp. Existe um app que uso de terceiros que faz um som específico dele e aparece msg push, gostaria de poder fazer engenharia reversa e criar o meu usando ele como modelo. Obs: o app gratuito!