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

106 lines
7.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Explorando uma aplicação com modo de depuração
<details>
<summary><strong>Aprenda hacking na AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Outras formas de apoiar o HackTricks:
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para os repositórios do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
# **Burlando verificações de root e debuggeable**
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)
## Passos para tornar um aplicativo Android debuggeable e burlar verificações
### **Tornando o Aplicativo Debuggeable**
Conteúdo baseado em https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0
1. **Descompilar o APK:**
- Utilize a ferramenta APK-GUI para descompilar o APK.
- No arquivo _android-manifest_, insira `android:debuggable=true` para ativar o modo de depuração.
- Recompile, assine e zipalign o aplicativo modificado.
2. **Instalar o Aplicativo Modificado:**
- Use o comando: `adb install <nome_do_aplicativo>`.
3. **Recuperar o Nome do Pacote:**
- Execute `adb shell pm list packages 3` para listar aplicativos de terceiros e encontrar o nome do pacote.
4. **Configurar o Aplicativo para Aguardar a Conexão do Depurador:**
- Comando: `adb shell am setup-debug-app w <nome_do_pacote>`.
- **Observação:** Este comando deve ser executado sempre antes de iniciar o aplicativo para garantir que ele aguarde o depurador.
- Para persistência, use `adb shell am setup-debug-app w -persistent <nome_do_pacote>`.
- Para remover todas as flags, use `adb shell am clear-debug-app <nome_do_pacote>`.
5. **Preparar para Depuração no Android Studio:**
- Navegue no Android Studio para _File -> Open Profile or APK_.
- Abra o APK recompilado.
6. **Definir Pontos de Interrupção em Arquivos Java Chave:**
- Coloque pontos de interrupção em `MainActivity.java` (especificamente no método `onCreate`), `b.java` e `ContextWrapper.java`.
### **Burlando Verificações**
O aplicativo, em determinados pontos, verificará se está em modo de depuração e também verificará binários que indicam um dispositivo com root. O depurador pode ser usado para modificar informações do aplicativo, desativar o bit de depuração e alterar os nomes dos binários pesquisados para burlar essas verificações.
Para a verificação de debuggeable:
1. **Modificar Configurações de Flag:**
- Na seção de variáveis do console do depurador, navegue até: `this mLoadedAPK -> mApplicationInfo -> flags = 814267974`.
- **Observação:** 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 o aplicativo possa ser depurado e que certas verificações de segurança possam ser burladas usando o depurador, facilitando uma análise ou modificação mais aprofundada do comportamento do aplicativo.
O Passo 2 envolve a alteração de um valor de flag para 814267972, que é representado em binário como 110000101101000000100010100.
# **Explorando uma Vulnerabilidade**
Foi fornecida uma demonstração usando um aplicativo vulnerável contendo um botão e um textview. Inicialmente, o aplicativo exibe "Crack Me". O objetivo é alterar a mensagem de "Tentar Novamente" para "Hackeado" em tempo de execução, sem modificar o código-fonte.
## **Verificando a Vulnerabilidade**
- O aplicativo foi descompilado usando `apktool` para acessar o arquivo `AndroidManifest.xml`.
- A presença de `android_debuggable="true"` no AndroidManifest.xml indica que o aplicativo é debuggeable e suscetível a exploração.
- Vale ressaltar que o `apktool` é usado exclusivamente para verificar o status de debug sem alterar nenhum código.
## **Preparando a Configuração**
- O processo envolveu iniciar um emulador, instalar o aplicativo 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 um aplicativo em execução em uma VM, expondo uma porta única.
- O encaminhamento de porta foi necessário para depuração remota, seguido pela conexão do JDB ao aplicativo de destino.
## **Injetando Código em Tempo de Execução**
- A exploração foi realizada configurando pontos de interrupção e controlando o fluxo do aplicativo.
- Comandos como `classes` e `methods <nome_da_classe>` foram usados para descobrir a estrutura do aplicativo.
- Um ponto de interrupção 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, especialmente alterando a mensagem "Tentar Novamente" para "Hackeado".
- O código modificado foi executado usando o comando `run`, alterando com sucesso a saída do aplicativo em tempo real.
Este exemplo demonstrou como o comportamento de um aplicativo debuggeable pode ser manipulado, destacando o potencial para exploits mais complexos, como obter acesso ao shell no dispositivo no contexto do aplicativo.
## 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)
<details>
<summary><strong>Aprenda hacking na AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Outras formas de apoiar o HackTricks:
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para os repositórios do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>