Executando um iPhone Virtual em Apple Silicon com vphone-cli
Se você já desenvolveu para iOS ou explorou os serviços de sistema da Apple, provavelmente encontrou as limitações do simulador padrão do Xcode. O simulador compila binários para a arquitetura do host e os executa em um ambiente especial do macOS. Isso funciona bem para prototipagem rápida de UI, mas não há um kernel Darwin real para iPhone, nenhum isolamento adequado de processos e nenhum conjunto de daemons de sistema. Até recentemente, testar componentes de baixo nível ou tweaks exigia manter uma pilha de dispositivos de teste em sua mesa.
A situação mudou quando a Apple lançou o ambiente Private Cloud Compute (PCC) para pesquisadores de segurança no macOS 15 Sequoia. O desenvolvedor Lakr233 aproveitou essa infraestrutura e escreveu o vphone-cli. Esta é uma ferramenta de console que compila e executa uma máquina virtual completa com iOS real diretamente em um Mac com Apple Silicon.

Como funciona nos bastidores
O projeto é construído sobre o system framework Virtualization.framework da Apple com o tipo de virtualização privado PV=3. A ferramenta recebe duas imagens IPSW oficiais: o firmware padrão do iPhone e a imagem CloudOS. Scripts então mesclam, patcheiam a cadeia de boot, realizam recuperação DFU e aplicam uma partição de sistema personalizada.
O resultado é uma instância convidada genuína de iOS com seu próprio endereço de rede, acesso SSH e conectividade VNC.
Preparação do host
Colocar o projeto para funcionar não é uma questão de um clique. A Apple guarda rigorosamente seus mecanismos internos de virtualização, então você precisará relaxar as restrições do sistema host.
Você precisará de um Mac da série M executando macOS 15 ou posterior. Primeiro, desabilite o SIP ou habilite sistemas de pesquisa para convidados. Para fazer isso, reinicie seu Mac no modo de Recuperação (segure o botão de energia durante a inicialização) e abra o Terminal:
csrutil disable
csrutil allow-research-guests enable
Após reiniciar no modo normal, passe um parâmetro de kernel para desabilitar o AMFI:
sudo nvram boot-args="amfi_get_out_of_my_way=1 -v"
Se você preferir não desabilitar as verificações em todo o sistema, o autor fornece uma alternativa. Você pode manter o SIP em modo de debug e iniciar a ferramenta através de um binário auxiliar vphone-amfidont que remove seletivamente as restrições.
Instale utilitários principais via dependências do 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
Criando sua primeira VM
O processo inteiro de criação da VM é automatizado com um único comando. A ferramenta baixa os arquivos IPSW necessários, patcheia o bootloader, cria o bundle e executa o procedimento de configuração inicial:
vphone-cli vm create myphone -V jb
vphone-cli vm launch myphone
O flag -V (ou --variant) define a profundidade da modificação do firmware. O repositório tem cinco variantes:
lesscontém apenas 4 patches e deixa os mecanismos de segurança padrão do iOS habilitados.regularinclui 42 patches que contornam AMFI, a verificação de assinatura do Signed System Volume (SSV) e TXM.devadiciona contornos para verificações de entitlement e bloqueios de debug.jbaplica 113 patches e instala imediatamente o gerenciador de pacotes Sileo junto com o TrollStore.expestende a versão jailbreak com patches que ocultam o fato de estar sendo executado dentro de uma máquina virtual.
O perfil jb serve para a maioria dos experimentos. Uma vez concluída a criação, a imagem inicializa e você pode se conectar a ela.
Conectando e trabalhando
O controle do dispositivo virtual é dividido em dois canais: terminal e gráficos.
O acesso ao shell usa SSH na porta 22222:
ssh -p 22222 mobile@<ip-адрес-виртуалки>
A senha padrão para o usuário mobile em builds jailbroken é alpine. Se você selecionou o perfil dev ou regular, conecte-se como usuário root.
O display gráfico é enviado através do servidor VNC integrado na porta 5901. Abra-o usando o app de Compartilhamento de Tela integrado do macOS inserindo vnc://<ip-адрес-виртуалки>:5901.
A configuração inicial do iOS tem algumas peculiaridades. Na tela que diz "Pressione home para continuar", clique com o botão direito na janela VNC: isso emula pressionar o botão Home físico. Ao selecionar uma região durante a configuração inicial, é melhor especificar os EUA. Se você escolher países da UE ou Japão, o sistema executará verificações regulatórias adicionais que atualmente falham no ambiente virtual.
A instalação de apps de terceiros em formato .ipa ou .tipa é feita simplesmente arrastando o arquivo para a janela da máquina virtual em execução.
Automação e controle baseado em socket
O autor construiu capacidades de controle programático. Um socket Unix vphone.sock é criado dentro do bundle da VM. Através dele, você pode enviar comandos de toque na tela, gestos de deslize, eventos de botões de hardware e dados da área de transferência.
Cada ação através do socket retorna uma captura de tela do estado atual da tela. Isso é útil para quem escreve testes de integração end-to-end ou conecta modelos de linguagem para exploração de apps. O ecossistema do projeto já tem um servidor pronto vphone-mcp que encapsula esse socket no Model Context Protocol.
Ressalvas
O projeto está em desenvolvimento ativo e tem algumas arestas irregulares.
A virtualização aninhada não é suportada no nível de hardware. Você não pode executar vphone-cli dentro de outra máquina virtual macOS (por exemplo, em um cloud runner ou Tart), então um Mac físico é necessário.
Às vezes, durante a instalação de firmware personalizado, o processo trava no estágio de re-assinatura de binários do sistema com o utilitário ldid-procursus. Isso está relacionado a um bug na fórmula estável do Homebrew onde a função de tratamento de valor nulo entra em um loop infinito. A correção é reconstruir o pacote a partir do branch de desenvolvimento via brew install --HEAD ldid-procursus.
Se apps baseados em iOS 18 travarem com erro EXC_GUARD, reconstrua os patches com o flag --force-exc-guard.
Para quem o projeto será útil
O utilitário é principalmente útil para engenheiros reversos e especialistas em segurança de aplicativos móveis. Elimina a necessidade de comprar dispositivos separados para jailbreaking e permite redefinir rapidamente o estado do sistema para um snapshot limpo via clonagem APFS.
Para desenvolvedores de tweaks e engenheiros de daemons de sistema de baixo nível, o projeto fornece um ambiente de depuração conveniente sem o risco de transformar um telefone real em um tijolo. Se você tem um Mac Apple Silicon disponível e interesse em internals do iOS, esta ferramenta definitivamente vale a pena implementar e explorar.
Projetos relacionados