Exploiting a debuggeable application
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Esta seção do post é um resumo do post https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0
Conteúdo baseado em https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0
Decompile the 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.
Install the Modified Application:
Use o comando: adb install <application_name>
.
Retrieve the Package Name:
Execute adb shell pm list packages –3
para listar aplicativos de terceiros e encontrar o nome do pacote.
Set the App to Await Debugger Connection:
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 for Debugging in Android Studio:
Navegue no Android Studio para File -> Open Profile or APK.
Abra o APK recompilado.
Set Breakpoints in Key Java Files:
Coloque breakpoints em MainActivity.java
(especificamente no método onCreate
), b.java
e ContextWrapper.java
.
A aplicação, em certos pontos, verificará se está debuggable e também verificará binários indicando um dispositivo com root. O depurador pode ser usado para modificar informações do aplicativo, desmarcar o bit debuggable e alterar os nomes dos binários pesquisados para contornar essas verificações.
Para a verificação debuggable:
Modify Flag Settings:
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 o "Flag_debuggable" está ativo.
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.
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.
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 é debuggable e suscetível a exploração.
Vale ressaltar que o apktool
é empregado apenas para verificar o status debuggable sem alterar nenhum código.
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 conexão do JDB à aplicação alvo.
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 debuggable pode ser manipulado, destacando o potencial para explorações mais complexas, como obter acesso ao shell no dispositivo no contexto da aplicação.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)