hacktricks/mobile-pentesting/android-app-pentesting/exploiting-a-debuggeable-applciation.md

89 lines
6 KiB
Markdown
Raw Normal View History

2024-02-11 01:46:25 +00:00
# Wykorzystywanie debugowalnej aplikacji
2022-04-28 16:01:33 +00:00
<details>
2024-02-11 01:46:25 +00:00
<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>
2022-04-28 16:01:33 +00:00
2024-02-11 01:46:25 +00:00
Inne sposoby wsparcia HackTricks:
2024-01-03 10:43:38 +00:00
2024-02-11 01:46:25 +00:00
* 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>
2022-04-28 16:01:33 +00:00
2024-02-11 01:46:25 +00:00
# **Ominięcie sprawdzeń roota i debugowalności**
2022-04-28 16:01:33 +00:00
2024-02-11 01:46:25 +00:00
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)
2022-04-28 16:01:33 +00:00
2024-02-11 01:46:25 +00:00
## Kroki do zrobienia aplikacji Android debugowalnej i ominięcia sprawdzeń
2022-04-28 16:01:33 +00:00
2024-02-11 01:46:25 +00:00
### **Ustawienie aplikacji jako debugowalnej**
2022-04-28 16:01:33 +00:00
2024-02-11 01:46:25 +00:00
Zawartość oparta na https://medium.com/@shubhamsonani/hacking-with-precision-bypass-techniques-via-debugger-in-android-apps-27fd562b2cc0
2024-02-11 01:46:25 +00:00
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ę.
2024-02-11 01:46:25 +00:00
2. **Zainstaluj zmodyfikowaną aplikację:**
- Użyj polecenia: `adb install <nazwa_aplikacji>`.
2024-02-11 01:46:25 +00:00
3. **Pobierz nazwę pakietu:**
- Wykonaj polecenie `adb shell pm list packages 3`, aby wyświetlić listę aplikacji innych firm i znaleźć nazwę pakietu.
2024-02-11 01:46:25 +00:00
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>`.
2024-02-11 01:46:25 +00:00
5. **Przygotuj się do debugowania w Android Studio:**
- Przejdź w Android Studio do _Plik -> Otwórz profil lub APK_.
- Otwórz przebudowany plik APK.
2024-02-11 01:46:25 +00:00
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`.
2024-02-11 01:46:25 +00:00
### **Ominięcie sprawdzeń**
2024-02-11 01:46:25 +00:00
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ń.
2024-02-11 01:46:25 +00:00
Dla sprawdzenia debugowalności:
2024-02-11 01:46:25 +00:00
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.
2024-02-11 01:46:25 +00:00
![https://miro.medium.com/v2/resize:fit:1400/1*-ckiSbWGSoc1beuxxpKbow.png](https://miro.medium.com/v2/resize:fit:1400/1*-ckiSbWGSoc1beuxxpKbow.png)
2022-04-28 16:01:33 +00:00
2024-02-11 01:46:25 +00:00
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.
2022-04-28 16:01:33 +00:00
2024-02-11 01:46:25 +00:00
Krok 2 polega na zmianie wartości flagi na 814267972, co jest reprezentowane binarnie jako 110000101101000000100010100.
2024-02-11 01:46:25 +00:00
# **Wykorzystanie podatności**
2024-02-11 01:46:25 +00:00
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.
2024-02-11 01:46:25 +00:00
## **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.
2024-02-11 01:46:25 +00:00
## **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.
2024-02-11 01:46:25 +00:00
## **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.
2024-02-11 01:46:25 +00:00
Ten przykład pokazał, jak można manipulować zachowaniem