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
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegram lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów github.
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
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:
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 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
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
Wyszukiwanie 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 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 (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.
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:
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 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
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegram lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów github.