>_ DevTrendsfr

Langue

Accueil

Langages

Sections

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embarqué Sécurité
Swift

Exécuter un iPhone virtuel sur Apple Silicon avec vphone-cli

Si vous avez déjà développé pour iOS ou exploré les services système d'Apple, vous avez probablement rencontré les limites du simulateur standard de Xcode. Le simulateur construit des binaires pour l'architecture hôte et les exécute dans un environnement macOS spécial. Cela fonctionne bien pour le prototypage rapide d'interfaces utilisateur, mais il n'y a pas de vrai noyau Darwin pour iPhone, aucune isolation de processus appropriée, et toute une série de démons système absents. Jusqu'à récemment, tester des composants de bas niveau ou des tweaks nécessitait de garder un parc d'appareils de test sur son bureau.

La situation a changé lorsqu'Apple a publié l'environnement Private Cloud Compute (PCC) pour les chercheurs en sécurité dans macOS 15 Sequoia. Le développeur Lakr233 a exploité cette infrastructure et a créé vphone-cli. Il s'agit d'un utilitaire en ligne de commande qui construit et exécute une machine virtuelle complète avec un vrai iOS directement sur un Mac Apple Silicon.

poc

Comment ça fonctionne en interne

Le projet repose sur le framework système Virtualization.framework d'Apple avec le type de virtualisation privé PV=3. L'utilitaire utilise deux images IPSW officielles : le firmware iPhone standard et l'image CloudOS. Les scripts les fusionnent ensuite, patchent la chaîne de démarrage, effectuent la récupération DFU et appliquent une partition système personnalisée.

Le résultat est une véritable instance iOS invitée avec sa propre adresse réseau, son accès SSH et sa connectivité VNC.

Préparation de l'hôte

Mettre en place le projet n'est pas une opération en un clic. Apple protège étroitement ses mécanismes de virtualisation internes, vous devrez donc assouplir les restrictions du système hôte.

Vous aurez besoin d'un Mac série M sous macOS 15 ou ultérieur. Tout d'abord, désactivez SIP ou activez les systèmes de recherche pour invités. Pour cela, redémarrez votre Mac en mode Recovery (maintenez le bouton d'alimentation au démarrage) et ouvrez Terminal :

csrutil disable
csrutil allow-research-guests enable

Après avoir redémarré en mode normal, passez un paramètre kernel pour désactiver AMFI :

sudo nvram boot-args="amfi_get_out_of_my_way=1 -v"

Si vous préférez ne pas désactiver les vérifications système globales, l'auteur propose une alternative. Vous pouvez garder SIP en mode debug et lancer l'utilitaire via un binaire auxiliaire vphone-amfidont qui supprime sélectivement les restrictions.

Installez les utilitaires principaux via les dépendances 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

Créer votre première VM

L'ensemble du processus de création de VM est automatisé avec une seule commande. L'utilitaire télécharge les fichiers IPSW requis, patche le bootloader, crée le bundle et effectue la procédure de configuration initiale :

vphone-cli vm create myphone -V jb
vphone-cli vm launch myphone

Le flag -V (ou --variant) définit la profondeur de modification du firmware. Le dépôt propose cinq variantes :

  • less contient seulement 4 patches et laisse les mécanismes de sécurité standard d'iOS activés.
  • regular inclut 42 patches qui contournent AMFI, la vérification de signature du Signed System Volume (SSV) et TXM.
  • dev ajoute des contournements pour les vérifications d'entitlements et les verrous de debug.
  • jb applique 113 patches et installe immédiatement le gestionnaire de paquets Sileo ainsi que TrollStore.
  • exp étend la version jailbreak avec des patches qui masquent le fait qu'elle s'exécute à l'intérieur d'une machine virtuelle.

Le profil jb convient à la plupart des expérimentations. Une fois la création terminée, l'image démarre et vous pouvez vous y connecter.

Connexion et utilisation

Le contrôle du périphérique virtuel est divisé en deux canaux : terminal et graphique.

L'accès shell utilise SSH sur le port 22222 :

ssh -p 22222 mobile@<ip-адрес-виртуалки>

Le mot de passe par défaut pour l'utilisateur mobile dans les builds jailbroken est alpine. Si vous avez sélectionné le profil dev ou regular, connectez-vous en tant qu'utilisateur root.

L'affichage graphique est sorti via le serveur VNC intégré sur le port 5901. Ouvrez-le en utilisant l'application Screen Sharing intégrée à macOS en entrant vnc://<ip-адрес-виртуалки>:5901.

La configuration initiale d'iOS présente quelques particularités. Sur l'écran qui indique « Appuyez sur le bouton principal pour continuer », faites un clic droit dans la fenêtre VNC : cela émule l'appui sur le bouton d'accueil physique. Lors de la sélection d'une région pendant la configuration initiale, il est préférable de spécifier les États-Unis. Si vous choisissez des pays de l'UE ou le Japon, le système effectuera des vérifications réglementaires supplémentaires qui échouent actuellement dans l'environnement virtuel.

L'installation d'applications tierces au format .ipa ou .tipa se fait simplement en faisant glisser le fichier dans la fenêtre de la machine virtuelle en cours d'exécution.

Automatisation et contrôle par socket

L'auteur a intégré des capacités de contrôle programmatique. Un socket Unix vphone.sock est créé à l'intérieur du bundle de la VM. À travers celui-ci, vous pouvez envoyer des commandes de tapotement d'écran, des balayages, des événements de boutons matériels et des données du presse-papiers.

Chaque action via le socket retourne une capture d'écran de l'état actuel de l'écran. C'est utile pour ceux qui écrivent des tests d'intégration de bout en bout ou connectent des modèles de langage pour l'exploration d'applications. L'écosystème du projet dispose déjà d'un serveur prêt à l'emploi vphone-mcp qui enveloppe ce socket dans le Model Context Protocol.

Limitations

Le projet est en développement actif et présente quelques imperfections.

La virtualisation imbriquée n'est pas prise en charge au niveau matériel. Vous ne pouvez pas exécuter vphone-cli à l'intérieur d'une autre machine virtuelle macOS (par exemple, dans un cloud runner ou Tart), donc un Mac physique est nécessaire.

Parfois, lors de l'installation d'un firmware personnalisé, le processus se bloque au stade de la resignature des binaires système avec l'utilitaire ldid-procursus. Cela est lié à un bug dans la formule stable de Homebrew où la fonction de gestion des valeurs nulles entre dans une boucle infinie. La solution est de reconstruire le package depuis la branche de développement via brew install --HEAD ldid-procursus.

Si les applications basées sur iOS 18 plantent avec l'erreur EXC_GUARD, reconstruisez les patches avec le flag --force-exc-guard.

À qui ce projet sera utile

L'utilitaire est principalement utile pour les rétro-ingénieurs et les spécialistes de la sécurité des applications mobiles. Il élimine la nécessité d'acheter des appareils séparés pour le jailbreak et permet de réinitialiser rapidement l'état du système à un instantané propre via le clonage APFS.

Pour les développeurs de tweaks et les ingénieurs de démons système de bas niveau, le projet fournit un environnement de débogage pratique sans le risque de transformer un vrai téléphone en brique. Si vous avez un Mac Apple Silicon disponible et un intérêt pour les internes d'iOS, cet outil mérite définitivement d'être déployé et exploré.

Projets similaires