mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
229 lines
7.6 KiB
Markdown
229 lines
7.6 KiB
Markdown
# Objection Tutorial
|
|
|
|
{{#include ../../../banners/hacktricks-training.md}}
|
|
|
|
## **Uvod**
|
|
|
|
**objection - Runtime Mobile Exploration**
|
|
|
|
[**Objection**](https://github.com/sensepost/objection) je alat za istraživanje mobilnih aplikacija u realnom vremenu, pokretan od strane [Frida](https://www.frida.re). Napravljen je s ciljem da pomogne u proceni mobilnih aplikacija i njihove sigurnosne pozicije bez potrebe za jailbreak-ovanim ili root-ovanim mobilnim uređajem.
|
|
|
|
**Napomena:** Ovo nije neka vrsta bypass-a za jailbreak / root. Korišćenjem `objection`, i dalje ste ograničeni svim restrikcijama koje nameće odgovarajući sandbox s kojim se suočavate.
|
|
|
|
### Rezime
|
|
|
|
**Cilj** **objection** je omogućiti korisniku da pozove **glavne akcije koje nudi Frida**. **Inače**, korisnik će morati da kreira **jedan skript za svaku aplikaciju** koju želi da testira.
|
|
|
|
## Tutorijal
|
|
|
|
Za ovaj tutorijal ću koristiti APK koji možete preuzeti ovde:
|
|
|
|
{{#file}}
|
|
app-release.zip
|
|
{{#endfile}}
|
|
|
|
Ili iz njegovog [originalnog repozitorijuma](https://github.com/asvid/FridaApp)(preuzmite app-release.apk)
|
|
|
|
### Instalacija
|
|
```bash
|
|
pip3 install objection
|
|
```
|
|
### Veza
|
|
|
|
Napravite **redovnu ADB vezu** i **pokrenite** **frida** server na uređaju (i proverite da li frida radi i na klijentu i na serveru).
|
|
|
|
Ako koristite **rootovani uređaj**, potrebno je odabrati aplikaciju koju želite da testirate unutar _**--gadget**_ opcije. u ovom slučaju:
|
|
```bash
|
|
frida-ps -Uai
|
|
objection --gadget asvid.github.io.fridaapp explore
|
|
```
|
|
### Osnovne Akcije
|
|
|
|
Nisu svi mogući komandi objekcija navedeni u ovom tutorijalu, samo oni koje sam smatrao korisnijim.
|
|
|
|
#### Okruženje
|
|
|
|
Neke zanimljive informacije (kao što su lozinke ili putanje) mogu se naći unutar okruženja.
|
|
```bash
|
|
env
|
|
```
|
|
.png>)
|
|
|
|
#### Frida Informacije
|
|
```bash
|
|
frida
|
|
```
|
|
.png>)
|
|
|
|
#### Učitavanje/Preuzimanje
|
|
```bash
|
|
file download <remote path> [<local path>]
|
|
file upload <local path> [<remote path>]
|
|
```
|
|
#### Uvezi frida skript
|
|
```bash
|
|
import <local path frida-script>
|
|
```
|
|
#### SSLPinning
|
|
```bash
|
|
android sslpinning disable #Attempts to disable SSL Pinning on Android devices.
|
|
```
|
|
#### Detekcija root-a
|
|
```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
|
|
```
|
|
#### Screenshots
|
|
```bash
|
|
android ui screenshot /tmp/screenshot
|
|
android ui FLAG_SECURE false #This may enable you to take screenshots using the hardware keys
|
|
```
|
|
### Staticka analiza postala dinamička
|
|
|
|
U pravoj aplikaciji trebali bismo znati sve informacije otkrivene u ovom delu pre nego što koristimo objection zahvaljujući **statickoj analizi**. U svakom slučaju, na ovaj način možda možete videti **nešto novo** jer ćete ovde imati samo potpunu listu klasa, metoda i eksportovanih objekata.
|
|
|
|
Ovo je takođe korisno ako nekako niste **u mogućnosti da dobijete neki čitljiv izvorni kod** aplikacije.
|
|
|
|
#### Lista aktivnosti, prijemnika i servisa
|
|
```bash
|
|
android hooking list activities
|
|
```
|
|
.png>)
|
|
```bash
|
|
android hooking list services
|
|
android hooking list receivers
|
|
```
|
|
Frida će pokrenuti grešku ako ništa nije pronađeno
|
|
|
|
#### Dobijanje trenutne aktivnosti
|
|
```bash
|
|
android hooking get current_activity
|
|
```
|
|
.png>)
|
|
|
|
#### Pretraži klase
|
|
|
|
Hajde da počnemo da tražimo klase unutar naše aplikacije
|
|
```bash
|
|
android hooking search classes asvid.github.io.fridaapp
|
|
```
|
|
.png>)
|
|
|
|
#### Metode pretrage klase
|
|
|
|
Sada hajde da izdvojimo metode unutar klase _MainActivity:_
|
|
```bash
|
|
android hooking search methods asvid.github.io.fridaapp MainActivity
|
|
```
|
|
.png>)
|
|
|
|
#### Prikazivanje deklarisanih metoda klase sa njihovim parametrima
|
|
|
|
Hajde da otkrijemo koji parametri su potrebni metodama klase:
|
|
```bash
|
|
android hooking list class_methods asvid.github.io.fridaapp.MainActivity
|
|
```
|
|
.png>)
|
|
|
|
#### Lista klasa
|
|
|
|
Takođe možete navesti sve klase koje su učitane unutar trenutne aplikacije:
|
|
```bash
|
|
android hooking list classes #List all loaded classes, As the target application gets usedmore, this command will return more classes.
|
|
```
|
|
Ovo je veoma korisno ako želite da **hook-ujete metodu klase i samo znate ime klase**. Možete koristiti ovu funkciju da **pretražite koji modul poseduje klasu** i zatim hook-ujete njenu metodu.
|
|
|
|
### Hookovanje je lako
|
|
|
|
#### Hookovanje (posmatranje) metode
|
|
|
|
Iz [izvornog koda](https://github.com/asvid/FridaApp/blob/master/app/src/main/java/asvid/github/io/fridaapp/MainActivity.kt) aplikacije znamo da se **funkcija** _**sum()**_ **iz** _**MainActivity**_ izvršava **svake sekunde**. Pokušajmo da **izvučemo sve moguće informacije** svaki put kada se funkcija pozove (argumenti, povratna vrednost i backtrace):
|
|
```bash
|
|
android hooking watch class_method asvid.github.io.fridaapp.MainActivity.sum --dump-args --dump-backtrace --dump-return
|
|
```
|
|
.png>)
|
|
|
|
#### Hooking (watching) an entire class
|
|
|
|
Zapravo, smatram da su sve metode klase MainActivity zaista zanimljive, hajde da **hook-ujemo sve**. Budite oprezni, ovo može **srušiti** aplikaciju.
|
|
```bash
|
|
android hooking watch class asvid.github.io.fridaapp.MainActivity --dump-args --dump-return
|
|
```
|
|
Ako igrate sa aplikacijom dok je klasa povezana, videćete kada se **svaka funkcija poziva**, njene **argumente** i **vraćenu** vrednost.
|
|
|
|
.png>)
|
|
|
|
#### Promena boolean vraćene vrednosti funkcije
|
|
|
|
Iz izvornog koda možete videti da funkcija _checkPin_ prima _String_ kao argument i vraća _boolean_. Hajde da funkcija **uvek vraća true**:
|
|
|
|
.png>)
|
|
|
|
Sada, ako napišete bilo šta u tekstualno polje za PIN kod, videćete da je bilo šta validno:
|
|
|
|
.png>)
|
|
|
|
### Instance klasa
|
|
|
|
Pretražite i štampajte **žive instance specifične Java klase**, navedene punim imenom klase. Rezultat je pokušaj dobijanja string vrednosti za otkrivenu objašnjenje koja bi obično **sadržala vrednosti svojstava za objekat**.
|
|
```
|
|
android heap print_instances <class>
|
|
```
|
|
.png>)
|
|
|
|
### Keystore/Intents
|
|
|
|
Možete se igrati sa keystore-om i intencijama koristeći:
|
|
```bash
|
|
android keystore list
|
|
android intents launch_activity
|
|
android intent launch_service
|
|
```
|
|
### Memorija
|
|
|
|
#### Ispis
|
|
```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
|
|
```
|
|
.png>)
|
|
|
|
Na dnu liste možete videti fridu:
|
|
|
|
.png>)
|
|
|
|
Hajde da proverimo šta frida izvozi:
|
|
|
|
.png>)
|
|
|
|
#### Pretraga/Pisanje
|
|
|
|
Takođe možete pretraživati i pisati unutar memorije sa objection:
|
|
```bash
|
|
memory search "<pattern eg: 41 41 41 ?? 41>" (--string) (--offsets-only)
|
|
memory write "<address>" "<pattern eg: 41 41 41 41>" (--string)
|
|
```
|
|
### SQLite
|
|
|
|
Možete koristiti komandu `sqlite` za interakciju sa sqlite bazama podataka.
|
|
|
|
### Exit
|
|
```bash
|
|
exit
|
|
```
|
|
## Šta mi nedostaje u Objection
|
|
|
|
- Metode hookovanja ponekad ruše aplikaciju (to je takođe zbog Frida).
|
|
- Ne možete koristiti instance klasa za pozivanje funkcija instance. I ne možete kreirati nove instance klasa i koristiti ih za pozivanje funkcija.
|
|
- Ne postoji prečica (poput one za sslpinnin) za hookovanje svih uobičajenih kripto metoda koje koristi aplikacija da biste videli šifrovani tekst, običan tekst, ključeve, IV-ove i korišćene algoritme.
|
|
|
|
{{#include ../../../banners/hacktricks-training.md}}
|