hacktricks/mobile-pentesting/android-app-pentesting/frida-tutorial/objection-tutorial.md

264 lines
11 KiB
Markdown

# Objection Tutorial
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}
<img src="../../../.gitbook/assets/i3.png" alt="" data-size="original">
**Dica de bug bounty**: **inscreva-se** no **Intigriti**, uma **plataforma de bug bounty premium criada por hackers, para hackers**! Junte-se a nós em [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoje e comece a ganhar recompensas de até **$100,000**!
{% embed url="https://go.intigriti.com/hacktricks" %}
## **Introdução**
**objection - Exploração Móvel em Tempo de Execução**
[**Objection**](https://github.com/sensepost/objection) é um kit de ferramentas de exploração móvel em tempo de execução, alimentado por [Frida](https://www.frida.re). Foi criado com o objetivo de ajudar a avaliar aplicativos móveis e sua postura de segurança sem a necessidade de um dispositivo móvel com jailbreak ou root.
**Nota:** Isso não é uma forma de jailbreak / bypass de root. Ao usar `objection`, você ainda está limitado por todas as restrições impostas pelo sandbox aplicável que está enfrentando.
### Resumo
O **objetivo** do **objection** é permitir que o usuário chame as **principais ações que o Frida oferece**. **Caso contrário**, o usuário precisará criar um **único script para cada aplicativo** que deseja testar.
## Tutorial
Para este tutorial, vou usar o APK que você pode baixar aqui:
{% file src="../../../.gitbook/assets/app-release.zip" %}
Ou do seu [repositório original](https://github.com/asvid/FridaApp) (baixe app-release.apk)
### Instalação
```bash
pip3 install objection
```
### Conexão
Faça uma **conexão ADB regular** e **inicie** o servidor **frida** no dispositivo (e verifique se o frida está funcionando tanto no cliente quanto no servidor).
Se você estiver usando um **dispositivo com root**, é necessário selecionar o aplicativo que você deseja testar dentro da opção _**--gadget**_. neste caso:
```bash
frida-ps -Uai
objection --gadget asvid.github.io.fridaapp explore
```
### Ações Básicas
Nem todos os comandos possíveis do objection serão listados neste tutorial, apenas os que eu achei mais úteis.
#### Ambiente
Algumas informações interessantes (como senhas ou caminhos) podem ser encontradas dentro do ambiente.
```bash
env
```
![](<../../../.gitbook/assets/image (220).png>)
#### Informações sobre o Frida
```bash
frida
```
![](<../../../.gitbook/assets/image (1093).png>)
#### Upload/Download
```bash
file download <remote path> [<local path>]
file upload <local path> [<remote path>]
```
#### Importar script frida
```bash
import <local path frida-script>
```
#### SSLPinning
```bash
android sslpinning disable #Attempts to disable SSL Pinning on Android devices.
```
#### Detecção de root
```bash
android root disable #Attempts to disable root detection on Android devices.
android root simulate #Attempts to simulate a rooted Android environment.
```
#### Exec Command
```bash
android shell_exec whoami
```
#### Capturas de tela
```bash
android ui screenshot /tmp/screenshot
android ui FLAG_SECURE false #This may enable you to take screenshots using the hardware keys
```
### Análise estática feita de forma dinâmica
Em uma aplicação real, devemos conhecer todas as informações descobertas nesta parte antes de usar objection graças à **análise estática**. De qualquer forma, dessa maneira você pode ver **algo novo**, pois aqui você terá apenas uma lista completa de classes, métodos e objetos exportados.
Isso também é útil se, de alguma forma, você estiver **incapaz de obter algum código-fonte legível** do aplicativo.
#### Listar atividades, receptores e serviços
```bash
android hooking list activities
```
![](<../../../.gitbook/assets/image (1016).png>)
```bash
android hooking list services
android hooking list receivers
```
Frida lançará um erro se nenhum for encontrado
#### Obtendo a atividade atual
```bash
android hooking get current_activity
```
![](<../../../.gitbook/assets/image (813).png>)
#### Buscar Classes
Vamos começar a procurar por classes dentro do nosso aplicativo.
```bash
android hooking search classes asvid.github.io.fridaapp
```
![](<../../../.gitbook/assets/image (507).png>)
#### Métodos de busca de uma classe
Agora vamos extrair os métodos dentro da classe _MainActivity:_
```bash
android hooking search methods asvid.github.io.fridaapp MainActivity
```
![](<../../../.gitbook/assets/image (929).png>)
#### Listar métodos declarados de uma classe com seus parâmetros
Vamos descobrir quais parâmetros os métodos da classe precisam:
```bash
android hooking list class_methods asvid.github.io.fridaapp.MainActivity
```
![](<../../../.gitbook/assets/image (299).png>)
#### Listar classes
Você também pode listar todas as classes que foram carregadas dentro da aplicação atual:
```bash
android hooking list classes #List all loaded classes, As the target application gets usedmore, this command will return more classes.
```
Isso é muito útil se você quiser **hook a method de uma classe e você só souber o nome da classe**. Você poderia usar essa função para **procurar qual módulo possui a classe** e então hook seu método.
### Hooking sendo fácil
#### Hooking (assistindo) um método
Do [código-fonte](https://github.com/asvid/FridaApp/blob/master/app/src/main/java/asvid/github/io/fridaapp/MainActivity.kt) da aplicação, sabemos que a **função** _**sum()**_ **da** _**MainActivity**_ está sendo executada **a cada segundo**. Vamos tentar **dump todas as informações possíveis** cada vez que a função é chamada (argumentos, valor de retorno e backtrace):
```bash
android hooking watch class_method asvid.github.io.fridaapp.MainActivity.sum --dump-args --dump-backtrace --dump-return
```
![](<../../../.gitbook/assets/image (1086).png>)
#### Hooking (assistindo) uma classe inteira
Na verdade, acho todos os métodos da classe MainActivity realmente interessantes, vamos **hook them all**. Cuidado, isso pode **crash** uma aplicação.
```bash
android hooking watch class asvid.github.io.fridaapp.MainActivity --dump-args --dump-return
```
Se você brincar com o aplicativo enquanto a classe está conectada, você verá quando **cada função está sendo chamada**, seus **argumentos** e o **valor de retorno**.
![](<../../../.gitbook/assets/image (861).png>)
#### Mudando o valor de retorno booleano de uma função
Do código-fonte, você pode ver que a função _checkPin_ recebe um _String_ como argumento e retorna um _boolean_. Vamos fazer a função **sempre retornar true**:
![](<../../../.gitbook/assets/image (883).png>)
Agora, se você escrever qualquer coisa na caixa de texto para o código PIN, você verá que qualquer coisa é válida:
![](<../../../.gitbook/assets/image (228).png>)
### Instâncias de classe
Pesquise 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 de string para uma objeção descoberta, que normalmente **contém valores de propriedade para o objeto**.
```
android heap print_instances <class>
```
![](<../../../.gitbook/assets/image (1095).png>)
### Keystore/Intents
Você pode brincar com o keystore e intents usando:
```bash
android keystore list
android intents launch_activity
android intent launch_service
```
### Memória
#### Dump
```bash
memory dump all <local destination> #Dump all memory
memory dump from_base <base_address> <size_to_dump> <local_destination> #Dump a part
```
#### Lista
```bash
memory list modules
```
![](<../../../.gitbook/assets/image (286).png>)
Na parte inferior da lista, você pode ver frida:
![](<../../../.gitbook/assets/image (1097).png>)
Vamos verificar o que frida está exportando:
![](<../../../.gitbook/assets/image (298).png>)
#### Buscar/Escrever
Você também pode buscar e escrever na memória com objection:
```bash
memory search "<pattern eg: 41 41 41 ?? 41>" (--string) (--offsets-only)
memory write "<address>" "<pattern eg: 41 41 41 41>" (--string)
```
### SQLite
Você pode usar o comando `sqlite` para interagir com bancos de dados sqlite.
### Exit
```bash
exit
```
## O que eu sinto falta no Objection
* Os métodos de hooking às vezes fazem o aplicativo travar (isso também é 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 há um atalho (como o de sslpinnin) para hookear todos os métodos comuns de criptografia usados pelo aplicativo para ver texto cifrado, texto simples, chaves, IVs e algoritmos usados.
<img src="../../../.gitbook/assets/i3.png" alt="" data-size="original">
**Dica de bug bounty**: **inscreva-se** no **Intigriti**, uma plataforma premium de **bug bounty criada por hackers, para hackers**! Junte-se a nós em [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoje e comece a ganhar recompensas de até **$100,000**!
{% embed url="https://go.intigriti.com/hacktricks" %}
{% hint style="success" %}
Aprenda e pratique Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprenda e pratique Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)!
* **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga**-nos no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe truques de hacking enviando PRs para os repositórios do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
{% endhint %}