Запускаем виртуальный iPhone на Apple Silicon с помощью vphone-cli

31 авг 2026
9,563
1,285
58
1 неделя

Если вы когда-нибудь разрабатывали под iOS или ковыряли системные сервисы Apple, то наверняка сталкивались с ограничениями стандартного симулятора в Xcode. Симулятор собирает бинарники под архитектуру хоста и запускает их в специальном окружении macOS. Это удобно для быстрой верстки интерфейса, но там нет реального ядра Darwin для iPhone, нет нормальной изоляции процессов и кучи системных демонов. До недавнего времени для тестирования низкоуровневых штук или твиков приходилось держать на столе стопку тестовых устройств.

Ситуация изменилась, когда Apple выкатила окружение для исследователей безопасности Private Cloud Compute (PCC) в macOS 15 Sequoia. Разработчик под ником Lakr233 воспользовался этой инфраструктурой и написал vphone-cli. Это консольная утилита, которая собирает и запускает полноценную виртуальную машину с реальной iOS прямо на Mac с процессором Apple Silicon.

poc

Как это устроено внутри

В основе проекта лежит системный фреймворк Apple Virtualization.framework с приватным типом виртуализации PV=3. Утилита берет два официальных IPSW-образа: стандартную прошивку iPhone и образ CloudOS. Затем скрипты объединяют их, патчат цепочку загрузки, выполняют процедуру DFU-восстановления и накатывают кастомный системный раздел.

В результате вы получаете честный гостевой инстанс iOS с собственным сетевым адресом, доступом по SSH и возможностью подключения по VNC.

Реклама

Подготовка хоста

Запустить проект в один клик не выйдет. Apple жестко защищает внутренние механизмы виртуализации, поэтому придется ослабить системные ограничения хостовой системы.

Вам понадобится Mac на базе процессоров M-серии под управлением macOS 15 или новее. Сначала нужно отключить SIP или разрешить гостевые исследовательские системы. Для этого перезагрузите Mac в режим Recovery (зажмите кнопку питания при включении) и откройте терминал:

csrutil disable
csrutil allow-research-guests enable

После перезагрузки в обычный режим нужно передать ядру параметр для отключения AMFI:

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

Если не хочется отключать проверки на всей системе, автор предлагает альтернативу. Можно оставить SIP в режиме отладки и запускать утилиту через вспомогательный бинарник vphone-amfidont, который снимает ограничения точечно.

Из зависимостей через Homebrew ставятся базовые утилиты:

brew install python@3.13 aria2 wget gnu-tar openssl@3 ldid-procursus sshpass keystone cmake libusb ipsw zstd
brew install zqxwce/tap/vphone-cli

Создание первой виртуалки

Весь процесс создания виртуальной машины автоматизирован одной командой. Утилита сама скачает нужные IPSW, пропатчит загрузчик, создаст бандл и проведет процедуру первой инициализации:

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

Флаг -V (или --variant) задает глубину модификации прошивки. В репозитории есть пять вариантов:

  • less содержит всего 4 патча и оставляет стандартные механизмы защиты iOS включенными.
  • regular включает 42 патча, обходящих AMFI, проверку подписи томов SSV и TXM.
  • dev добавляет обход entitlement-проверок и отладочных блокировок.
  • jb применяет 113 патчей и сразу устанавливает менеджер пакетов Sileo вместе с TrollStore.
  • exp расширяет джейлбрейк-версию патчами, которые скрывают факт работы внутри виртуальной машины.

Для большинства экспериментов подходит профиль jb. После завершения создания образ запускается, и к нему можно подключаться.

Подключение и работа

Управление виртуальным устройством разбито на два канала: терминал и графика.

Для доступа к шеллу используется SSH на порту 22222:

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

Стандартный пароль пользователя mobile в джейлбрейкнутых сборках — alpine. Если вы выбрали профиль dev или regular, подключайтесь под пользователем root.

Графический экран выводится через встроенный VNC-сервер на порту 5901. Открыть его можно через штатное приложение macOS «Подключение к экрану», набрав vnc://<ip-адрес-виртуалки>:5901.

При первой настройке iOS есть пара забавных нюансов. На экране с надписью «Press home to continue» нужно нажать правую кнопку мыши в окне VNC: это эмулирует нажатие физической кнопки Home. При выборе региона во время первичной настройки лучше указать США. Если выбрать страны Евросоюза или Японию, система запустит дополнительные регуляторные проверки, которые в виртуальной среде пока завершаются ошибкой.

Установка сторонних приложений в формате .ipa или .tipa происходит прямо перетаскиванием файла в окно запущенной виртуальной машины.

Автоматизация и управление через сокет

Автор заложил в проект возможность программного контроля. Внутри бандла виртуальной машины создается Unix-сокет vphone.sock. Через него можно отправлять команды нажатия на экран, свайпы, события аппаратных кнопок и данные буфера обмена.

При выполнении каждого действия сокет возвращает скриншот текущего состояния экрана. Это пригодится тем, кто пишет сквозные интеграционные тесты или подключает языковые модели для исследования приложений. В экосистеме проекта уже есть готовый сервер vphone-mcp, который оборачивает этот сокет в протокол Model Context Protocol.

Подводные камни

Проект активно развивается, и в нем встречаются шероховатости.

Вложенная виртуализация не поддерживается на аппаратном уровне. Запустить vphone-cli внутри другой виртуальной машины с macOS (например, в облачном раннере или Tart) не получится, нужен физический Mac.

Иногда при установке кастомной прошивки процесс зависает на этапе переподписи системных бинарников утилитой ldid-procursus. Это связано с багом в стабильной версии Homebrew-формулы, где функция обработки нулевых значений уходит в бесконечный цикл. Лечится пересборкой пакета из ветки разработки через brew install --HEAD ldid-procursus.

Если приложения на базах iOS 18 падают с ошибкой EXC_GUARD, нужно пересобрать патчи с флагом --force-exc-guard.

Кому проект будет полезен

Утилита пригодится в первую очередь реверс-инженерам и специалистам по безопасности мобильных приложений. Она избавляет от необходимости покупать отдельные устройства под джейлбрейк и позволяет быстро сбрасывать состояние системы к чистому снимку через клонирование APFS.

Разработчикам твиков и низкоуровневых системных демонов проект дает удобную среду для отладки без риска превратить реальный телефон в кирпич. Если у вас есть свободный Mac на Apple Silicon и интерес к внутренностям iOS, этот инструмент определенно стоит развернуть и изучить.

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.