Eseguire un iPhone virtuale su Apple Silicon con vphone-cli
Se hai mai sviluppato per iOS o esplorato i servizi di sistema di Apple, probabilmente hai incontrato le limitazioni del simulatore standard di Xcode. Il simulatore compila i binari per l'architettura host e li esegue in un ambiente macOS speciale. Questo funziona bene per la prototipazione rapida dell'interfaccia utente, ma non c'è un vero kernel Darwin per iPhone, nessuna corretta isolazione dei processi e nessun insieme di daemon di sistema. Fino a poco tempo fa, testare componenti di basso livello o tweak richiedeva di tenere una pila di dispositivi di test sulla scrivania.
La situazione è cambiata quando Apple ha rilasciato l'ambiente Private Cloud Compute (PCC) per i ricercatori di sicurezza in macOS 15 Sequoia. Lo sviluppatore Lakr233 ha sfruttato questa infrastruttura e ha scritto vphone-cli. Questa è un'utility da console che crea ed esegue una macchina virtuale completa con iOS reale direttamente su un Mac Apple Silicon.

Come funziona internamente
Il progetto si basa sul framework di sistema Virtualization.framework di Apple con il tipo di virtualizzazione privata PV=3. L'utility prende due immagini IPSW ufficiali: il firmware standard iPhone e l'immagine CloudOS. Gli script poi le uniscono, applicano le patch alla catena di boot, eseguono il recovery DFU e applicano una partizione di sistema personalizzata.
Il risultato è un'istanza iOS guest genuina con il proprio indirizzo di rete, accesso SSH e connettività VNC.
Preparazione dell'host
Mettere in funzione il progetto non è una questione di un clic. Apple custodisce strettamente i suoi meccanismi interni di virtualizzazione, quindi dovrai allentare le restrizioni del sistema host.
Avrai bisogno di un Mac della serie M con macOS 15 o successivo. Prima di tutto, disabilita SIP o abilita i sistemi di ricerca guest. Per farlo, riavvia il Mac in Recovery mode (tieni premuto il pulsante di accensione all'avvio) e apri Terminal:
csrutil disable
csrutil allow-research-guests enable
Dopo il riavvio in modalità normale, passa un parametro del kernel per disabilitare AMFI:
sudo nvram boot-args="amfi_get_out_of_my_way=1 -v"
Se preferisci non disabilitare i controlli a livello di sistema, l'autore fornisce un'alternativa. Puoi mantenere SIP in modalità debug e lanciare l'utility attraverso un binario ausiliario vphone-amfidont che rimuove selettivamente le restrizioni.
Installa le utility core tramite le dipendenze 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
Creare la tua prima VM
L'intero processo di creazione della VM è automatizzato con un singolo comando. L'utility scarica i file IPSW richiesti, applica le patch al bootloader, crea il bundle ed esegue la procedura di configurazione iniziale:
vphone-cli vm create myphone -V jb
vphone-cli vm launch myphone
Il flag -V (o --variant) imposta la profondità di modifica del firmware. Il repository ha cinque varianti:
lesscontiene solo 4 patch e lascia abilitati i meccanismi di sicurezza standard di iOS.regularinclude 42 patch che bypassano AMFI, il controllo della firma del Signed System Volume (SSV) e TXM.devaggiunge bypass per i controlli degli entitlement e i blocchi di debug.jbapplica 113 patch e installa immediatamente il gestore di pacchetti Sileo insieme a TrollStore.expestende la versione jailbreak con patch che nascondono il fatto che sta funzionando all'interno di una macchina virtuale.
Il profilo jb si adatta alla maggior parte degli esperimenti. Una volta completata la creazione, l'immagine si avvia e puoi connetterti.
Connessione e utilizzo
Il controllo del dispositivo virtuale è diviso in due canali: terminale e grafica.
L'accesso shell usa SSH sulla porta 22222:
ssh -p 22222 mobile@<ip-адрес-виртуалки>
La password predefinita per l'utente mobile nelle build jailbroken è alpine. Se hai selezionato il profilo dev o regular, connettiti come utente root.
Il display grafico viene emesso tramite il server VNC integrato sulla porta 5901. Aprilo usando l'app Screen Sharing integrata di macOS inserendo vnc://<ip-адрес-виртуалки>:5901.
La configurazione iniziale di iOS ha alcune particolarità. Nella schermata che dice "Premi home per continuare", fai clic destro nella finestra VNC: questo emula la pressione del pulsante Home fisico. Quando selezioni una regione durante la configurazione iniziale, è meglio specificare gli USA. Se scegli paesi UE o il Giappone, il sistema eseguirà controlli normativi aggiuntivi che attualmente falliscono nell'ambiente virtuale.
L'installazione di app di terze parti in formato .ipa o .tipa viene effettuata semplicemente trascinando il file nella finestra della macchina virtuale in esecuzione.
Automazione e controllo basato su socket
L'autore ha integrato capacità di controllo programmatico. Un socket Unix vphone.sock viene creato all'interno del bundle della VM. Attraverso di esso, puoi inviare comandi di tocco sullo schermo, swipe, eventi dei pulsanti hardware e dati degli appunti.
Ogni azione attraverso il socket restituisce uno screenshot dello stato attuale dello schermo. Questo è utile per chi scrive test di integrazione end-to-end o connette modelli linguistici per l'esplorazione delle app. L'ecosistema del progetto ha già un server pronto all'uso vphone-mcp che racchiude questo socket nel Model Context Protocol.
Limitazioni
Il progetto è in fase di sviluppo attivo e presenta alcune imperfezioni.
La virtualizzazione nidificata non è supportata a livello hardware. Non puoi eseguire vphone-cli all'interno di un'altra macchina virtuale macOS (ad esempio, in un cloud runner o Tart), quindi è necessario un Mac fisico.
A volte durante l'installazione del firmware personalizzato, il processo si blocca nella fase di ri-firma dei binari di sistema con l'utility ldid-procursus. Questo è correlato a un bug nella formula Homebrew stabile dove la funzione di gestione dei valori null entra in un ciclo infinito. La correzione è ricostruire il pacchetto dal branch di sviluppo tramite brew install --HEAD ldid-procursus.
Se le app basate su iOS 18 si bloccano con l'errore EXC_GUARD, ricostruisci le patch con il flag --force-exc-guard.
A chi sarà utile questo progetto
L'utility è principalmente utile per reverse engineer e specialisti di sicurezza delle app mobile. Elimina la necessità di acquistare dispositivi separati per il jailbreak e permette di ripristinare rapidamente lo stato del sistema a uno snapshot pulito tramite clonazione APFS.
Per gli sviluppatori di tweak e gli ingegneri di daemon di sistema di basso livello, il progetto fornisce un ambiente di debug conveniente senza il rischio di trasformare un telefono reale in un mattone. Se hai un Mac Apple Silicon disponibile e un interesse per i componenti interni di iOS, questo strumento vale sicuramente la pena di implementare ed esplorare.
Progetti correlati