hacktricks/mobile-pentesting/android-app-pentesting/frida-tutorial/objection-tutorial.md

11 KiB

Samouczek Objection

Dowiedz się, jak hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Wskazówka dotycząca nagrody za błąd: Zarejestruj się na platformie Intigriti, premium platformie nagród za błędy stworzonej przez hakerów, dla hakerów! Dołącz do nas na https://go.intigriti.com/hacktricks już dziś i zacznij zarabiać nagrody aż do 100 000 USD!

{% embed url="https://go.intigriti.com/hacktricks" %}

Wprowadzenie

Objection - Badanie uruchomieniowe aplikacji mobilnych

Objection to narzędzie do badania uruchomieniowego aplikacji mobilnych, zasilane przez Frida. Zostało zbudowane w celu pomocy w ocenie aplikacji mobilnych i ich stanu bezpieczeństwa bez konieczności posiadania zrootowanego urządzenia mobilnego.

Uwaga: To nie jest forma ominięcia jailbreaka / roota. Korzystając z objection, nadal jesteś ograniczony przez wszystkie restrykcje narzucone przez odpowiedni sandbox, z którym się zmagasz.

Podsumowanie

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

Samouczek

W tym samouczku będę korzystał z pliku APK, który możesz pobrać tutaj:

{% file src="../../../.gitbook/assets/app-release.zip" %}

Lub ze oryginalnego repozytorium (pobierz app-release.apk)

Instalacja

pip3 install objection

Połączenie

Nawiąż zwykłe połączenie ADB i uruchom serwer frida na urządzeniu (i sprawdź, czy frida działa zarówno po stronie klienta, jak i serwera).

Jeśli korzystasz z zrootowanego urządzenia, konieczne jest wybranie aplikacji, którą chcesz przetestować w opcji --gadget. W tym przypadku:

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

Podstawowe czynności

Nie wszystkie możliwe polecenia objections zostaną wymienione w tym samouczku, tylko te, które uważam za bardziej przydatne.

Środowisko

W środowisku można znaleźć pewne interesujące informacje (takie jak hasła czy ścieżki).

env

Informacje o Fridzie

frida

Przesyłanie/Pobieranie

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

Importowanie skryptu frida

import <local path frida-script>

SSLPinning

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 sprzeciwu dzięki analizie statycznej. W każdym razie w ten sposób możesz zobaczyć coś nowego, ponieważ tutaj będziesz mieć tylko kompletną listę klas, metod i obiektów eksportowanych.

Jest to również przydatne, jeśli w jakiś sposób nie możesz uzyskać czytelnego kodu źródłowego aplikacji.

Wyświetl listę aktywności, odbiorników i usług

android hooking list activities

android hooking list services
android hooking list receivers

Frida wywoła błąd, jeśli żaden nie zostanie znaleziony

Pobieranie 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 wraz z ich parametrami

Sprawdźmy, jakie parametry są wymagane przez metody klasy:

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

Wyświetlanie listy klas

Możesz również wyświetlić wszystkie klasy 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 przypiąć metodę klasy i znasz tylko nazwę klasy. Możesz użyć tej funkcji do znalezienia modułu, który jest właścicielem klasy, a następnie przypiąć jego metodę.

Łatwe przypinanie

Przypinanie (obserwowanie) metody

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

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

Podpięcie (obserwowanie) całej klasy

Faktycznie uważam, że wszystkie metody klasy MainActivity są naprawdę interesujące, po prostu podpięmy je wszystkie. Bądź ostrożny, to może spowodować zawieszenie aplikacji.

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

Jeśli grasz w aplikację podczas podpięcia klasy, zobaczysz, kiedy każda funkcja jest wywoływana, jej argumenty i wartość zwracana.

Zmiana wartości logicznej zwracanej przez funkcję

Z kodu źródłowego widać, że funkcja checkPin otrzymuje String jako argument i zwraca boolean. Zmodyfikujmy funkcję tak, aby zawsze zwracała true:

Teraz, jeśli wpiszesz cokolwiek w polu tekstowym dla kodu PIN, zobaczysz, że wszystko jest uznawane za poprawne:

Instancje klasy

Wyszukaj i wydrukuj aktywne instancje określonej klasy Java, określonej pełną nazwą klasy. Wynik to próba uzyskania wartości łańcuchowej dla odkrytego zarzutu, który zazwyczaj zawiera wartości właściwości obiektu.

android heap print_instances <class>

Keystore/Intents

Możesz bawić się keystore i intents 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ć fridę:

Sprawdźmy, co eksportuje frida:

Szukaj/Pisz

Możesz również wyszukiwać 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 interaktywnie działać z bazami danych sqlite.

Wyjście

exit

Czego mi brakuje w Objection

  • Metody hakowania czasami powodują awarie aplikacji (to także z powodu Fridy).
  • Nie można używać instancji klas do wywoływania funkcji instancji. Nie można również tworzyć nowych instancji klas i używać ich do wywoływania funkcji.
  • Nie ma skrótu (podobnego do tego dla sslpinnin), aby hakować wszystkie wspólne metody kryptograficzne używane przez aplikację, aby zobaczyć zaszyfrowany tekst, tekst czysty, klucze, IV i używane algorytmy.

Wskazówka dotycząca nagrody za błąd: Zarejestruj się na platformie Intigriti, premium platformie do nagród za błędy stworzonej przez hakerów, dla hakerów! Dołącz do nas na https://go.intigriti.com/hacktricks już dziś i zacznij zarabiać nagrody do $100,000!

{% embed url="https://go.intigriti.com/hacktricks" %}

Dowiedz się, jak hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks: