Uruchamianie wirtualnego iPhone'a na Apple Silicon z vphone-cli
Jeśli kiedykolwiek tworzyłeś aplikacje na iOS lub zagłębiałeś się w usługi systemowe Apple, prawdopodobnie napotkałeś ograniczenia standardowego symulatora Xcode. Symulator buduje pliki binarne dla architektury hosta i uruchamia je w specjalnym środowisku macOS. Doskonale sprawdza się to przy szybkim prototypowaniu interfejsu użytkownika, jednak nie ma tam prawdziwego jądra Darwin dla iPhone'a, brakuje właściwej izolacji procesów oraz hosta demonów systemowych. Do niedawna testowanie komponentów niskiego poziomu lub modyfikacji wymagało trzymania na biurku stosu urządzeń testowych.
Sytuacja zmieniła się, gdy Apple udostępnił środowisko Private Cloud Compute (PCC) dla badaczy bezpieczeństwa w macOS 15 Sequoia. Deweloper Lakr233 wykorzystał tę infrastrukturę i napisał vphone-cli. Jest to narzędzie konsolowe, które buduje i uruchamia pełnoprawną maszynę wirtualną z prawdziwym iOS na komputerze Mac z układem Apple Silicon.

Jak to działa pod maską
Projekt jest zbudowany na systemowym frameworku Virtualization.framework firmy Apple z prywatnym typem wirtualizacji PV=3. Narzędzie pobiera dwa oficjalne obrazy IPSW: standardowe oprogramowanie firmware iPhone'a oraz obraz CloudOS. Skrypty następnie je łączą, łatają łańcuch startowy, wykonują odzyskiwanie DFU oraz nakładają niestandardową partycję systemową.
Rezultatem jest prawdziwa instancja gościa iOS z własnym adresem sieciowym, dostępem SSH oraz łącznością VNC.
Przygotowanie hosta
Uruchomienie projektu nie jest operacją jednego kliknięcia. Apple ściśle strzeże swoich wewnętrznych mechanizmów wirtualizacji, więc będziesz musiał złagodzić ograniczenia systemu hosta.
Będziesz potrzebować Maca z układem serii M z systemem macOS 15 lub nowszym. Najpierw wyłącz SIP lub włącz systemy badawcze dla gości. Aby to zrobić, uruchom Maca w trybie odzyskiwania (przytrzymaj przycisk zasilania podczas uruchamiania) i otwórz Terminal:
csrutil disable
csrutil allow-research-guests enable
Po ponownym uruchomieniu w normalnym trybie przekaż parametr jądra, aby wyłączyć AMFI:
sudo nvram boot-args="amfi_get_out_of_my_way=1 -v"
Jeśli wolisz nie wyłączać kontroli systemowych globalnie, autor udostępnia alternatywę. Możesz pozostawić SIP w trybie debugowania i uruchomić narzędzie przez pomocniczy plik binarny vphone-amfidont, który selektywnie usuwa ograniczenia.
Zainstaluj podstawowe narzędzia przez zależności Homebrew:
brew install [email protected] aria2 wget gnu-tar openssl@3 ldid-procursus sshpass keystone cmake libusb ipsw zstd
brew install zqxwce/tap/vphone-cli
Tworzenie pierwszej maszyny wirtualnej
Cały proces tworzenia maszyny wirtualnej jest zautomatyzowany za pomocą jednego polecenia. Narzędzie pobiera wymagane pliki IPSW, łata bootloader, tworzy pakiet i wykonuje procedurę początkowej konfiguracji:
vphone-cli vm create myphone -V jb
vphone-cli vm launch myphone
Flagi -V (lub --variant) ustawia głębokość modyfikacji firmware. Repozytorium zawiera pięć wariantów:
lesszawiera tylko 4 łaty i pozostawia standardowe mechanizmy bezpieczeństwa iOS włączone.regularzawiera 42 łaty, które omijają AMFI, kontrolę podpisu Signed System Volume (SSV) oraz TXM.devdodaje obejścia dla kontroli uprawnień i blokad debugowania.jbnakłada 113 łat i natychmiast instaluje menedżer pakietów Sileo wraz z TrollStore.exprozszerza wersję jailbreak o łaty ukrywające fakt, że system działa wewnątrz maszyny wirtualnej.
Profil jb nadaje się do większości eksperymentów. Po zakończeniu tworzenia obraz uruchamia się i możesz się z nim połączyć.
Łączenie i praca
Kontrola urządzenia wirtualnego jest podzielona na dwa kanały: terminal i grafika.
Dostęp do powłoki wykorzystuje SSH na porcie 22222:
ssh -p 22222 mobile@<ip-адрес-виртуалки>
Domyślne hasło dla użytkownika mobile w kompilacjach z jailbreakiem to alpine. Jeśli wybrałeś profil dev lub regular, połącz się jako użytkownik root.
Wyświetlanie graficzne jest realizowane przez wbudowany serwer VNC na porcie 5901. Otwórz go za pomocą wbudowanej aplikacji Screen Sharing w macOS, wpisując vnc://<ip-адрес-виртуалки>:5901.
Początkowa konfiguracja iOS ma kilka osobliwości. Na ekranie z napisem "Press home to continue" kliknij prawym przyciskiem myszy w oknie VNC: symuluje to naciśnięcie fizycznego przycisku Home. Podczas wyboru regionu podczas konfiguracji początkowej najlepiej określić USA. Jeśli wybierzesz kraje UE lub Japonię, system uruchomi dodatkowe kontrole regulacyjne, które obecnie kończą się niepowodzeniem w środowisku wirtualnym.
Instalacja aplikacji stron trzecich w formacie .ipa lub .tipa odbywa się poprzez proste przeciągnięcie pliku do okna działającej maszyny wirtualnej.
Automatyzacja i kontrola przez gniazdo
Autor wbudował możliwości programowej kontroli. Gniazdo Unix vphone.sock jest tworzone wewnątrz pakietu maszyny wirtualnej. Przez nie można wysyłać polecenia dotyku ekranu, przesunięć, zdarzenia przycisków sprzętowych oraz dane schowka.
Każda akcja przez gniazdo zwraca zrzut ekranu bieżącego stanu wyświetlacza. Jest to przydatne dla osób piszących testy integracyjne end-to-end lub łączących modele językowe do eksploracji aplikacji. Ekosystem projektu ma już gotowy serwer vphone-mcp, który opakowuje to gniazdo w Model Context Protocol.
Zastrzeżenia
Projekt jest aktywnie rozwijany i ma pewne niedociągnięcia.
Zagnieżdżona wirtualizacja nie jest wspierana na poziomie sprzętowym. Nie można uruchomić vphone-cli wewnątrz innej maszyny wirtualnej macOS (na przykład w chmurowym runnerze lub Tart), więc wymagany jest fizyczny Mac.
Czasami podczas instalacji niestandardowego firmware proces zawiesza się na etapie ponownego podpisywania binarnych plików systemowych narzędziem ldid-procursus. Jest to związane z błędem w stabilnej formule Homebrew, gdzie funkcja obsługi wartości null wchodzi w nieskończoną pętlę. Poprawka polega na przebudowaniu pakietu z gałęzi deweloperskiej przez brew install --HEAD ldid-procursus.
Jeśli aplikacje oparte na iOS 18 ulegają awarii z błędem EXC_GUARD, przebuduj łaty z flagą --force-exc-guard.
Kto znajdzie projekt przydatny
Narzędzie jest przede wszystkim przydatne dla inżynierów odwrotnych i specjalistów bezpieczeństwa aplikacji mobilnych. Eliminuje konieczność zakupu oddzielnych urządzeń do jailbreaku i pozwala szybko resetować stan systemu do czystej migawki poprzez klonowanie APFS.
Dla deweloperów modyfikacji i inżynierów demonów systemowych niskiego poziomu projekt zapewnia wygodne środowisko debugowania bez ryzyka zamiany prawdziwego telefonu w cegłę. Jeśli masz dostępny komputer Apple Silicon i interesujesz się budową wewnętrzną iOS, to narzędzie zdecydowanie warto wdrożyć i zbadać.
Powiązane projekty