mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-23 19:43:31 +00:00
260 lines
11 KiB
Markdown
260 lines
11 KiB
Markdown
# Tutorial do Objection
|
|
|
|
<details>
|
|
|
|
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
Outras maneiras de apoiar o HackTricks:
|
|
|
|
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
|
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
|
|
|
</details>
|
|
|
|
<img src="../../../.gitbook/assets/i3.png" alt="" data-size="original">
|
|
|
|
**Dica de recompensa por bugs**: **inscreva-se** no **Intigriti**, uma plataforma premium de **recompensa por bugs 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 pelo [Frida](https://www.frida.re). Foi construído 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 bypass de jailbreak / root. Ao usar o `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 estiver usando um **dispositivo com root**, é necessário selecionar o aplicativo que deseja testar dentro da opção _**--gadget**_. Neste caso:
|
|
```bash
|
|
frida-ps -Uai
|
|
objection --gadget asvid.github.io.fridaapp explore
|
|
```
|
|
### Ações Básicas
|
|
|
|
Não serão listados neste tutorial todos os comandos possíveis do Objection, apenas os que considero mais úteis.
|
|
|
|
#### Ambiente
|
|
|
|
Algumas informações interessantes (como senhas ou caminhos) podem ser encontradas dentro do ambiente.
|
|
```bash
|
|
env
|
|
```
|
|
#### Informações sobre o Frida
|
|
```bash
|
|
frida
|
|
```
|
|
![](<../../../.gitbook/assets/image (65).png>)
|
|
|
|
#### Carregar/Baixar
|
|
```bash
|
|
file download <remote path> [<local path>]
|
|
file upload <local path> [<remote path>]
|
|
```
|
|
#### Importar script do 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.
|
|
```
|
|
#### Comando Exec
|
|
```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 tornada dinâmica
|
|
|
|
Numa aplicação real, devemos conhecer todas as informações descobertas nesta parte antes de usar o objection graças à **análise estática**. De qualquer forma, talvez você possa ver **algo novo** aqui, pois terá apenas uma lista completa de classes, métodos e objetos exportados.
|
|
|
|
Isso também é útil se, de alguma forma, você **não conseguir obter algum código-fonte legível** do aplicativo.
|
|
|
|
#### Listar atividades, receptores e serviços
|
|
```bash
|
|
android hooking list activities
|
|
```
|
|
![](<../../../.gitbook/assets/image (78).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 (73) (1).png>)
|
|
|
|
#### Procurar Classes
|
|
|
|
Vamos começar a procurar classes dentro de nossa aplicação
|
|
```bash
|
|
android hooking search classes asvid.github.io.fridaapp
|
|
```
|
|
![](<../../../.gitbook/assets/image (69).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 (70) (1).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 (79).png>)
|
|
|
|
#### Listar classes
|
|
|
|
Também é possível listar todas as classes que foram carregadas dentro do aplicativo atual:
|
|
```bash
|
|
android hooking list classes #List all loaded classes, As the target application gets usedmore, this command will return more classes.
|
|
```
|
|
Este é muito útil se você quiser **interceptar o método de uma classe e só souber o nome da classe**. Você pode usar esta função para **procurar qual módulo possui a classe** e então interceptar seu método.
|
|
|
|
### Facilitando a intercepção
|
|
|
|
#### Interceptar (observar) um método
|
|
|
|
A partir do [código-fonte](https://github.com/asvid/FridaApp/blob/master/app/src/main/java/asvid/github/io/fridaapp/MainActivity.kt) do aplicativo, sabemos que a **função** _**sum()**_ **de** _**MainActivity**_ está sendo executada **a cada segundo**. Vamos tentar **dumpar 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 (71).png>)
|
|
|
|
#### Hooking (observando) uma classe inteira
|
|
|
|
Na verdade, acho todos os métodos da classe MainActivity muito interessantes, vamos **observá-los todos**. Tenha cuidado, isso poderia **causar uma falha** na aplicação.
|
|
```bash
|
|
android hooking watch class asvid.github.io.fridaapp.MainActivity --dump-args --dump-return
|
|
```
|
|
Se você interagir com o aplicativo enquanto a classe estiver conectada, você verá quando **cada função é chamada**, seus **argumentos** e o **valor de retorno**.
|
|
|
|
![](<../../../.gitbook/assets/image (72).png>)
|
|
|
|
#### Alterando o valor de retorno booleano de uma função
|
|
|
|
A partir do código-fonte, você pode ver que a função _checkPin_ recebe uma _String_ como argumento e retorna um _boolean_. Vamos fazer a função **sempre retornar true**:
|
|
|
|
![](<../../../.gitbook/assets/image (74).png>)
|
|
|
|
Agora, se você digitar qualquer coisa na caixa de texto para o código PIN, verá que qualquer coisa é válida:
|
|
|
|
![](<../../../.gitbook/assets/image (77).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. O resultado é 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 (80).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
|
|
|
|
#### Despejo
|
|
```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 (66).png>)
|
|
|
|
Na parte inferior da lista, você pode ver o frida:
|
|
|
|
![](<../../../.gitbook/assets/image (67).png>)
|
|
|
|
Vamos verificar o que o frida está exportando:
|
|
|
|
![](<../../../.gitbook/assets/image (68).png>)
|
|
|
|
#### Pesquisa/Gravação
|
|
|
|
Você também pode pesquisar e escrever na memória com o 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 sinto falta no Objection
|
|
|
|
* Os métodos de hooking às vezes travam o aplicativo (isso também é devido ao 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 hook em todos os métodos de criptografia comuns 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 recompensa por bug**: **Inscreva-se** no **Intigriti**, uma plataforma premium de **recompensas por bugs 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" %}
|
|
|
|
<details>
|
|
|
|
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
Outras maneiras de apoiar o HackTricks:
|
|
|
|
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
|
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
* **Compartilhe seus 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>
|