6 KiB
Wykorzystywanie debugowalnej aplikacji
Dowiedz się, jak hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
- Jeśli chcesz zobaczyć swoją firmę reklamowaną w HackTricks lub pobrać HackTricks w formacie PDF, sprawdź PLAN SUBSKRYPCJI!
- Zdobądź oficjalne gadżety PEASS & HackTricks
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @carlospolopm.
- Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do HackTricks i HackTricks Cloud github repos.
Ominięcie sprawdzeń roota i debugowalności
Ta sekcja pochodzi z posta https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0
Kroki do zrobienia aplikacji Android debugowalnej i ominięcia sprawdzeń
Ustawienie aplikacji jako debugowalnej
Zawartość oparta na https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0
- Dekompilacja pliku APK:
- Wykorzystaj narzędzie APK-GUI do dekompilacji pliku APK.
- W pliku android-manifest wstaw
android:debuggable=true
, aby włączyć tryb debugowania. - Przebuduj, podpisz i zipalignuj zmodyfikowaną aplikację.
- Zainstaluj zmodyfikowaną aplikację:
- Użyj polecenia:
adb install <nazwa_aplikacji>
.
- Pobierz nazwę pakietu:
- Wykonaj polecenie
adb shell pm list packages –3
, aby wyświetlić listę aplikacji innych firm i znaleźć nazwę pakietu.
- Ustaw aplikację w trybie oczekiwania na połączenie debugera:
- Polecenie:
adb shell am setup-debug-app –w <nazwa_pakietu>
. - Uwaga: To polecenie musi być uruchamiane za każdym razem przed uruchomieniem aplikacji, aby zapewnić oczekiwanie na debugger.
- Aby zachować trwałość, użyj
adb shell am setup-debug-app –w -–persistent <nazwa_pakietu>
. - Aby usunąć wszystkie flagi, użyj
adb shell am clear-debug-app <nazwa_pakietu>
.
- Przygotuj się do debugowania w Android Studio:
- Przejdź w Android Studio do Plik -> Otwórz profil lub APK.
- Otwórz przebudowany plik APK.
- Ustaw punkty przerwania w kluczowych plikach Java:
- Umieść punkty przerwania w plikach
MainActivity.java
(szczególnie w metodzieonCreate
),b.java
iContextWrapper.java
.
Ominięcie sprawdzeń
Aplikacja w określonych momentach sprawdzi, czy jest debugowalna, a także sprawdzi, czy istnieją binarne wskazujące na zrootowane urządzenie. Debugger może być używany do modyfikowania informacji o aplikacji, odznaczania bitu debugowalności i zmiany nazw wyszukiwanych binarnych w celu ominięcia tych sprawdzeń.
Dla sprawdzenia debugowalności:
- Modyfikacja ustawień flag:
- W sekcji zmiennych konsoli debugera przejdź do:
this mLoadedAPK -> mApplicationInfo -> flags = 814267974
. - Uwaga: Reprzezentacja binarna
flags = 814267974
to11000011100111011110
, co oznacza, że "Flag_debuggable" jest aktywny.
Te kroki zapewniają, że aplikacja może być debugowana i że pewne sprawdzenia bezpieczeństwa mogą być ominięte przy użyciu debugera, ułatwiając bardziej szczegółową analizę lub modyfikację zachowania aplikacji.
Krok 2 polega na zmianie wartości flagi na 814267972, co jest reprezentowane binarnie jako 110000101101000000100010100.
Wykorzystanie podatności
Przedstawiono demonstrację z wykorzystaniem podatnej aplikacji zawierającej przycisk i pole tekstowe. Początkowo aplikacja wyświetla "Crack Me". Celem jest zmiana wiadomości z "Try Again" na "Hacked" w czasie rzeczywistym, bez modyfikowania kodu źródłowego.
Sprawdzanie podatności
- Aplikacja została zdekompilowana przy użyciu
apktool
, aby uzyskać dostęp do plikuAndroidManifest.xml
. - Obecność
android_debuggable="true"
w pliku AndroidManifest.xml wskazuje, że aplikacja jest debugowalna i podatna na wykorzystanie. - Warto zauważyć, że narzędzie
apktool
jest używane wyłącznie do sprawdzenia statusu debugowalności bez zmieniania jakiegokolwiek kodu.
Przygotowanie konfiguracji
- 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 maszynie wirtualnej poprzez udostępnienie unikalnego portu.
- Przekierowanie portów było konieczne do zdalnego debugowania, a następnie dołączenie JDB do docelowej aplikacji.
Wstrzykiwanie kodu w czasie rzeczywistym
- Wykorzystano punkty przerwania i kontrolowano przebieg aplikacji.
- Używano poleceń takich jak
classes
imethods <nazwa_klasy>
, aby poznać strukturę aplikacji. - Ustawiono punkt przerwania w metodzie
onClick
i kontrolowano jej wykonanie. - Wykorzystano polecenia
locals
,next
iset
, aby sprawdzić i zmodyfikować zmienne lokalne, szczególnie zmieniając wiadomość "Try Again" na "Hacked". - Zmodyfikowany kod został wykonany przy użyciu polecenia
run
, co skutkowało pomyślną zmianą wyniku aplikacji w czasie rzeczywistym.
Ten przykład pokazał, jak można manipulować zachowaniem