iOS Basic Testing Operations

Wsparcie dla HackTricks

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.

Narzędzia wiersza poleceń oferują alternatywne metody uzyskiwania UDID:

  • Używając narzędzia I/O Registry Explorer ioreg:

$ ioreg -p IOUSB -l | grep "USB Serial"
  • Używanie ideviceinstaller dla macOS (i Linux):

$ brew install ideviceinstaller
$ idevice_id -l
  • Wykorzystanie system_profiler:

$ 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ń:

$ 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@<device_ip_address>. 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:

$ 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:

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.

objection --gadget com.apple.mobilesafari explorer
cd /var/mobile/Containers/Data/Application/72C7AAFB-1D75-4FBA-9D83-D8B4A2D44133/Documents
file download <filename>

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.

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:

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.

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.

dd bs=1 seek=<starting_address> 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 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:

$ python dump.py -l

Aby zrzucić konkretną aplikację, taką jak Telegram, używa się następującego polecenia:

$ python3 dump.py -u "root" -p "<PASSWORD>" 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.

flexdecrypt

Narzędzie flexdecrypt, wraz ze swoim wrapperem flexdump, 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:

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, inne narzędzie oparte na Frida, wymaga urządzenia z jailbreakiem do deszyfrowania aplikacji:

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.

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.

  • 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

Support HackTricks

Last updated