hacktricks/mobile-pentesting/android-app-pentesting/exploiting-a-debuggeable-applciation.md

109 lines
7.6 KiB
Markdown
Raw Normal View History

# Exploiting a debuggeable application
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-04-28 16:01:33 +00:00
<details>
<summary>Support HackTricks</summary>
2022-04-28 16:01:33 +00:00
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
2022-04-28 16:01:33 +00:00
</details>
{% endhint %}
2022-04-28 16:01:33 +00:00
# **Contornando verificações de root e debuggeable**
2022-04-28 16:01:33 +00:00
Esta seção do post é um resumo do post [**https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0**](https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0)
2022-04-28 16:01:33 +00:00
## Passos para tornar um aplicativo Android debugável e contornar verificações
### **Tornando o App Debuggable**
Conteúdo baseado em https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0
1. **Decompile o APK:**
- Utilize a ferramenta APK-GUI para decompilar o APK.
- No arquivo _android-manifest_, insira `android:debuggable=true` para habilitar o modo de depuração.
- Recompile, assine e zipalign a aplicação modificada.
2. **Instale a Aplicação Modificada:**
- Use o comando: `adb install <application_name>`.
3. **Recupere o Nome do Pacote:**
- Execute `adb shell pm list packages 3` para listar aplicativos de terceiros e encontrar o nome do pacote.
4. **Configure o App para Aguardar Conexão do Depurador:**
- Comando: `adb shell am setup-debug-app w <package_name>`.
- **Nota:** Este comando deve ser executado toda vez antes de iniciar a aplicação para garantir que ela aguarde o depurador.
- Para persistência, use `adb shell am setup-debug-app w -persistent <package_name>`.
- Para remover todas as flags, use `adb shell am clear-debug-app <package_name>`.
5. **Prepare-se para Depuração no Android Studio:**
- Navegue no Android Studio para _File -> Open Profile or APK_.
- Abra o APK recompilado.
6. **Defina Breakpoints em Arquivos Java Chave:**
- Coloque breakpoints em `MainActivity.java` (especificamente no método `onCreate`), `b.java` e `ContextWrapper.java`.
### **Contornando Verificações**
A aplicação, em certos pontos, verificará se é debugável e também verificará binários que indicam um dispositivo com root. O depurador pode ser usado para modificar informações do app, desmarcar o bit de debugável e alterar os nomes dos binários pesquisados para contornar essas verificações.
Para a verificação de debugável:
1. **Modifique Configurações de Flag:**
- Na seção de variáveis do console do depurador, navegue até: `this mLoadedAPK -> mApplicationInfo -> flags = 814267974`.
- **Nota:** A representação binária de `flags = 814267974` é `11000011100111011110`, indicando que a "Flag_debuggable" está ativa.
![https://miro.medium.com/v2/resize:fit:1400/1*-ckiSbWGSoc1beuxxpKbow.png](https://miro.medium.com/v2/resize:fit:1400/1*-ckiSbWGSoc1beuxxpKbow.png)
Esses passos garantem coletivamente que a aplicação pode ser depurada e que certas verificações de segurança podem ser contornadas usando o depurador, facilitando uma análise ou modificação mais aprofundada do comportamento da aplicação.
O passo 2 envolve mudar um valor de flag para 814267972, que é representado em binário como 110000101101000000100010100.
# **Explorando uma Vulnerabilidade**
Uma demonstração foi fornecida usando uma aplicação vulnerável contendo um botão e um textview. Inicialmente, a aplicação exibe "Crack Me". O objetivo é alterar a mensagem de "Try Again" para "Hacked" em tempo de execução, sem modificar o código-fonte.
## **Verificando a Vulnerabilidade**
- A aplicação foi decompilada usando `apktool` para acessar o arquivo `AndroidManifest.xml`.
- A presença de `android_debuggable="true"` no AndroidManifest.xml indica que a aplicação é debugável e suscetível à exploração.
- Vale ressaltar que `apktool` é empregado apenas para verificar o status de debugável sem alterar nenhum código.
## **Preparando o Setup**
- O processo envolveu iniciar um emulador, instalar a aplicação vulnerável e usar `adb jdwp` para identificar as portas do Dalvik VM que estão ouvindo.
- O JDWP (Java Debug Wire Protocol) permite a depuração de uma aplicação em execução em uma VM, expondo uma porta única.
- O encaminhamento de porta foi necessário para depuração remota, seguido pela anexação do JDB à aplicação alvo.
## **Injetando Código em Tempo de Execução**
- A exploração foi realizada definindo breakpoints e controlando o fluxo da aplicação.
- Comandos como `classes` e `methods <class_name>` foram usados para descobrir a estrutura da aplicação.
- Um breakpoint foi definido no método `onClick`, e sua execução foi controlada.
- Os comandos `locals`, `next` e `set` foram utilizados para inspecionar e modificar variáveis locais, particularmente mudando a mensagem "Try Again" para "Hacked".
- O código modificado foi executado usando o comando `run`, alterando com sucesso a saída da aplicação em tempo real.
Este exemplo demonstrou como o comportamento de uma aplicação debugável pode ser manipulado, destacando o potencial para explorações mais complexas, como obter acesso ao shell no dispositivo no contexto da aplicação.
## Referências
* [https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0](https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0)
* [https://resources.infosecinstitute.com/android-hacking-security-part-6-exploiting-debuggable-android-applications](https://resources.infosecinstitute.com/android-hacking-security-part-6-exploiting-debuggable-android-applications)
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}