Objection Tutorial

Nauka hakowania 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 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 aż do 100 000 USD!

Wprowadzenie

objection - Badanie aplikacji mobilnych w czasie rzeczywistym

Objection to zestaw narzędzi do badania aplikacji mobilnych w czasie rzeczywistym, zasilany przez Frida. Został zbudowany 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ę używał pliku APK, który możesz pobrać tutaj:

Lub ze źródłowego 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

Niektóre interesujące informacje (takie jak hasła czy ścieżki) mogą być znalezione wewnątrz środowiska.

env

Informacje o Fridzie

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

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

Jest to również przydatne, jeśli w jakiś sposób jesteś niezdolny do uzyskania 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 żadna nie zostanie znaleziona

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

Wyświetlanie 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

Przypięcie (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

W rzeczywistości uważam, że wszystkie metody klasy MainActivity są naprawdę interesujące, pozwólmy podpiąć się pod nie 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ę z aplikacją podczas gdy klasa jest podpięta, 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 frida eksportuje:

Wyszukiwanie/Zapisywanie

Możesz także wyszukiwać i zapisywać 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 interakcjonować się z bazami danych SQLite.

Exit

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ę w celu zobaczenia zaszyfrowanego tekstu, tekstu jawnego, kluczy, IV i używanych algorytmów.

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 USD!

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

Inne sposoby wsparcia HackTricks:

Last updated