# 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