Skip to content

Repositório com material voltado para Engenharia Reversa de Aplicações Android.

Notifications You must be signed in to change notification settings

wh0isdxk/AndroidRevEngineering

Repository files navigation

android

Avengers, Disassemble!

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:

Untitled Diagram(1)

Smali/Baksmali

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

Componentes da Aplicação

Avengers, disassemble!

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

Dynamic Analysis

Tools

Builders

  • Android Studio

Breakers

  • Frida
  • Burp Suite
  • dex2jar
  • droxer
  • apktool
  • adb

Static Analysis

Dynamic Analysis

  • 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

Bypass Root Detection and SSL Pinning

  • Android SSL Bypass

  • Frida

Materiais

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:

Recomendações

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

Books

Links Interessantes

Obrigada por chegar até aqui! Have a nice day. ♥️