Neste repositório encontraremos um passo-a-passo de como realizar a Engenharia Reversa de um APK.
Engenharia Reversa pode nos ajudar em vários aspectos, como identificar software ou código malicioso , descobrir falhas de segurança , encontrar funcionalidades que não eram esperadas /quebras de regra de negócio... Dito isso, vamos entrar mais a fundo sobre o universo Android.
Começando pelo básico, podemos dividir nosso Android Package (APK) em algumas partes:
Smali é a versão human readable do Dalvik bytecode, simplificando, ele funciona como um assemble/disassemble. Formato Executável Dalvik (. dex)
A termos de código, vamos dar uma olhada na diferença entre Java e Smali:
public static void printHelloWorld() {
System.out.println("Hello World")
}
E nosso mesmo código em Smali:
.method public static printHelloWorld()V
.registers 2
sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;
const-string v1, "Hello World"
invoke-virtual {v0,v1}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V
return-void
.end method
Passamos pelos conceitos básicos necessários e agora mãos a obra!
Passo 1:
Escolha o APK que você deseja fazer o Reversing.
Se você não encontrá-lo facilmente pela própria loja de aplicativos, você pode fazer diretamente em sites como APKCombo ou APKMonk.
Chegando aqui, preste atenção em algumas coisas que podem ser interessantes:
- Qual é o URL da API? (geralmente emos algo como api.domain.com)
- Qual é método de autenticação utilizado? Eu preciso criar um login para acessar?
- Quais são as chamadas que eu posso encontrar e quais são os parâmetros eles esperam?
Uma vez que temos o APK, é hora de fazer a descompilação do mesmo, para que possamos realizar a análise do código.
(Ferramentas de Análise Dinâmica como o MOBSF permitem que você já consiga realizar o download do código diretamente, sendo ele em Java ou SMALI).
Agora vamos usar ferramentas, a primeira delas é o APKTOOL, você verá mais detalhes sobre ela abaixo, mas de uma forma geral ela vai ser responsável por descompiilar os arquivos, criando uma pasta, no mesmo lugar, com todos os arquivos descomplilados. A partir daqui, você conseguirá analisar todos os códigos necessarios.
O comando usado aqui vai ser o seguinte:
- apktool d ~/Desktop/aplicativo_app.apk
Extraindo o arquivo “classes.dex” do APK.
Use a ferramenta dex2jar para converter em arquivos de classe Java. Resultando em um arquivo jar.
- sh d2j-dex2jar.sh classes.dex
Use JD-GUI para extrair o código-fonte do arquivo jar.
- Arraste o arquivo classes-dex2jar.jar pro JD-GUI
Mobile Security Framework é uma ferramenta que automatiza a análise de APKs. Dentro dela conseguimos mais detalhes sobre as partes que compoẽm os APKs, e que vimos anteriormente.
dex2jar
dedexer
apktool
apktool é uma ferramenta Java opensource para engenharia reversa de aplicativos Android. Ele pode decodificar arquivos APK para o seu código original em um XML legível por humanos. Também dividindo todas as classes e métodos contidos no arquivo em Smali. Dessa forma, você é capaz de modificar recursos ou as execuções do programa. Usando o código Smali, você pode adicionar novas funcionalidades dentro desse aplicativo ou alterar o comportamento esperado.
Usado comumente para SSL Pinning.
adb (Android Debug Bridge)
androguard
Xposed Framework
Comandos: //soon
Bypass Android SSL
Frida
Agora que temos uma base de como isso funciona, é hora de praticar! Deixo aqui, uma lista com alguns labs que você pode usar como exercício:
Teste os seguintes tipos de ataque:
Obrigada por chegar até aqui! Have a nice day.