hacktricks/mobile-pentesting/android-app-pentesting/exploiting-a-debuggeable-applciation.md
2024-02-11 01:46:25 +00:00

88 lines
6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Wykorzystywanie debugowalnej aplikacji
<details>
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
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.
</details>
# **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 <nazwa_aplikacji>`.
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 <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>`.
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 <nazwa_klasy>`, 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