Objection Tutorial

Support HackTricks

Bug bounty tip: zarejestruj się w Intigriti, premium platformie bug bounty stworzonej przez hackerów, dla hackerów! Dołącz do nas na https://go.intigriti.com/hacktricks już dziś i zacznij zarabiać nagrody do 100 000 USD!

Wprowadzenie

objection - Runtime Mobile Exploration

Objection to zestaw narzędzi do eksploracji mobilnej w czasie rzeczywistym, zasilany przez 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 jailbreaku / obejścia roota. Używając objection, nadal jesteś ograniczony przez wszystkie restrykcje nałożone przez odpowiedni sandbox, z którym się mierzysz.

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ę APK, które możesz pobrać tutaj:

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

Instalacja

pip3 install objection

Connection

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:

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.

env

Informacje o Frida

frida

Przesyłanie/Pobieranie

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

Importuj skrypt frida

import <local path frida-script>

SSLPinning

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

Wykrywanie roota

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

Wykonaj polecenie

android shell_exec whoami

Zrzuty ekranu

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

Analiza statyczna stała 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 mieć 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

android hooking list activities
android hooking list services
android hooking list receivers

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

Uzyskiwanie bieżącej aktywności

android hooking get current_activity

Szukaj klas

Zacznijmy szukać klas w naszej aplikacji

android hooking search classes asvid.github.io.fridaapp

Metody wyszukiwania klasy

Teraz wyodrębnijmy metody wewnątrz klasy MainActivity:

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

Lista zadeklarowanych metod klasy z ich parametrami

Zobaczmy, jakie parametry są potrzebne metodom klasy:

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:

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

To jest 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):

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

Hooking (obserwowanie) całej klasy

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.

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

Jeśli bawisz się aplikacją, gdy klasa jest podłączona, zobaczysz, kiedy każda funkcja jest wywoływana, jej argumenty i wartość zwracana.

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 obiekcji, 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:

android keystore list
android intents launch_activity
android intent launch_service

Pamięć

Zrzut

memory dump all <local destination> #Dump all memory
memory dump from_base <base_address> <size_to_dump> <local_destination> #Dump a part

Lista

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:

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

exit

Czego brakuje mi 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 dotyczący bug bounty: zarejestruj się w Intigriti, premium platformie bug bounty stworzonej przez hackerów, dla hackerów! Dołącz do nas na https://go.intigriti.com/hacktricks już dziś i zacznij zarabiać nagrody do 100 000 USD!

Wsparcie dla HackTricks

Last updated