Objection Tutorial

Reading time: 7 minutes

tip

Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Wsparcie HackTricks

Wprowadzenie

objection - Eksploracja mobilna w czasie rzeczywistym

Objection to zestaw narzędzi do eksploracji mobilnej w czasie rzeczywistym, oparty na Frida. Został stworzony w celu pomocy w ocenie aplikacji mobilnych i ich bezpieczeństwa bez potrzeby posiadania urządzenia mobilnego z jailbreakiem lub roota.

Uwaga: To nie jest forma obejścia jailbreaka / roota. Używając objection, nadal jesteś ograniczony przez wszystkie restrykcje nałożone przez odpowiedni sandbox, z którym się zmagasz.

Podsumowanie

Celem objection jest umożliwienie użytkownikowi wywoływania głównych akcji, które oferuje Frida. W przeciwnym razie, użytkownik będzie musiał stworzyć pojedynczy skrypt dla każdej aplikacji, którą chce przetestować.

Tutorial

W tym tutorialu użyję pliku APK, który możesz pobrać tutaj:

Lub z jego oryginalnego repozytorium (pobierz app-release.apk)

Instalacja

bash
pip3 install objection

Połączenie

Zrób zwykłe połączenie ADB i uruchom serwer frida na urządzeniu (i sprawdź, czy frida działa zarówno na kliencie, jak i na serwerze).

Jeśli używasz urządzenia z rootem, musisz wybrać aplikację, którą chcesz przetestować w opcji --gadget. w tym przypadku:

bash
frida-ps -Uai
objection --gadget asvid.github.io.fridaapp explore

Podstawowe działania

Nie wszystkie możliwe polecenia objections będą wymienione w tym samouczku, tylko te, które uznałem za bardziej przydatne.

Środowisko

Niektóre interesujące informacje (takie jak hasła lub ścieżki) można znaleźć w środowisku.

bash
env

Informacje o Frida

bash
frida

Przesyłanie/Pobieranie

bash
file download <remote path> [<local path>]
file upload <local path> [<remote path>]

Importuj skrypt frida

bash
import <local path frida-script>

SSLPinning

bash
android sslpinning disable #Attempts to disable SSL Pinning on Android devices.

Wykrywanie roota

bash
android root disable  #Attempts to disable root detection on Android devices.
android root simulate #Attempts to simulate a rooted Android environment.

Wykonaj polecenie

bash
android shell_exec whoami

Zrzuty ekranu

bash
android ui screenshot /tmp/screenshot
android ui FLAG_SECURE false  #This may enable you to take screenshots using the hardware keys

Analiza statyczna staje się dynamiczna

W rzeczywistej aplikacji powinniśmy znać wszystkie informacje odkryte w tej części przed użyciem objection dzięki analizie statycznej. Tak czy inaczej, w ten sposób być może zobaczysz coś nowego, ponieważ tutaj będziesz miał tylko pełną listę klas, metod i eksportowanych obiektów.

To jest również przydatne, jeśli w jakiś sposób jesteś niezdolny do uzyskania czytelnego kodu źródłowego aplikacji.

Lista aktywności, odbiorników i usług

bash
android hooking list activities

bash
android hooking list services
android hooking list receivers

Frida zgłosi błąd, jeśli żaden nie zostanie znaleziony

Uzyskiwanie bieżącej aktywności

bash
android hooking get current_activity

Wyszukiwanie klas

Zacznijmy szukać klas w naszej aplikacji

bash
android hooking search classes asvid.github.io.fridaapp

Metody wyszukiwania klasy

Teraz wyodrębnijmy metody wewnątrz klasy MainActivity:

bash
android hooking search methods asvid.github.io.fridaapp MainActivity

Lista zadeklarowanych metod klasy z ich parametrami

Zobaczmy, jakie parametry są potrzebne metodom klasy:

bash
android hooking list class_methods asvid.github.io.fridaapp.MainActivity

Lista klas

Możesz również wylistować wszystkie klasy, które zostały załadowane w bieżącej aplikacji:

bash
android hooking list classes #List all loaded classes, As the target application gets usedmore, this command will return more classes.

To bardzo przydatne, jeśli chcesz podpiąć metodę klasy i znasz tylko nazwę klasy. Możesz użyć tej funkcji, aby wyszukać, który moduł jest właścicielem klasy i następnie podpiąć jej metodę.

Łatwe podpinanie

Podpinanie (obserwowanie) metody

Z kodu źródłowego aplikacji wiemy, że funkcja sum() z MainActivity jest uruchamiana co sekundę. Spróbujmy zrzucić wszystkie możliwe informacje za każdym razem, gdy funkcja jest wywoływana (argumenty, wartość zwracana i backtrace):

bash
android hooking watch class_method asvid.github.io.fridaapp.MainActivity.sum --dump-args --dump-backtrace --dump-return

Hooking (watching) an entire class

Właściwie uważam, że wszystkie metody klasy MainActivity są naprawdę interesujące, więc podłączmy je wszystkie. Bądź ostrożny, to może spowodować awarię aplikacji.

bash
android hooking watch class asvid.github.io.fridaapp.MainActivity --dump-args --dump-return

Jeśli będziesz bawić się aplikacją, gdy klasa jest podłączona, zobaczysz, kiedy każda funkcja jest wywoływana, jej argumenty oraz wartość zwracaną.

Zmiana wartości zwracanej typu boolean funkcji

Z kodu źródłowego możesz zobaczyć, że funkcja checkPin przyjmuje String jako argument i zwraca boolean. Zmieńmy funkcję, aby zawsze zwracała true:

Teraz, jeśli wpiszesz cokolwiek w polu tekstowym dla kodu PIN, zobaczysz, że cokolwiek jest ważne:

Instancje klas

Szukaj i drukuj aktywne instancje konkretnej klasy Java, określonej przez w pełni kwalifikowaną nazwę klasy. Oto wynik próby uzyskania wartości string dla odkrytej objection, która zazwyczaj zawiera wartości właściwości dla obiektu.

android heap print_instances <class>

Keystore/Intents

Możesz bawić się keystore i intencjami używając:

bash
android keystore list
android intents launch_activity
android intent launch_service

Pamięć

Zrzut

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

Na dole listy możesz zobaczyć frida:

Sprawdźmy, co frida eksportuje:

Szukaj/Pisz

Możesz również szukać i pisać w pamięci za pomocą 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żesz użyć polecenia sqlite, aby interagować z bazami danych sqlite.

Exit

bash
exit

Czego mi brakuje w Objection

  • Metody hookujące czasami powodują awarię aplikacji (to również z powodu Frida).
  • Nie możesz używać instancji klas do wywoływania funkcji instancji. I nie możesz tworzyć nowych instancji klas i używać ich do wywoływania funkcji.
  • Nie ma skrótu (jak ten dla sslpinnin), aby hookować wszystkie powszechnie używane metody kryptograficzne w aplikacji, aby zobaczyć tekst zaszyfrowany, tekst jawny, klucze, IV i używane algorytmy.

tip

Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Wsparcie HackTricks