hacktricks/mobile-pentesting/android-app-pentesting/exploiting-a-debuggeable-applciation.md
2024-12-12 13:56:11 +01:00

7.6 KiB
Raw Blame History

Exploiting a debuggeable application

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

Contornando 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

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.
  1. Instale a Aplicação Modificada:
  • Use o comando: adb install <application_name>.
  1. Recupere o Nome do Pacote:
  • Execute adb shell pm list packages 3 para listar aplicativos de terceiros e encontrar o nome do pacote.
  1. 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>.
  1. Prepare-se para Depuração no Android Studio:
  • Navegue no Android Studio para File -> Open Profile or APK.
  • Abra o APK recompilado.
  1. 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

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

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}