├── Conceitos.md ├── InterceptacaoDeTrafego.md ├── README.md ├── SSLPinning.md ├── SecureDevelopment.md ├── Slides ├── SurfaceAttack.md ├── Talks └── Roadsec2022.md └── Tools ├── Analysis.md ├── Breakers.md └── Builders.md /Conceitos.md: -------------------------------------------------------------------------------- 1 | # Conceitos 2 | 3 | ### AndroidManifest.xml 4 | 5 | Composto por **todas as permissões** que a aplicação vai ter, é responsável por fazer a definição da arquitetura desse apk. Dentro dele encontramos requisição de acesso a internet, GPS, notificações e qualquer outra coisa que o aplicativo venha a necessitar, são geralmente os acessos que o aplicativo pede na hora da instalação. Além disso, encontramos informações voltadas a versionamento, nome da aplicação, requisitos mínimos para que ela funcione, componentes voltados para Receivers, Senders e Providers e componentes. 6 | 7 | Abaixo temos um exemplo do que encontramos nesse xml: 8 | 9 | uses-permission android:name="android.permission.INTERNET" 10 | 11 | uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" 12 | 13 | uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" 14 | 15 | uses-permission android:name="android.permission.VIBRATE" 16 | 17 | uses-permission android:name="android.permission.WAKE_LOCK" 18 | 19 | uses-permission android:name="com.android.vending.BILLING" 20 | 21 | Note que, em diversas aplicações, várias requisições de permissões são feitas mesmo que o app em si não necessite de tais funções. 22 | 23 | ### META-INF/ 24 | 25 | Essa pasta contém dados relacionados ao Manifest e outros metadatas carregados pelo arquivo .jar. 26 | 27 | Dentro dele encontraremos os seguintes arquivos: 28 | 29 | - MANIFEST.MF: versão do pacote, número da compilação, criador, etc. 30 | - CERT.SF: Nesse doc encontramos a lista de todos os arquivos junto com o resumo do SHA-1. 31 | - CERT.RSA: Aqui temos o conteúdo assinado do arquivo CERT.SF, juntamente com os certificados da chave pública usada para assinatura. 32 | 33 | 34 | ### classes.dex 35 | 36 | Quando descompilamos o apk, no .dex teremos **todas as classes java que estão presentes no código** do aplicativo. Esses arquivos são os exexutados pelo DVM (Dalvik Virtual Machine)e não inclui os recursos, que são mantidos separadamente na pasta /res. 37 | 38 | Caso você decida modificar esse arquivo, estará alterando o comportamento dos programas; se excluir, ele deixará de ter um código executável. 39 | 40 | ### lib/ 41 | 42 | Composto pelas **bibliotecas nativas** da aplicação. 43 | 44 | ### assets/ 45 | 46 | Carregam consigo **bibliotecas adicionais** e outros arquivos que possam ser necessários para o App. 47 | 48 | ### res/ 49 | 50 | Diretório com todos os **recursos**, xlms de **atividades, layouts, imagens** e etc. 51 | 52 | ### resources.arcs 53 | 54 | Por último temos o arquivo que funciona como um **índice de todos os recursos mencionados**, mapeando essas entradas. 55 | 56 | # 57 | 58 | # Componentes 59 | 60 | ### Activities 61 | Representam partes da aplicação onde há **interação com o usuário**, como formulários, botões, caixas de texto... 62 | 63 | ### Services 64 | São como as activities, porém **rodam em segundo plano** (background), continuam funcionando mesmo quando o usuário abriu uma outra aplicação. 65 | 66 | Possuem 2 modos: **iniciado** ou **vinculado** a alguma outra aplicação. 67 | 68 | ### Content Providers 69 | Funcionam como uma **base de dados**, um storage que permite com que dados sejam armazenados de uma forma segura. 70 | Também fornecem uma maneira padrão de recuperar, modificar e excluir dados. 71 | 72 | ### Broadcast Receivers 73 | Permite ao sistema **distribuir eventos**, ou seja, uma parte do código da aplicação é executada quando um determinado evento acontece e, desde que tenha autorização, realiza uma ação, como notificação de SMS, por exemplo. 74 | -------------------------------------------------------------------------------- /InterceptacaoDeTrafego.md: -------------------------------------------------------------------------------- 1 | # Interceptando o Tráfego das Requisições em Android 2 | 3 | ## 1 - Verificando as Configurações de Rede 4 | 5 | Verifique o IP do computador, que será utilizado como proxy. 6 | 7 | > ifconfig 8 | > ip addr 9 | 10 | ## 2 - Configurando o Burp Suite 11 | 12 | Nessa segunda etapa faremos a configuração do Burp Suite para que ele possa ouvir as requisições. 13 | 14 | - Vá até "Burp Proxy Listener" e selecione a aba "Proxy"; 15 | - Em seguida, vá até Opções e em "Proxy Listener" clique em add. 16 | - Binding tab -> 17 | - Bind to port: 8082 18 | - selecionar a opção ALL INTERFACES 19 | - Salvar as configurações em "Ok". 20 | 21 | ## 3 - Configurando o Proxy (Android) 22 | 23 | - Na aba de configurações do seu dispositivo, entre na opção de Wifi; 24 | - Selecione a rede desejada e estabeleca a conexão; 25 | - Dentro do sistema, vá até "Modify Network Config" e então "Show Advanced Options"; 26 | - Altere em "Proxy Setting" para a configuração MANUAL e então preencha o campo de Proxy Hostname com o ip obtido na nossa primeira etapa, e Proxy Port como 8082; 27 | - Salve essas modificações. 28 | 29 | Para checar o funcionamento, vá em Proxy Intercept, dentro do Burp Suite, e verifique se essa opção se encontra ON. 30 | 31 | Volte ao navegador do seu dispositvo móvel, entre em um site qualquer e veja se as requisições estão sendo ouvidas pelo Burp. 32 | 33 | Se sim, ele estará funcionando. 34 | 35 | ## 4 - Instalando o Certificado 36 | 37 | No seu computador, acesse https://burp, clique em CA Certificate e salve o arquivo; 38 | 39 | - Renomeie para cacert.cer e envie via e-mail para seu device; 40 | - Já no seu device, faça o download do certificado e siga os seguintes passos: 41 | - My files -> all files -> device storage -> downloads 42 | 43 | (Verifique se o certificado se encontra nessa pasta ou localize o lugar onde ele se encontra) 44 | 45 | - Siga os seguintes passos: 46 | - Settings -> More -> Permissions -> Security -> Install from device storage; 47 | - Instale o Certificado com o nome cacert e em Credencial Use: "VPN and apps"; 48 | - Verifique se realmente foi instalado em "Trusted Credencials" (ele deverá estar como PortSwigger CA); 49 | 50 | Estará funcionando corretamente se você estiver apta para visitar qualquer site sem que avisos de segurança apareçam no site na hora do acesso inicial. 51 | 52 | 53 | ### Ferramentas: 54 | 55 | Para interceptação: 56 | 57 | - Burp Suite 58 | - MITM Proxy 59 | - Charles 60 | 61 | Emuladores de Android: 62 | 63 | - Genymotion 64 | - Bluestacks 65 | - Nox Player 66 | 67 | 68 | 69 | > Em caso de dúvidas, entrar em contato. <3 70 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![android](https://user-images.githubusercontent.com/37185061/175793659-70fe8f84-d297-4605-ba0e-6455ec0d79b5.png) 2 | 3 | 4 | ### Avengers, Disassemble! 5 | 6 | Neste repositório encontraremos um passo-a-passo de como realizar a Engenharia Reversa de um APK. 7 | 8 | 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... 9 | Dito isso, vamos entrar mais a fundo sobre o universo Android. 10 | 11 |

