Een virtuele iPhone draaien op Apple Silicon met vphone-cli
Als je ooit voor iOS hebt ontwikkeld of je hebt verdiept in Apples systeemservices, ben je waarschijnlijk tegen de beperkingen van Xcodes standaard simulator aangelopen. De simulator bouwt binaries voor de host-architectuur en draait ze in een speciale macOS-omgeving. Dit werkt goed voor snelle UI-prototyping, maar er is geen echte Darwin-kernel voor iPhone, geen echte procesisolatie, en geen hele reeks systeemdaemons. Tot voor kort vereiste het testen van low-level componenten of tweaks dat je een stapel testapparaten op je bureau had staan.
De situatie veranderde toen Apple de Private Cloud Compute (PCC)-omgeving uitbracht voor beveiligingsonderzoekers in macOS 15 Sequoia. Ontwikkelaar Lakr233 heeft deze infrastructuur benut en vphone-cli geschreven. Dit is een consoletool die een volwaardige virtuele machine bouwt en draait met echte iOS direct op een Apple Silicon Mac.

Hoe het onder de motorkap werkt
Het project is gebouwd op Apples Virtualization.framework-systeemframework met het private virtualisatietype PV=3. De tool neemt twee officiële IPSW-images: de standaard iPhone-firmware en de CloudOS-image. Scripts voegen ze samen, patchen de boot chain, voeren DFU-recovery uit en passen een aangepaste systeempartitie toe.
Het resultaat is een echte guest iOS-instantie met zijn eigen netwerkadres, SSH-toegang en VNC-connectiviteit.
Voorbereiding van de host
Het project aan de praat krijgen is geen eenkliksoperatie. Apple bewaakt zijn interne virtualisatiemechanismen streng, dus je moet de restricties van het host-systeem versoepelen.
Je hebt een M-serie Mac nodig met macOS 15 of later. Schakel eerst SIP uit of enable guest research systems. Om dit te doen, start je je Mac op in Recovery-modus (houd de aan/uit-knop ingedrukt tijdens het opstarten) en open Terminal:
csrutil disable
csrutil allow-research-guests enable
Na opnieuw opstarten in de normale modus, geef je een kernelparameter door om AMFI uit te schakelen:
sudo nvram boot-args="amfi_get_out_of_my_way=1 -v"
Als je liever niet system-wide checks uitschakelt, biedt de auteur een alternatief. Je kunt SIP in debug-modus houden en de tool starten via een hulpprogramma vphone-amfidont dat selectief restricties verwijdert.
Installeer kernhulpmiddelen via Homebrew-dependencies:
brew install [email protected] aria2 wget gnu-tar openssl@3 ldid-procursus sshpass keystone cmake libusb ipsw zstd
brew install zqxwce/tap/vphone-cli
Je eerste VM maken
Het hele VM-creatieproces is geautomatiseerd met één commando. De tool downloadt de benodigde IPSW-bestanden, patcht de bootloader, maakt de bundle en voert de initiële setup-procedure uit:
vphone-cli vm create myphone -V jb
vphone-cli vm launch myphone
De -V vlag (of --variant) stelt de diepte van firmware-modificatie in. De repository heeft vijf varianten:
lessbevat slechts 4 patches en laat iOS standaard beveiligingsmechanismen ingeschakeld.regularbevat 42 patches die AMFI, de Signed System Volume (SSV) signature check en TXM omzeilen.devvoegt omzeilingen toe voor entitlement checks en debug locks.jbpast 113 patches toe en installeert onmiddellijk de Sileo package manager samen met TrollStore.expbreidt de jailbreak-versie uit met patches die verbergen dat het in een virtuele machine draait.
Het jb profiel is geschikt voor de meeste experimenten. Zodra het maken is voltooid, start de image op en kun je er verbinding mee maken.
Verbinden en werken
Virtuele apparaatbesturing is verdeeld over twee kanalen: terminal en graphics.
Shell-toegang gebruikt SSH op poort 22222:
ssh -p 22222 mobile@<ip-адрес-виртуалки>
Het standaard wachtwoord voor de mobile gebruiker in jailbroken builds is alpine. Als je profiel dev of regular hebt geselecteerd, maak dan verbinding als gebruiker root.
De grafische weergave wordt uitgevoerd via de ingebouwde VNC-server op poort 5901. Open het met de ingebouwde Schermdeling-app van macOS door vnc://<ip-адрес-виртуалки>:5901 in te voeren.
De initiële iOS-setup heeft een paar eigenaardigheden. Op het scherm dat zegt "Press home to continue", klik met de rechtermuisknop in het VNC-venster: dit emuleert het indrukken van de fysieke Home-knop. Bij het selecteren van een regio tijdens de initiële setup kun je het beste USA opgeven. Als je EU-landen of Japan kiest, voert het systeem aanvullende regelgevingscontroles uit die momenteel falen in de virtuele omgeving.
Het installeren van apps van derden in .ipa of .tipa formaat wordt gedaan door het bestand simpelweg naar het draaiende virtuele machine-venster te slepen.
Automatisering en socket-gebaseerde besturing
De auteur heeft programmeerbare besturingsmogelijkheden ingebouwd. Er wordt een Unix socket vphone.sock aangemaakt binnen de VM-bundle. Hierdoor kun je scherm-tap-commando's, swipes, hardwareknopgebeurtenissen en clipboardgegevens verzenden.
Elke actie via de socket retourneert een screenshot van de huidige schermstatus. Dit is nuttig voor wie end-to-end integratietests schrijft of taalmodellen verbindt voor app-verkenning. Het project-ecosysteem heeft al een kant-en-klare server vphone-mcp die deze socket wrapped in het Model Context Protocol.
Valtuilen
Het project is actief in ontwikkeling en heeft nog wat ruwe randjes.
Geneste virtualisatie wordt niet ondersteund op hardware-niveau. Je kunt vphone-cli niet draaien binnen een andere macOS-virtuele machine (bijvoorbeeld in een cloud runner of Tart), dus een fysieke Mac is vereist.
Soms hangt tijdens de installatie van aangepaste firmware het proces bij de fase van het opnieuw ondertekenen van systeembinaries met het ldid-procursus hulpprogramma. Dit heeft te maken met een bug in de stabiele Homebrew-formule waarbij de null value handling-functie in een oneindige lus terechtkomt. De oplossing is om het pakket opnieuw te bouwen vanuit de development-branch via brew install --HEAD ldid-procursus.
Als iOS 18-gebaseerde apps crashen met fout EXC_GUARD, bouw de patches dan opnieuw met de --force-exc-guard vlag.
Voor wie is dit project nuttig
De tool is vooral nuttig voor reverse engineers en mobiele app-beveiligingsspecialisten. Het elimineert de noodzaak om aparte apparaten aan te schaffen voor jailbreaking en maakt het mogelijk om snel de systeemstatus te resetten naar een schone snapshot via APFS-klonen.
Voor tweak-ontwikkelaars en low-level systeemdaemon-ingenieurs biedt het project een handige debug-omgeving zonder het risico om een echte telefoon te veranderen in een baksteen. Als je een beschikbare Apple Silicon Mac hebt en interesse in iOS-internals, is deze tool zeker de moeite waard om te deployen en te verkennen.
Gerelateerde projecten