7.6 KiB
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
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
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
- 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.
- Instale a Aplicação Modificada:
- Use o comando:
adb install <application_name>
.
- Recupere o Nome do Pacote:
- Execute
adb shell pm list packages –3
para listar aplicativos de terceiros e encontrar o nome do pacote.
- 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>
.
- Prepare-se para Depuração no Android Studio:
- Navegue no Android Studio para File -> Open Profile or APK.
- Abra o APK recompilado.
- Defina Breakpoints em Arquivos Java Chave:
- Coloque breakpoints em
MainActivity.java
(especificamente no métodoonCreate
),b.java
eContextWrapper.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:
- 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.
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 arquivoAndroidManifest.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
emethods <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
eset
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://resources.infosecinstitute.com/android-hacking-security-part-6-exploiting-debuggable-android-applications
{% 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
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.