# 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 [] file upload [] ``` #### Uvezi frida skript ```bash import ``` #### 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 ``` ![](<../../../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 #Dump all memory memory dump from_base #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 "" (--string) (--offsets-only) memory write "
" "" (--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}}