Exploiting a debuggeable application

Wykorzystywanie aplikacji z możliwością debugowania

Wsparcie dla HackTricks

Omijanie kontroli root i debugowalności

Ta sekcja posta jest podsumowaniem z posta https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0

Kroki, aby uczynić aplikację Android debugowalną i ominąć kontrole

Uczynienie aplikacji debugowalną

Treść oparta na https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0

  1. 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ę.

  1. Zainstaluj zmodyfikowaną aplikację:

  • Użyj polecenia: adb install <application_name>.

  1. Pobierz nazwę pakietu:

  • Wykonaj adb shell pm list packages –3, aby wylistować aplikacje firm trzecich i znaleźć nazwę pakietu.

  1. 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>.

  1. Przygotuj się do debugowania w Android Studio:

  • Przejdź w Android Studio do File -> Open Profile or APK.

  • Otwórz ponownie skompilowane APK.

  1. Ustaw punkty przerwania w kluczowych plikach Java:

  • Umieść punkty przerwania w MainActivity.java (szczególnie w metodzie onCreate), b.java i ContextWrapper.java.

Omijanie kontroli

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:

  1. 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.

Wykorzystywanie luki

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.

Sprawdzanie podatności

  • 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.

Przygotowanie ustawienia

  • 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.

Wstrzykiwanie kodu w czasie rzeczywistym

  • 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.

Referencje

Wsparcie dla HackTricks

Last updated