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

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

Informacje o Frida

frida

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

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

Wyszukiwanie klas

Zacznijmy szukać klas w naszej aplikacji.

android hooking search classes asvid.github.io.fridaapp

Wyszukiwanie metod klasy

Teraz wyodrębnijmy metody znajdujące się w klasie MainActivity:

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

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

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

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.

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:

Teraz, jeśli wpiszesz cokolwiek w pole tekstowe dla kodu PIN, zobaczysz, że wszystko jest akceptowane:

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>

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

Na dole listy widać frida:

Sprawdźmy, co eksportuje frida:

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