Tutorial do Objection
Reading time: 8 minutes
tip
Aprenda e pratique Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP:
HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporte o HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
Introdução
objection - Exploração móvel em tempo de execução
Objection é um conjunto de ferramentas de exploração móvel em tempo de execução, alimentado por Frida. Foi desenvolvido com o objetivo de ajudar a avaliar aplicações móveis e sua postura de segurança sem a necessidade de um dispositivo móvel jailbroken ou rootado.
Nota: Isto não é uma forma de bypass de jailbreak/root. Ao usar objection, você continua limitado por todas as restrições impostas pelo sandbox aplicável ao qual você está sujeito.
Resumo
O objetivo do objection é permitir que o usuário execute as principais ações que o Frida oferece. Caso contrário, o usuário precisará criar um script único para cada aplicação que desejar testar.
Tutorial
Para este tutorial vou usar o APK que você pode baixar aqui:
Ou do seu original repository (download app-release.apk)
Instalação
pip3 install objection
Connection
Faça uma conexão ADB regular e inicie o servidor frida no dispositivo (e verifique que frida está funcionando tanto no cliente quanto no servidor).
Se você está usando um rooted device, é necessário selecionar a aplicação que deseja testar dentro da opção --gadget. Neste caso:
frida-ps -Uai
objection --gadget asvid.github.io.fridaapp explore
Ações Básicas
Nem todos os possíveis comandos do objections serão listados neste tutorial, apenas aqueles que eu achei mais úteis.
Ambiente
Algumas informações interessantes (como passwords ou paths) podem ser encontradas dentro do ambiente.
env
.png)
Informações sobre Frida
frida
.png)
Enviar/Baixar
file download <remote path> [<local path>]
file upload <local path> [<remote path>]
Importar frida script
import <local path frida-script>
SSLPinning
android sslpinning disable #Attempts to disable SSL Pinning on Android devices.
Detecção de root
android root disable #Attempts to disable root detection on Android devices.
android root simulate #Attempts to simulate a rooted Android environment.
Exec Command
android shell_exec whoami
Capturas de tela
android ui screenshot /tmp/screenshot
android ui FLAG_SECURE false #This may enable you to take screenshots using the hardware keys
Static analysis tornada dinâmica
Em uma aplicação real deveríamos conhecer todas as informações descobertas nesta parte antes de usar o objection graças a static analysis. De qualquer forma, desta maneira talvez você veja algo novo, já que aqui você terá apenas uma lista completa de classes, métodos e objetos exportados.
Isto também é útil se, de alguma forma, você estiver incapaz de obter algum código-fonte legível do app.
Listar activities, receivers e services
android hooking list activities
.png)
android hooking list services
android hooking list receivers
Frida gerará um erro se nenhuma for encontrada
Obtendo a activity atual
android hooking get current_activity
.png)
Procurar Classes
Vamos começar a procurar por classes dentro da nossa aplicação
android hooking search classes asvid.github.io.fridaapp
.png)
Buscar métodos de uma classe
Agora vamos extrair os métodos dentro da classe MainActivity:
android hooking search methods asvid.github.io.fridaapp MainActivity
.png)
Listar métodos declarados de uma classe com seus parâmetros
Vamos descobrir quais parâmetros os métodos da classe precisam:
android hooking list class_methods asvid.github.io.fridaapp.MainActivity
.png)
Listar classes
Você também pode listar todas as classes que foram carregadas na aplicação atual:
android hooking list classes #List all loaded classes, As the target application gets usedmore, this command will return more classes.
Isto é muito útil se você quiser fazer hook no método de uma classe e só souber o nome da classe. Você pode usar esta função para buscar qual módulo possui a classe e então fazer hook no seu método.
Hooking sendo fácil
Hooking (observando) um método
From the source code of the application we know that the function sum() from MainActivity is being run every second. Vamos tentar fazer dump de todas as informações possíveis cada vez que a função é chamada (argumentos, valor de retorno e backtrace):
android hooking watch class_method asvid.github.io.fridaapp.MainActivity.sum --dump-args --dump-backtrace --dump-return
.png)
Hooking (observando) uma classe inteira
Na verdade, acho todos os métodos da classe MainActivity realmente interessantes, vamos hook them all. Tenha cuidado, isso pode crash um aplicativo.
android hooking watch class asvid.github.io.fridaapp.MainActivity --dump-args --dump-return
If you play with the application while the class is hooked you will see when each function is being called, its arguments and the return value.
.png)
Alterando o valor de retorno booleano de uma função
Pelo código-fonte você pode ver que a função checkPin recebe um String como argumento e retorna um boolean. Vamos fazer com que a função sempre retorne true:
.png)
Agora, se você escrever qualquer coisa no campo de texto do PIN você verá que qualquer coisa é válida:
.png)
Instâncias de classe
Procure e imprima instâncias ativas de uma classe Java específica, especificada por um nome de classe totalmente qualificado. A saída é o resultado de uma tentativa de obter um valor string para uma objection descoberta, que tipicamente conteria valores de propriedades do objeto.
android heap print_instances <class>
.png)
Keystore/Intents
Você pode manipular o keystore e intents usando:
android keystore list
android intents launch_activity
android intent launch_service
Memória
Dump
memory dump all <local destination> #Dump all memory
memory dump from_base <base_address> <size_to_dump> <local_destination> #Dump a part
Lista
memory list modules
.png)
Na parte inferior da lista você pode ver frida:
.png)
Vamos verificar o que frida está exportando:
.png)
Pesquisar/Escrever
Você também pode buscar e escrever na memória com objection:
memory search "<pattern eg: 41 41 41 ?? 41>" (--string) (--offsets-only)
memory write "<address>" "<pattern eg: 41 41 41 41>" (--string)
SQLite
Você também pode usar o comando sqlite para interagir com bancos de dados sqlite.
Sair
exit
O que sinto falta no Objection
- Os métodos de hooking às vezes travam a aplicação (isso também acontece por causa do Frida).
- Você não pode usar as instâncias das classes para chamar funções da instância. E você não pode criar novas instâncias de classes e usá-las para chamar funções.
- Não existe um atalho (como o do sslpinnin) para hook all the common crypto methods being used by the application to see cyphered text, plain text, keys, IVs and algorithms used.
Referências
tip
Aprenda e pratique Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP:
HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Supporte o HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
HackTricks