Poradnik Objection
Tip
Ucz się i ćwicz Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się i ćwicz Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Wsparcie dla HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.
Wprowadzenie
objection - Eksploracja mobilna w czasie wykonywania
Objection to toolkit do eksploracji aplikacji mobilnych w czasie wykonywania, oparty na Frida. Został stworzony, aby pomóc w ocenie aplikacji mobilnych i ich postawy bezpieczeństwa bez potrzeby używania urządzenia mobilnego jailbroken lub rooted.
Uwaga: To nie jest żaden sposób obejścia jailbreak / root bypass. Korzystając z objection, nadal jesteś ograniczony wszystkimi restrykcjami narzuconymi przez odpowiedni sandbox, z którym się mierzysz.
Podsumowanie
Celem objection jest umożliwienie użytkownikowi wywoływania głównych akcji oferowanych przez Frida. W przeciwnym razie, użytkownik musiałby tworzyć pojedynczy skrypt dla każdej aplikacji, którą chce testować.
Samouczek
Do tego samouczka użyję APK, które możesz pobrać tutaj:
Lub z jego oryginalnego repozytorium (pobierz app-release.apk)
Instalacja
pip3 install objection
Połączenie
Utwórz zwykłe połączenie ADB i uruchom frida serwer na urządzeniu (sprawdź, że frida działa zarówno po stronie klienta, jak i po stronie serwera).
Jeśli używasz rooted device, konieczne jest wybranie aplikacji, którą chcesz testować 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 zostaną wymienione w tym samouczku, tylko te, które uznałem za najbardziej przydatne.
Środowisko
W środowisku można znaleźć interesujące informacje (np. passwords lub paths).
env
.png)
Informacje o Frida
frida
.png)
Przesyłanie/Pobieranie
file download <remote path> [<local path>]
file upload <local path> [<remote path>]
Import skryptu 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.
Polecenie Exec
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
Statyczna analiza staje się dynamiczna
W prawdziwej aplikacji powinniśmy znać wszystkie informacje odkryte w tej części przed użyciem objection dzięki static analysis. Tak czy inaczej, w ten sposób możesz zobaczyć coś nowego, ponieważ tutaj będziesz miał jedynie kompletną listę klas, metod i wyeksportowanych obiektów.
Jest to również przydatne, jeśli w jakiś sposób nie możesz uzyskać czytelnego kodu źródłowego aplikacji.
Lista aktywności, odbiorników i usług
android hooking list activities
.png)
android hooking list services
android hooking list receivers
Frida zgłosi błąd, jeśli nie zostanie znaleziona żadna Activity
Pobieranie bieżącej Activity
android hooking get current_activity
.png)
Wyszukiwanie klas
Zacznijmy szukać klas w naszej aplikacji.
android hooking search classes asvid.github.io.fridaapp
.png)
Wyszukiwanie metod klasy
Teraz wyodrębnijmy metody znajdujące się w klasie MainActivity:
android hooking search methods asvid.github.io.fridaapp MainActivity
.png)
Wypisz zadeklarowane metody klasy wraz z ich parametrami
Ustalmy, jakich parametrów potrzebują metody tej klasy:
android hooking list class_methods asvid.github.io.fridaapp.MainActivity
.png)
Lista klas
Możesz również wypisać 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 hook the method of a class and you only know the name of the class. Możesz użyć tej funkcji, aby search which module owns the class i następnie hook its method.
Hooking — łatwe
Hooking (watching) a method
Z source code aplikacji wiemy, że function sum() from MainActivity jest uruchamiana co sekundę. Spróbujmy dump all possible information za każdym razem, gdy funkcja zostanie wywołana (arguments, return value and backtrace):
android hooking watch class_method asvid.github.io.fridaapp.MainActivity.sum --dump-args --dump-backtrace --dump-return
.png)
Hooking (obserwowanie) całej klasy
Właściwie uważam, że wszystkie metody klasy MainActivity są naprawdę interesujące, więc hook them all. Uważaj, to może zawiesić aplikację.
android hooking watch class asvid.github.io.fridaapp.MainActivity --dump-args --dump-return
Jeśli będziesz bawić się aplikacją, gdy klasa jest hooked, zobaczysz, kiedy each function is being called, jakie są jej arguments oraz wartość return.
.png)
Zmiana wartości zwracanej typu boolean funkcji
Na podstawie kodu źródłowego widać, że funkcja checkPin otrzymuje String jako argument i zwraca boolean. Zróbmy, aby funkcja zawsze zwracała true:
.png)
Teraz, jeśli wpiszesz cokolwiek w pole tekstowe dla kodu PIN, zobaczysz, że wszystko jest akceptowane:
.png)
Instancje klas
Wyszukaj i wypisz live instances of a specific Java class, określone przez fully qualified class name. Out to wynik próby uzyskania wartości string dla wykrytego objection, która zazwyczaj contain property values for the object.
android heap print_instances <class>
.png)
Keystore/Intenty
Możesz manipulować keystore i intentami za pomocą:
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
.png)
Na dole listy widać frida:
.png)
Sprawdźmy, co eksportuje frida:
.png)
Wyszukiwanie/Zapisywanie
Możesz także przeszukiwać i zapisywać pamięć 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 uzyskać dostęp do baz danych sqlite.
Wyjście
exit
Czego brakuje mi w Objection
- Metody hooking czasami powodują awarię aplikacji (to także z powodu Frida).
- Nie można używać instancji klas do wywoływania metod instancji. Nie można też tworzyć nowych instancji klas i używać ich do wywoływania metod.
- Brakuje skrótu (takiego jak ten dla sslpinnin), aby hookować wszystkie powszechne metody crypto używane przez aplikację, aby zobaczyć zaszyfrowany tekst, tekst jawny, klucze, IV i używane algorytmy.
Referencje
Tip
Ucz się i ćwicz Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się i ćwicz Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Wsparcie dla HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.
HackTricks

