# iOS Podstawowe Operacje Testowe
{% hint style="success" %}
Ucz się i ćwicz Hacking AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
Ucz się i ćwicz Hacking GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Wsparcie dla HackTricks
* Sprawdź [**plany subskrypcyjne**](https://github.com/sponsors/carlospolop)!
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Podziel się sztuczkami hackingowymi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repozytoriów github.
{% endhint %}
## **Podsumowanie Identyfikacji i Dostępu do Urządzeń iOS**
### **Identyfikacja UDID Urządzenia iOS**
Aby unikalnie zidentyfikować urządzenie iOS, używa się 40-cyfrowej sekwencji znanej jako UDID. W systemie macOS Catalina lub nowszym można to znaleźć w aplikacji **Finder**, ponieważ iTunes nie jest już obecny. Urządzenie, po podłączeniu przez USB i wybraniu w Finderze, ujawnia swój UDID wśród innych informacji, gdy kliknie się na szczegóły pod jego nazwą.
Dla wersji macOS przed Catalina, iTunes ułatwia odkrycie UDID. Szczegółowe instrukcje można znaleźć [tutaj](http://www.iclarified.com/52179/how-to-find-your-iphones-udid).
Narzędzia wiersza poleceń oferują alternatywne metody uzyskiwania UDID:
* **Używając narzędzia I/O Registry Explorer `ioreg`:**
```bash
$ ioreg -p IOUSB -l | grep "USB Serial"
```
* **Używanie `ideviceinstaller` dla macOS (i Linux):**
```bash
$ brew install ideviceinstaller
$ idevice_id -l
```
* **Wykorzystanie `system_profiler`:**
```bash
$ system_profiler SPUSBDataType | sed -n -e '/iPad/,/Serial/p;/iPhone/,/Serial/p;/iPod/,/Serial/p' | grep "Serial Number:"
```
* **Używanie `instruments` do wylistowania urządzeń:**
```bash
$ instruments -s devices
```
### **Dostęp do powłoki urządzenia**
**Dostęp SSH** jest włączony poprzez zainstalowanie **pakietu OpenSSH** po jailbreaku, co umożliwia połączenia za pomocą `ssh root@`. Ważne jest, aby zmienić domyślne hasła (`alpine`) dla użytkowników `root` i `mobile`, aby zabezpieczyć urządzenie.
**SSH przez USB** staje się konieczne w przypadku braku Wi-Fi, używając `iproxy` do mapowania portów urządzenia dla połączeń SSH. Ta konfiguracja umożliwia dostęp SSH przez USB, uruchamiając:
```bash
$ iproxy 2222 22
$ ssh -p 2222 root@localhost
```
**Aplikacje powłoki na urządzeniu**, takie jak NewTerm 2, ułatwiają bezpośrednią interakcję z urządzeniem, co jest szczególnie przydatne w przypadku rozwiązywania problemów. **Powłoki Reverse SSH** mogą być również ustanawiane w celu zdalnego dostępu z komputera hosta.
### **Resetowanie Zapomnianych Haseł**
Aby zresetować zapomniane hasło do domyślnego (`alpine`), konieczna jest edycja pliku `/private/etc/master.passwd`. Polega to na zastąpieniu istniejącego hasha hashem dla `alpine` obok wpisów użytkowników `root` i `mobile`.
## **Techniki Transferu Danych**
### **Transferowanie Plików Danych Aplikacji**
**Archiwizacja i Pobieranie za pomocą SSH i SCP:** Łatwo jest zarchiwizować katalog Danych aplikacji za pomocą `tar`, a następnie przenieść go za pomocą `scp`. Poniższe polecenie archiwizuje katalog Danych do pliku .tgz, który jest następnie pobierany z urządzenia:
```bash
tar czvf /tmp/data.tgz /private/var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8EF8-8F5560EB0693
exit
scp -P 2222 root@localhost:/tmp/data.tgz .
```
### **Narzędzia interfejsu graficznego**
**Używanie iFunbox i iExplorer:** Te narzędzia GUI są przydatne do zarządzania plikami na urządzeniach iOS. Jednak od iOS 8.4 Apple ograniczyło dostęp tych narzędzi do piaskownicy aplikacji, chyba że urządzenie jest jailbreakowane.
### **Używanie Objection do zarządzania plikami**
**Interaktywna powłoka z Objection:** Uruchomienie objection zapewnia dostęp do katalogu Bundle aplikacji. Stąd można przejść do katalogu Dokumenty aplikacji i zarządzać plikami, w tym pobierać i przesyłać je na i z urządzenia iOS.
```bash
objection --gadget com.apple.mobilesafari explorer
cd /var/mobile/Containers/Data/Application/72C7AAFB-1D75-4FBA-9D83-D8B4A2D44133/Documents
file download
```
## **Uzyskiwanie i Ekstrakcja Aplikacji**
### **Pozyskiwanie Pliku IPA**
**Link do Dystrybucji Over-The-Air (OTA):** Aplikacje dystrybuowane do testów za pomocą OTA można pobrać za pomocą narzędzia do pobierania zasobów ITMS, które jest instalowane za pomocą npm i służy do zapisywania pliku IPA lokalnie.
```bash
npm install -g itms-services
itms-services -u "itms-services://?action=download-manifest&url=https://s3-ap-southeast-1.amazonaws.com/test-uat/manifest.plist" -o - > out.ipa
```
### **Ekstrakcja binarnego pliku aplikacji**
1. **Z pliku IPA:** Rozpakuj plik IPA, aby uzyskać dostęp do odszyfrowanego binarnego pliku aplikacji.
2. **Z urządzenia z jailbreakiem:** Zainstaluj aplikację i wyodrębnij odszyfrowany plik binarny z pamięci.
### **Proces odszyfrowania**
**Przegląd ręcznego odszyfrowania:** Binarne pliki aplikacji iOS są szyfrowane przez Apple za pomocą FairPlay. Aby przeprowadzić inżynierię wsteczną, należy zrzucić odszyfrowany plik binarny z pamięci. Proces odszyfrowania obejmuje sprawdzenie flagi PIE, dostosowanie flag pamięci, zidentyfikowanie zaszyfrowanej sekcji, a następnie zrzucenie i zastąpienie tej sekcji jej odszyfrowaną formą.
**Sprawdzanie i modyfikowanie flagi PIE:**
```bash
otool -Vh Original_App
python change_macho_flags.py --no-pie Original_App
otool -Vh Hello_World
```
**Identyfikacja zaszyfrowanej sekcji i zrzut pamięci:**
Określ adresy początku i końca zaszyfrowanej sekcji za pomocą `otool` i zrzutuj pamięć z urządzenia z jailbreakiem za pomocą gdb.
```bash
otool -l Original_App | grep -A 4 LC_ENCRYPTION_INFO
dump memory dump.bin 0x8000 0x10a4000
```
**Nadpisywanie Zaszyfrowanej Sekcji:**
Zastąp zaszyfrowaną sekcję w oryginalnym pliku binarnym aplikacji zdekodowanym zrzutem.
```bash
dd bs=1 seek= conv=notrunc if=dump.bin of=Original_App
```
**Finalizing Decryption:** Zmodyfikuj metadane binariów, aby wskazać na brak szyfrowania, używając narzędzi takich jak **MachOView**, ustawiając `cryptid` na 0.
### **Decryption (Automatically)**
#### **frida-ios-dump**
Narzędzie [**frida-ios-dump**](https://github.com/AloneMonkey/frida-ios-dump) jest używane do **automatycznego deszyfrowania i ekstrakcji aplikacji** z urządzeń iOS. Na początku należy skonfigurować `dump.py`, aby połączyć się z urządzeniem iOS, co można zrobić przez localhost na porcie 2222 za pomocą **iproxy** lub bezpośrednio przez adres IP urządzenia i port.
Aplikacje zainstalowane na urządzeniu można wylistować za pomocą polecenia:
```bash
$ python dump.py -l
```
Aby zrzucić konkretną aplikację, taką jak Telegram, używa się następującego polecenia:
```bash
$ python3 dump.py -u "root" -p "" ph.telegra.Telegraph
```
To polecenie inicjuje zrzut aplikacji, co skutkuje utworzeniem pliku `Telegram.ipa` w bieżącym katalogu. Proces ten jest odpowiedni dla urządzeń z jailbreakiem, ponieważ aplikacje bez podpisu lub fałszywie podpisane mogą być ponownie zainstalowane za pomocą narzędzi takich jak [**ios-deploy**](https://github.com/ios-control/ios-deploy).
#### **flexdecrypt**
Narzędzie [**flexdecrypt**](https://github.com/JohnCoates/flexdecrypt), wraz ze swoim wrapperem [**flexdump**](https://gist.github.com/defparam/71d67ee738341559c35c684d659d40ac), umożliwia ekstrakcję plików IPA z zainstalowanych aplikacji. Komendy instalacyjne dla **flexdecrypt** na urządzeniu obejmują pobranie i zainstalowanie pakietu `.deb`. **flexdump** może być używane do wylistowania i zrzutu aplikacji, jak pokazano w poniższych komendach:
```bash
apt install zip unzip
wget https://gist.githubusercontent.com/defparam/71d67ee738341559c35c684d659d40ac/raw/30c7612262f1faf7871ba8e32fbe29c0f3ef9e27/flexdump -P /usr/local/bin; chmod +x /usr/local/bin/flexdump
flexdump list
flexdump dump Twitter.app
```
#### **bagbak**
[**bagbak**](https://github.com/ChiChou/bagbak), inne narzędzie oparte na Frida, wymaga urządzenia z jailbreakiem do deszyfrowania aplikacji:
```bash
bagbak --raw Chrome
```
#### **r2flutch**
**r2flutch**, wykorzystując zarówno radare, jak i frida, służy do deszyfrowania i zrzucania aplikacji. Więcej informacji można znaleźć na jego [**stronie GitHub**](https://github.com/as0ler/r2flutch).
### **Instalacja aplikacji**
**Sideloading** odnosi się do instalacji aplikacji poza oficjalnym App Store. Proces ten jest obsługiwany przez **installd daemon** i wymaga, aby aplikacje były podpisane certyfikatem wydanym przez Apple. Urządzenia z jailbreakiem mogą to obejść za pomocą **AppSync**, co umożliwia instalację fałszywie podpisanych pakietów IPA.
#### **Narzędzia do Sideloadingu**
- **Cydia Impactor**: Narzędzie do podpisywania i instalowania plików IPA na iOS oraz plików APK na Androida. Przewodniki i rozwiązywanie problemów można znaleźć na [yalujailbreak.net](https://yalujailbreak.net/how-to-use-cydia-impactor/).
- **libimobiledevice**: Biblioteka dla systemów Linux i macOS do komunikacji z urządzeniami iOS. Komendy instalacyjne i przykłady użycia dla ideviceinstaller są dostarczane w celu instalacji aplikacji przez USB.
- **ipainstaller**: To narzędzie wiersza poleceń umożliwia bezpośrednią instalację aplikacji na urządzeniach iOS.
- **ios-deploy**: Dla użytkowników macOS, ios-deploy instaluje aplikacje iOS z wiersza poleceń. Rozpakowanie IPA i użycie flagi `-m` do bezpośredniego uruchomienia aplikacji są częścią procesu.
- **Xcode**: Wykorzystaj Xcode do instalacji aplikacji, przechodząc do **Window/Devices and Simulators** i dodając aplikację do **Installed Apps**.
#### **Zezwól na instalację aplikacji na urządzeniach nie-iPad**
Aby zainstalować aplikacje specyficzne dla iPada na urządzeniach iPhone lub iPod touch, wartość **UIDeviceFamily** w pliku **Info.plist** musi zostać zmieniona na **1**. Ta modyfikacja wymaga jednak ponownego podpisania pliku IPA z powodu kontroli walidacji podpisu.
**Uwaga**: Ta metoda może nie zadziałać, jeśli aplikacja wymaga funkcji zarezerwowanych dla nowszych modeli iPada, podczas korzystania ze starszego iPhone'a lub iPoda touch.
## References
* [https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/](ttps://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/)
* [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0052/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0052/)
* [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0053/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0053/)
* [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0054/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0054/)
* [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0056/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0056/)
{% hint style="success" %}
Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %}