Virtuelles iPhone auf Apple Silicon mit vphone-cli ausführen
Wenn Sie bereits für iOS entwickelt oder sich in Apples Systemdienste vertieft haben, sind Sie wahrscheinlich auf die Einschränkungen des Standard-Simulators von Xcode gestoßen. Der Simulator erstellt Binärdateien für die Host-Architektur und führt sie in einer speziellen macOS-Umgebung aus. Das funktioniert gut für schnelles UI-Prototyping, aber es gibt keinen echten Darwin-Kernel für das iPhone, keine ordnungsgemäße Prozessisolation und keine Reihe von System-Daemons. Bis vor Kurzem erforderte das Testen von Low-Level-Komponenten oder Tweaks eine Sammlung von Testgeräten auf Ihrem Schreibtisch.
Die Situation änderte sich, als Apple die Private-Cloud-Compute-Umgebung (PCC) für Sicherheitsforscher in macOS 15 Sequoia veröffentlichte. Der Entwickler Lakr233 nutzte diese Infrastruktur und schrieb vphone-cli. Dies ist ein Konsolendienstprogramm, das eine vollwertige virtuelle Maschine mit echtem iOS direkt auf einem Apple-Silicon-Mac erstellt und ausführt.

So funktioniert es unter der Haube
Das Projekt basiert auf Apples Virtualization.framework-Systemframework mit dem privaten Virtualisierungstyp PV=3. Das Dienstprogramm verwendet zwei offizielle IPSW-Images: die Standard-iPhone-Firmware und das CloudOS-Image. Skripte führen dann zusammen, patchen die Boot-Kette, führen die DFU-Wiederherstellung durch und wenden eine benutzerdefinierte Systempartition an.
Das Ergebnis ist eine echte Gast-iOS-Instanz mit eigener Netzwerkadresse, SSH-Zugriff und VNC-Konnektivität.
Host-Vorbereitung
Das Projekt zum Laufen zu bringen, ist keine Ein-Klick-Angelegenheit. Apple hütet seine internen Virtualisierungsmechanismen streng, daher müssen Sie die Einschränkungen des Host-Systems lockern.
Sie benötigen einen M-Serie-Mac mit macOS 15 oder höher. Deaktivieren Sie zunächst SIP oder aktivieren Sie Gast-Forschungssysteme. Starten Sie dazu Ihren Mac im Wiederherstellungsmodus neu (halten Sie die Einschalttaste beim Start gedrückt) und öffnen Sie das Terminal:
csrutil disable
csrutil allow-research-guests enable
Nach dem Neustart im normalen Modus übergeben Sie einen Kernel-Parameter, um AMFI zu deaktivieren:
sudo nvram boot-args="amfi_get_out_of_my_way=1 -v"
Wenn Sie die systemweiten Prüfungen nicht deaktivieren möchten, bietet der Autor eine Alternative. Sie können SIP im Debug-Modus belassen und das Dienstprogramm über eine Hilfsbinärdatei vphone-amfidont starten, die selektiv Einschränkungen entfernt.
Installieren Sie Core-Utilities über Homebrew-Abhängigkeiten:
brew install [email protected] aria2 wget gnu-tar openssl@3 ldid-procursus sshpass keystone cmake libusb ipsw zstd
brew install zqxwce/tap/vphone-cli
Erstellen Ihrer ersten VM
Der gesamte VM-Erstellungsprozess ist mit einem einzigen Befehl automatisiert. Das Dienstprogramm lädt die erforderlichen IPSW-Dateien herunter, patched den Bootloader, erstellt das Bundle und führt das erste Einrichtungsverfahren durch:
vphone-cli vm create myphone -V jb
vphone-cli vm launch myphone
Das Flag -V (oder --variant) legt die Tiefe der Firmware-Modifikation fest. Das Repository enthält fünf Varianten:
lessenthält nur 4 Patches und belässt die Standard-Sicherheitsmechanismen von iOS aktiviert.regularenthält 42 Patches, die AMFI, die Signed System Volume (SSV)-Signaturprüfung und TXM umgehen.devfügt Umgehungen für Berechtigungsprüfungen und Debug-Sperren hinzu.jbwendet 113 Patches an und installiert sofort den Sileo-Paketmanager zusammen mit TrollStore.experweitert die Jailbreak-Version mit Patches, die verbergen, dass sie in einer virtuellen Maschine läuft.
Das Profil jb eignet sich für die meisten Experimente. Nach Abschluss der Erstellung bootet das Image und Sie können sich damit verbinden.
Verbinden und Arbeiten
Die Steuerung des virtuellen Geräts ist auf zwei Kanäle aufgeteilt: Terminal und Grafik.
Shell-Zugriff erfolgt über SSH auf Port 22222:
ssh -p 22222 mobile@<ip-адрес-виртуалки>
Das Standardpasswort für den mobilen Benutzer in Jailbreak-Builds ist alpine. Wenn Sie Profil dev oder regular ausgewählt haben, verbinden Sie sich als Benutzer root.
Die grafische Anzeige wird über den integrierten VNC-Server auf Port 5901 ausgegeben. Öffnen Sie ihn mit der integrierten Bildschirmfreigabe-App von macOS, indem Sie vnc://<ip-адрес-виртуалки>:5901 eingeben.
Die erste iOS-Einrichtung hat einige Besonderheiten. Auf dem Bildschirm, der "Startseite drücken zum Fortfahren" anzeigt, klicken Sie mit der rechten Maustaste in das VNC-Fenster: dies emuliert das Drücken der physischen Home-Taste. Bei der Auswahl einer Region während der Ersteinrichtung ist es am besten, die USA anzugeben. Wenn Sie EU-Länder oder Japan wählen, führt das System zusätzliche regulatorische Prüfungen durch, die in der virtuellen Umgebung derzeit fehlschlagen.
Die Installation von Drittanbieter-Apps im Format .ipa oder .tipa erfolgt einfach durch Ziehen der Datei in das laufende virtuelle Maschinenfenster.
Automatisierung und socketbasierte Steuerung
Der Autor hat programmgesteuerte Steuerungsfunktionen eingebaut. Ein Unix-Socket vphone.sock wird innerhalb des VM-Bundles erstellt. Darüber können Sie Bildschirmtippbefehle, Wischgesten, Hardware-Tastenereignisse und Zwischenablagedaten senden.
Jede Aktion über den Socket gibt einen Screenshot des aktuellen Bildschirmzustands zurück. Dies ist nützlich für diejenigen, die End-to-End-Integrationstests schreiben oder Sprachmodelle für die App-Exploration verbinden. Das Projekt-Ökosystem verfügt bereits über einen fertigen Server vphone-mcp, der diesen Socket im Model Context Protocol umschließt.
Fallstricke
Das Projekt befindet sich in aktiver Entwicklung und hat einige raue Kanten.
Verschachtelte Virtualisierung wird auf Hardwareebene nicht unterstützt. Sie können vphone-cli nicht in einer anderen macOS-Virtual-Maschine ausführen (z.B. in einem Cloud-Runner oder Tart), daher ist ein physischer Mac erforderlich.
Manchmal hängt während der Installation der benutzerdefinierten Firmware der Prozess in der Phase des erneuten Signierens von Systembinärdateien mit dem Dienstprogramm ldid-procursus. Dies hängt mit einem Fehler in der stabilen Homebrew-Formel zusammen, bei dem die Nullwertbehandlungsfunktion in eine Endlosschleife gerät. Die Lösung besteht darin, das Paket aus dem Entwicklungszweig neu zu erstellen über brew install --HEAD ldid-procursus.
Wenn iOS-18-basierte Apps mit dem Fehler EXC_GUARD abstürzen, erstellen Sie die Patches mit dem Flag --force-exc-guard neu.
Wem das Projekt nützen wird
Das Dienstprogramm ist in erster Linie für Reverse Engineers und Spezialisten für mobile App-Sicherheit nützlich. Es eliminiert die Notwendigkeit, separate Geräte für Jailbreaking zu kaufen, und ermöglicht schnelles Zurücksetzen des Systemzustands auf einen sauberen Snapshot über APFS-Kloning.
Für Tweaker-Entwickler und Low-Level-System-Daemon-Ingenieure bietet das Projekt eine bequeme Debugging-Umgebung ohne das Risiko, ein echtes Telefon zu einem Ziegelstein zu machen. Wenn Sie einen verfügbaren Apple-Silicon-Mac und ein Interesse an iOS-Interna haben, ist dieses Tool definitiv bereitgestellt und erkundet zu werden.
Ähnliche Projekte