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
```
![](<../../../images/image (220).png>)
#### Frida Informacije
```bash
frida
```
![](<../../../images/image (1093).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
```
![](<../../../images/image (1016).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
```
![](<../../../images/image (813).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
```
![](<../../../images/image (507).png>)
#### Metode pretrage klase
Sada hajde da izdvojimo metode unutar klase _MainActivity:_
```bash
android hooking search methods asvid.github.io.fridaapp MainActivity
```
![](<../../../images/image (929).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
```
![](<../../../images/image (299).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
```
![](<../../../images/image (1086).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.
![](<../../../images/image (861).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**:
![](<../../../images/image (883).png>)
Sada, ako napišete bilo šta u tekstualno polje za PIN kod, videćete da je bilo šta validno:
![](<../../../images/image (228).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>
```
![](<../../../images/image (1095).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
```
![](<../../../images/image (286).png>)
Na dnu liste možete videti fridu:
![](<../../../images/image (1097).png>)
Hajde da proverimo šta frida izvozi:
![](<../../../images/image (298).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}}