12 | 13 | 14 | 15 |

16 | 17 | Começando pelo básico, podemos dividir o nosso Android Package (APK) em algumas partes: 18 | 19 | ![Untitled Diagram(1)](https://user-images.githubusercontent.com/37185061/76150991-a2224980-608e-11ea-8363-558491f9adda.png) 20 | 21 | - [AndroidManifest.xml](https://github.com/wh0isdxk/AndroidRevEngineering/new/master#androidmanifestxml) 22 | - [META-INF/](https://github.com/wh0isdxk/AndroidRevEngineering/new/master#meta-inf) 23 | - [classes.dex](https://github.com/wh0isdxk/AndroidRevEngineering/new/master#classesdex) 24 | - [lib/](https://github.com/wh0isdxk/AndroidRevEngineering/new/master#lib) 25 | - [assets/](https://github.com/wh0isdxk/AndroidRevEngineering/new/master#assets) 26 | - [res/](https://github.com/wh0isdxk/AndroidRevEngineering/new/master#res) 27 | - [resources.arcs](https://github.com/wh0isdxk/AndroidRevEngineering/new/master#resourcesarcs) 28 | 29 | 30 | ### Smali/Baksmali 31 | 32 | O Smali é a versão human readable do Dalvik bytecode, simplificando, funciona como um assemble/disassemble. Dalvik Executable format (.dex) 33 | 34 | 35 | A termos de código, vamos dar uma olhada na diferença entre Java e Smali: 36 | 37 | public static void printHelloWorld() { 38 | System.out.println("Hello World") 39 | } 40 | 41 | E o nosso mesmo código em Smali: 42 | 43 | .method public static printHelloWorld()V 44 | .registers 2 45 | sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream; 46 | const-string v1, "Hello World" 47 | invoke-virtual {v0,v1}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V 48 | return-void 49 | .end method 50 | 51 | 52 | ## Componentes da Aplicação 53 | 54 | - [Activities](https://github.com/wh0isdxk/AndroidRevEngineering/blob/master/Conceitos.md#activities) 55 | - [Services](https://github.com/wh0isdxk/AndroidRevEngineering/blob/master/Conceitos.md#services) 56 | - [Content Providers](https://github.com/wh0isdxk/AndroidRevEngineering/blob/master/Conceitos.md#content-providers) 57 | - [Broadcast Receivers](https://github.com/wh0isdxk/AndroidRevEngineering/blob/master/Conceitos.md#broadcast-receivers) 58 | 59 | ### Avengers, disassemble! 60 | 61 | Passamos pelos conceitos básicos necessários e agora mãos a obra! 62 | 63 | Passo 1: 64 | 65 | Escolha o APK que você deseja fazer o Reversing. 66 | 67 | Se você não encontrá-lo facilmente pela própria loja de aplicativos, pode fazer diretamente em sites como APKCombo ou APKMonk. 68 | 69 | Chegando aqui, atente-se para algumas coisas que podem ser interessantes: 70 | 71 | - Qual é o URL da API? (geralmente emos algo como api.domain.com) 72 | - Qual é método de autenticação utilizado? Eu preciso criar um login para acessar? 73 | - Quais são as chamadas que eu posso encontrar e quais são os parâmetros eles esperam? 74 | 75 | Uma vez que temos o APK, é hora de fazer a descompilação do mesmo, para que possamos realizar a análise do código. 76 | 77 | (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). 78 | 79 | 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. 80 | 81 | O comando utilizado aqui vai ser o seguinte: 82 | 83 | - apktool d ~/Desktop/aplicativo_app.apk 84 | 85 | Extraindo o arquivo “classes.dex” do APK. 86 | 87 | Use a ferramenta dex2jar para converter em arquivos de classe Java. Resultando em um arquivo jar. 88 | 89 | - sh d2j-dex2jar.sh classes.dex 90 | 91 | Use o JD-GUI para extrair o código-fonte do arquivo jar. 92 | 93 | - Arraste o arquivo classes-dex2jar.jar pro JD-GUI 94 | 95 | 96 | # Dynamic Analysis 97 | 98 | 99 | 100 | ## Tools 101 | 102 | #### Builders 103 | 104 | - Android Studio 105 | 106 | #### Breakers 107 | 108 | - Frida 109 | - Burp Suite 110 | - dex2jar 111 | - droxer 112 | - apktool 113 | - adb 114 | 115 | #### Static Analysis 116 | 117 | - [MobSF](https://github.com/MobSF) 118 | 119 | #### Dynamic Analysis 120 | 121 | - Mobsf 122 | 123 | Mobile Security Framework é uma ferramenta que automatiza a análise de APKs. 124 | Dentro dela conseguimos mais detalhes sobre as partes que compoẽm os APKs, e que vimos anteriormente. 125 | 126 | - dex2jar 127 | 128 | - dedexer 129 | 130 | - apktool 131 | 132 | O apktool é uma ferramenta Java opensource para engenharia reversa de aplicações Android. 133 | Ele pode decodificar arquivos APK para o seu código original em um XML legível por humanos. Também dividindo todas as classes 134 | 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. 135 | 136 | - Frida 137 | 138 | Usado comumente para SSL Pinning. 139 | 140 | - adb (Android Debug Bridge) 141 | 142 | - androguard 143 | 144 | - Xposed Framework 145 | 146 | Comandos: //soon 147 | 148 | 149 | ### Bypass Root Detection and SSL Pinning 150 | 151 | - Android SSL Bypass 152 | 153 | - Frida 154 | 155 | # Materiais 156 | 157 | Agora que já temos uma base de como isso funciona, é hora de praticar! 158 | Deixo aqui, uma lista com alguns labs que você pode usar como exercício: 159 | 160 | * [Damn Vulnerable Hybrid Mobile Application](https://github.com/logicalhacking/DVHMA) 161 | * [Android Digital Bank](https://github.com/CyberScions/Digitalbank) 162 | * [Damn Insecure and Vulnerable App](https://github.com/payatu/diva-android) 163 | * [Hackme Bank](http://www.mcafee.com/us/downloads/free-tools/hacme-bank-android.aspx) 164 | * [Insecure Bank](https://github.com/dineshshetty/Android-InsecureBankv2) 165 | * [Damn Vulnerable Android Application](https://code.google.com/archive/p/dvaa/) 166 | * [OWASP GoatDroid](https://github.com/jackMannino/OWASP-GoatDroid-Project) 167 | * [Dodo Vulnerable Bank](https://github.com/CSPF-Founder/DodoVulnerableBank) 168 | * [Vulnerable Android Application](https://github.com/dan7800/VulnerableAndroidAppOracle) 169 | * [Vulnerable Android Application - Urdu](http://urdusecurity.blogspot.co.uk/2014/08/Exploiting-debuggable-android-apps.html) 170 | * [MoshZuk](https://dl.dropboxusercontent.com/u/37776965/Work/MoshZuk.apk) 171 | * [AppKnox Vulnerable Application](https://github.com/appknox/vulnerable-application) 172 | * [Vulnerable Android Application](https://github.com/Lance0312/VulnApp) 173 | * [Security Compass Android Application](https://github.com/SecurityCompass/AndroidLabs) 174 | * [SecurityShepherd](https://github.com/OWASP/SecurityShepherd) 175 | * [owasp-mstg](https://github.com/OWASP/owasp-mstg/tree/master/Crackmes) 176 | * [VulnerableAndroidAppOracle](https://github.com/dan7800/VulnerableAndroidAppOracle) 177 | * [Android InsecureBankv2](https://github.com/dineshshetty/Android-InsecureBankv2) 178 | * [Purposefully Insecure and Vulnerable Android Application (PIIVA)](https://github.com/htbridge/pivaa) 179 | * [Sieve app](https://github.com/mwrlabs/drozer/releases/download/2.3.4/sieve.apk) 180 | 181 | ### Recomendações 182 | 183 | Teste os seguintes tipos de ataque: 184 | 185 | * Broken crypto 186 | * Insecure data storage 187 | * Poor authentication 188 | * Untrusted input 189 | * Reverse engineering 190 | * Weak server-side controls 191 | * Client side injection 192 | * Content provider leakage 193 | * Unintended Data Leakage 194 | * Usage of weak Initialization Vector 195 | * Man-In-The-Middle Attack 196 | * Remote URL load in WebView 197 | * Object deserialization 198 | * SQL injection 199 | * Missing tapjacking protection 200 | * Enabled Application Backup 201 | * Enabled Debug Mode 202 | * Weak encryptionvHardcoded encryption keys 203 | * Dynamic load of codevCreation of world readable or writable files 204 | * Usage of unencrypted HTTP protocol 205 | * Weak hashing algorithms 206 | * Predictable Random Number Generator 207 | * Exported Content Providers with insufficient protection 208 | * Exported Broadcast Receivers 209 | * Exported ServicesvJS enabled in a WebView 210 | * Deprecated setPluginState in WebView 211 | * Hardcoded data 212 | * Untrusted CA acceptance 213 | * Usage of banned API functions 214 | * Self-signed CA enabled in WebView 215 | * Path Traversal 216 | * Cleartext SQLite database 217 | * Temporary file creation 218 | 219 | 220 | # Books 221 | 222 | - [Android Hacker's Handbook](https://www.amazon.com.br/Android-Hackers-Handbook-Joshua-Drake/dp/111860864X/ref=sr_1_1?keywords=android+hackers+handbook&qid=1644028298&sprefix=android+hacker%2Caps%2C189&sr=8-1&ufe=app_do%3Aamzn1.fos.25548f35-0de7-44b3-b28e-0f56f3f96147) 223 | - [The Mobile Application Hacker’s Handbook](https://www.amazon.com.br/Mobile-Application-Hacker%E2%80%B2s-Handbook/dp/1118958500/ref=sr_1_2?keywords=android+hackers+handbook&qid=1644028298&sprefix=android+hacker%2Caps%2C189&sr=8-2&ufe=app_do%3Aamzn1.fos.25548f35-0de7-44b3-b28e-0f56f3f96147) 224 | - [Android Security Internals](https://www.amazon.com.br/Android-Security-Internals-Depth-Architecture/dp/1593275811/ref=sr_1_4?keywords=android+hackers+handbook&qid=1644028298&sprefix=android+hacker%2Caps%2C189&sr=8-4&ufe=app_do%3Aamzn1.fos.e05b01e0-91a7-477e-a514-15a32325a6d6) 225 | - [Android Security Cookbook](https://www.amazon.com.br/Android-Security-Cookbook-Keith-Makan/dp/1782167161/ref=sr_1_1?keywords=android+security&qid=1644028398&s=books&sprefix=android+sec%2Cstripbooks%2C190&sr=1-1&ufe=app_do%3Aamzn1.fos.25548f35-0de7-44b3-b28e-0f56f3f96147) 226 | - [Android Security Attacks and Defenses](https://www.amazon.com.br/Android-Security-Defenses-Anmol-Misra/dp/1439896461/ref=sr_1_4?keywords=android+security&qid=1644028398&s=books&sprefix=android+sec%2Cstripbooks%2C190&sr=1-4&ufe=app_do%3Aamzn1.fos.6121c6c4-c969-43ae-92f7-cc248fc6181d) 227 | 228 | 229 | ### Links Interessantes 230 | 231 | - [Interceptando o Tráfego das Requisições em Android](https://github.com/wh0isdxk/AndroidRE/blob/master/Interceptacao.md) 232 | - [Bypassing SSL Pinning](https://github.com/wh0isdxk/AndroidRevEngineering/blob/master/SSLPinning.md) 233 | 234 | # 235 | *Obrigada por chegar até aqui! 236 | Have a nice day. :hearts:* 237 | 238 | -------------------------------------------------------------------------------- /SSLPinning.md: -------------------------------------------------------------------------------- 1 | # SSL Pinning 2 | 3 | ### O que é? 4 | 5 | Um mecanismo que permite melhorar a segurança de um serviço que dependa de certificados SSL, permitindo especificar uma identidade criptográfica que deverá ser aceita nessa "troca". 6 | Por Identidade Criptográfica, temos sistema que é capaz de um provar a identidade de um host/servidor utilizando criptografia, temos alguns exemplos disso quando tratamos de SSL e chaves públicas. Esse Pinning permite que o client se lembre e verifique antes essa identidade e estabeleça uma conexão segura. 7 | Esse método é muito utilizado para que você evite que um certificado não autorizado seja emitido para um host seu. 8 | 9 | 10 | ### Como usar? 11 | 12 | 13 | ### Bypassing SSL Pinning 14 | 15 | Usando Frida <3 16 | -------------------------------------------------------------------------------- /SecureDevelopment.md: -------------------------------------------------------------------------------- 1 | # Desenvolvimento Seguro para Dispositivos Móveis 2 | -------------------------------------------------------------------------------- /Slides: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /SurfaceAttack.md: -------------------------------------------------------------------------------- 1 | # Superfície de Ataque em Dispositivos Móveis 2 | 3 |

4 | 5 |

6 | 7 | ### via Browser 8 | - Phishing 9 | - Buffer Overflow 10 | - Man-in-the-Middle 11 | - Clickjacking 12 | - Data Caching 13 | - Framing 14 | 15 | ### via Sistema 16 | - Weak Passcodes 17 | - Passwords accesible 18 | - Weak Encryption 19 | - iOS Jailbreak 20 | - Android Rooting 21 | 22 | ### via Phone 23 | - SMishing 24 | - Baseband Attacks 25 | 26 | ### via Applications 27 | - Source Code 28 | - Vulnerabilities 29 | - Secrets Hardcoded 30 | - Weak Encryption 31 | - Misconfiguration (Permissions) 32 | - Sensitive Data Storage 33 | - Escalated Privileges 34 | - Config. Manipulation 35 | - Improper SSL Validation 36 | 37 | ### via Network 38 | - Wi-Fi with **no** encryption or weak encryption 39 | - Pocket Sniffing 40 | - Man-in-the-Middle 41 | - Session Hijacking 42 | - DNS Poisoning 43 | - SSL Strip 44 | - SSL Certificate 45 | 46 | ### via Webserver 47 | - Vulnerabilities 48 | - Misconfiguration 49 | - Cross-Site Scripting (XSS) 50 | - Cross-Site Request Forgery (XSRF) 51 | - Weak Input Validation 52 | - Brute Force Attacks 53 | 54 | ### via Database 55 | - SQL Injection 56 | - Privilege Escalation 57 | - Data Dumping 58 | - Command Execution (OS) 59 | -------------------------------------------------------------------------------- /Talks/Roadsec2022.md: -------------------------------------------------------------------------------- 1 | # Mobile Hacking 101 2 | 3 | [Mobile Hacking - Daiane Santos .pdf](https://github.com/wh0isdxk/AndroidRevEngineering/files/9086716/Mobile.Hacking.-.Daiane.Santos.pdf) 4 | -------------------------------------------------------------------------------- /Tools/Analysis.md: -------------------------------------------------------------------------------- 1 | ### Analysis 2 | -------------------------------------------------------------------------------- /Tools/Breakers.md: -------------------------------------------------------------------------------- 1 | ### Breakers 2 | 3 | - Burp Suite 4 | - Frida 5 | - ADB 6 | - Dex2Jar 7 | 8 | -------------------------------------------------------------------------------- /Tools/Builders.md: -------------------------------------------------------------------------------- 1 | - Android Studio 2 | --------------------------------------------------------------------------------