├── 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 | 
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 | 
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 |
--------------------------------------------------------------------------------