Exploiting a debuggeable application
Last updated
Last updated
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)
Ta sekcja posta jest podsumowaniem z posta https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0
Treść oparta na https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0
Dezkompilacja APK:
Wykorzystaj narzędzie APK-GUI do dezkompilacji APK.
W pliku android-manifest wstaw android:debuggable=true
, aby włączyć tryb debugowania.
Ponownie skompiluj, podpisz i zipalignuj zmodyfikowaną aplikację.
Zainstaluj zmodyfikowaną aplikację:
Użyj polecenia: adb install <application_name>
.
Pobierz nazwę pakietu:
Wykonaj adb shell pm list packages –3
, aby wylistować aplikacje firm trzecich i znaleźć nazwę pakietu.
Ustaw aplikację na oczekiwanie na połączenie debugera:
Polecenie: adb shell am setup-debug-app –w <package_name>
.
Uwaga: To polecenie musi być uruchamiane za każdym razem przed uruchomieniem aplikacji, aby upewnić się, że czeka na debuger.
Aby uzyskać trwałość, użyj adb shell am setup-debug-app –w -–persistent <package_name>
.
Aby usunąć wszystkie flagi, użyj adb shell am clear-debug-app <package_name>
.
Przygotuj się do debugowania w Android Studio:
Przejdź w Android Studio do File -> Open Profile or APK.
Otwórz ponownie skompilowane APK.
Ustaw punkty przerwania w kluczowych plikach Java:
Umieść punkty przerwania w MainActivity.java
(szczególnie w metodzie onCreate
), b.java
i ContextWrapper.java
.
Aplikacja w pewnych momentach będzie weryfikować, czy jest debugowalna, a także sprawdzi, czy istnieją binaria wskazujące na zrootowane urządzenie. Debugger może być użyty do modyfikacji informacji o aplikacji, usunięcia bitu debugowalności i zmiany nazw wyszukiwanych binariów, aby ominąć te kontrole.
Dla kontroli debugowalności:
Modyfikacja ustawień flag:
W sekcji zmiennych konsoli debuggera przejdź do: this mLoadedAPK -> mApplicationInfo -> flags = 814267974
.
Uwaga: Reprezentacja binarna flags = 814267974
to 11000011100111011110
, co wskazuje, że "Flag_debuggable" jest aktywna.
Te kroki zbiorczo zapewniają, że aplikacja może być debugowana i że pewne kontrole bezpieczeństwa mogą być omijane przy użyciu debuggera, co ułatwia bardziej szczegółową analizę lub modyfikację zachowania aplikacji.
Krok 2 polega na zmianie wartości flagi na 814267972, która jest reprezentowana w postaci binarnej jako 110000101101000000100010100.
Demonstrowano to przy użyciu podatnej aplikacji zawierającej przycisk i textview. Początkowo aplikacja wyświetla "Crack Me". Celem jest zmiana wiadomości z "Try Again" na "Hacked" w czasie rzeczywistym, bez modyfikacji kodu źródłowego.
Aplikacja została dezkompilowana przy użyciu apktool
, aby uzyskać dostęp do pliku AndroidManifest.xml
.
Obecność android_debuggable="true"
w AndroidManifest.xml wskazuje, że aplikacja jest debugowalna i podatna na wykorzystanie.
Warto zauważyć, że apktool
jest używane wyłącznie do sprawdzenia statusu debugowalności bez modyfikacji jakiegokolwiek kodu.
Proces obejmował uruchomienie emulatora, zainstalowanie podatnej aplikacji i użycie adb jdwp
, aby zidentyfikować porty Dalvik VM, które nasłuchują.
JDWP (Java Debug Wire Protocol) umożliwia debugowanie aplikacji działającej w VM, udostępniając unikalny port.
Przekierowanie portów było konieczne do zdalnego debugowania, a następnie dołączenia JDB do docelowej aplikacji.
Wykorzystanie luki odbyło się poprzez ustawienie punktów przerwania i kontrolowanie przepływu aplikacji.
Użyto poleceń takich jak classes
i methods <class_name>
, aby odkryć strukturę aplikacji.
Ustawiono punkt przerwania w metodzie onClick
, a jego wykonanie było kontrolowane.
Użyto poleceń locals
, next
i set
, aby sprawdzić i zmodyfikować zmienne lokalne, szczególnie zmieniając wiadomość "Try Again" na "Hacked".
Zmodyfikowany kod został wykonany przy użyciu polecenia run
, skutecznie zmieniając wynik aplikacji w czasie rzeczywistym.
Ten przykład demonstruje, jak można manipulować zachowaniem debugowalnej aplikacji, podkreślając potencjał bardziej złożonych exploitów, takich jak uzyskanie dostępu do powłoki na urządzeniu w kontekście aplikacji.
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)