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 o nosso Android Package (APK) em algumas partes:
O Smali é a versão human readable do Dalvik bytecode, simplificando, funciona como um assemble/disassemble. Dalvik Executable format (.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 o 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, pode fazer diretamente em sites como APKCombo ou APKMonk.
Chegando aqui, atente-se para 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 utilizado 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 o JD-GUI para extrair o código-fonte do arquivo jar.
- Arraste o arquivo classes-dex2jar.jar pro JD-GUI
- Android Studio
- Frida
- Burp Suite
- dex2jar
- droxer
- apktool
- adb
- Mobsf
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
O apktool é uma ferramenta Java opensource para engenharia reversa de aplicações 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. Utilizando o código Smali, você pode adicionar novas funcionalidades dentro dessa aplicação ou alterar o comportamento esperado.
- Frida
Usado comumente para SSL Pinning.
-
adb (Android Debug Bridge)
-
androguard
-
Xposed Framework
Comandos: //soon
-
Android SSL Bypass
-
Frida
Agora que já temos uma base de como isso funciona, é hora de praticar! Deixo aqui, uma lista com alguns labs que você pode usar como exercício:
- Damn Vulnerable Hybrid Mobile Application
- Android Digital Bank
- Damn Insecure and Vulnerable App
- Hackme Bank
- Insecure Bank
- Damn Vulnerable Android Application
- OWASP GoatDroid
- Dodo Vulnerable Bank
- Vulnerable Android Application
- Vulnerable Android Application - Urdu
- MoshZuk
- AppKnox Vulnerable Application
- Vulnerable Android Application
- Security Compass Android Application
- SecurityShepherd
- owasp-mstg
- VulnerableAndroidAppOracle
- Android InsecureBankv2
- Purposefully Insecure and Vulnerable Android Application (PIIVA)
- Sieve app
Teste os seguintes tipos de ataque:
- Broken crypto
- Insecure data storage
- Poor authentication
- Untrusted input
- Reverse engineering
- Weak server-side controls
- Client side injection
- Content provider leakage
- Unintended Data Leakage
- Usage of weak Initialization Vector
- Man-In-The-Middle Attack
- Remote URL load in WebView
- Object deserialization
- SQL injection
- Missing tapjacking protection
- Enabled Application Backup
- Enabled Debug Mode
- Weak encryptionvHardcoded encryption keys
- Dynamic load of codevCreation of world readable or writable files
- Usage of unencrypted HTTP protocol
- Weak hashing algorithms
- Predictable Random Number Generator
- Exported Content Providers with insufficient protection
- Exported Broadcast Receivers
- Exported ServicesvJS enabled in a WebView
- Deprecated setPluginState in WebView
- Hardcoded data
- Untrusted CA acceptance
- Usage of banned API functions
- Self-signed CA enabled in WebView
- Path Traversal
- Cleartext SQLite database
- Temporary file creation
- Android Hacker's Handbook
- The Mobile Application Hacker’s Handbook
- Android Security Internals
- Android Security Cookbook
- Android Security Attacks and Defenses
Obrigada por chegar até aqui!
Have a nice day.