# 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**](https://github.com/sponsors/carlospolop)! * Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com) * Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family) * **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.** * **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/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**](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 1. **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ę. 2. **Zainstaluj zmodyfikowaną aplikację:** - Użyj polecenia: `adb install `. 3. **Pobierz nazwę pakietu:** - Wykonaj polecenie `adb shell pm list packages –3`, aby wyświetlić listę aplikacji innych firm i znaleźć nazwę pakietu. 4. **Ustaw aplikację w trybie oczekiwania na połączenie debugera:** - Polecenie: `adb shell am setup-debug-app –w `. - **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 `. - Aby usunąć wszystkie flagi, użyj `adb shell am clear-debug-app `. 5. **Przygotuj się do debugowania w Android Studio:** - Przejdź w Android Studio do _Plik -> Otwórz profil lub APK_. - Otwórz przebudowany plik APK. 6. **Ustaw punkty przerwania w kluczowych plikach Java:** - Umieść punkty przerwania w plikach `MainActivity.java` (szczególnie w metodzie `onCreate`), `b.java` i `ContextWrapper.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: 1. **Modyfikacja ustawień flag:** - W sekcji zmiennych konsoli debugera przejdź do: `this mLoadedAPK -> mApplicationInfo -> flags = 814267974`. - **Uwaga:** Reprzezentacja binarna `flags = 814267974` to `11000011100111011110`, co oznacza, że "Flag_debuggable" jest aktywny. ![https://miro.medium.com/v2/resize:fit:1400/1*-ckiSbWGSoc1beuxxpKbow.png](https://miro.medium.com/v2/resize:fit:1400/1*-ckiSbWGSoc1beuxxpKbow.png) 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 pliku `AndroidManifest.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` i `methods `, aby poznać strukturę aplikacji. - Ustawiono punkt przerwania w metodzie `onClick` i kontrolowano jej wykonanie. - Wykorzystano polecenia `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`, co skutkowało pomyślną zmianą wyniku aplikacji w czasie rzeczywistym. Ten przykład pokazał, jak można manipulować zachowaniem