7.8 KiB
Explorando uma aplicação depurável
Aprenda hacking no AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras formas de apoiar o HackTricks:
- Se você quer ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF, confira os PLANOS DE ASSINATURA!
- Adquira o material oficial PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção de NFTs exclusivos
- Junte-se ao grupo 💬 Discord ou ao grupo do telegram ou siga-me no Twitter 🐦 @carlospolopm.
- Compartilhe suas técnicas de hacking enviando PRs para os repositórios github do HackTricks e HackTricks Cloud.
Burlando verificações de root e depuráveis
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 App Android Depurável e Burlar Verificações
Tornando o App Depurável
Conteúdo baseado em https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0
- 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 alinhe o aplicativo modificado com zipalign.
- Instalar o Aplicativo Modificado:
- Use o comando:
adb install <nome_do_aplicativo>
.
- Recuperar o Nome do Pacote:
- Execute
adb shell pm list packages –3
para listar aplicativos de terceiros e encontrar o nome do pacote.
- Configurar o App para Aguardar Conexão do Depurador:
- Comando:
adb shell am setup-debug-app –w <nome_do_pacote>
. - Nota: Este comando deve ser executado cada vez antes de iniciar o aplicativo para garantir que ele aguarde pelo 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>
.
- Preparar para Depuração no Android Studio:
- Navegue no Android Studio até Arquivo -> Abrir Perfil ou APK.
- Abra o APK recompilado.
- Definir Pontos de Interrupção em Arquivos Java Importantes:
- Coloque pontos de interrupção em
MainActivity.java
(especificamente no métodoonCreate
),b.java
eContextWrapper.java
.
Burlando Verificações
O aplicativo, em certos pontos, verificará se é depurável e também procurará por binários indicando um dispositivo com root. O depurador pode ser usado para modificar informações do app, desmarcar o bit depurável e alterar os nomes dos binários pesquisados para burlar essas verificações.
Para a verificação depurável:
- Modificar 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.
Figura: Captura de tela ilustrando a visão do depurador e a modificação das configurações de flag.
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 alterar um valor de flag para 814267972, que é representado em binário como 110000101101000000100010100.
Explorando uma Vulnerabilidade
Uma demonstração foi fornecida usando um aplicativo vulnerável contendo um botão e um textview. Inicialmente, o aplicativo 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 Vulnerabilidade
- O aplicativo foi descompilado usando
apktool
para acessar o arquivoAndroidManifest.xml
. - A presença de
android_debuggable="true"
no AndroidManifest.xml indica que o aplicativo é depurável e suscetível a exploração. - Vale ressaltar que
apktool
é usado apenas para verificar o status depurável sem alterar nenhum código.
Preparando o Ambiente
- O processo envolveu iniciar um emulador, instalar o aplicativo vulnerável e usar
adb jdwp
para identificar portas 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 alvo.
Injetando Código em Tempo de Execução
- A exploração foi realizada definindo pontos de interrupção e controlando o fluxo do aplicativo.
- Comandos como
classes
emethods <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
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 do aplicativo em tempo real.
Este exemplo demonstrou como o comportamento de um aplicativo depurável pode ser manipulado, destacando o potencial para explorações mais complexas, 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://resources.infosecinstitute.com/android-hacking-security-part-6-exploiting-debuggable-android-applications
Aprenda hacking no AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!
Outras formas de apoiar o HackTricks:
- Se você quer ver sua empresa anunciada no HackTricks ou baixar o HackTricks em PDF, confira os PLANOS DE ASSINATURA!
- Adquira o material oficial PEASS & HackTricks
- Descubra A Família PEASS, nossa coleção de NFTs exclusivos
- Junte-se ao grupo 💬 Discord ou ao grupo do telegram ou siga-me no Twitter 🐦 @carlospolopm.
- Compartilhe suas técnicas de hacking enviando PRs para os repositórios github do HackTricks e HackTricks Cloud.