mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-24 20:13:37 +00:00
88 lines
6 KiB
Markdown
88 lines
6 KiB
Markdown
# 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
|