>_ DevTrendspt

Idioma

Início

Linguagens

Seções

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embarcados Segurança
Swift

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.

poc

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:

  • less contém apenas 4 patches e deixa os mecanismos de segurança padrão do iOS habilitados.
  • regular inclui 42 patches que contornam AMFI, a verificação de assinatura do Signed System Volume (SSV) e TXM.
  • dev adiciona contornos para verificações de entitlement e bloqueios de debug.
  • jb aplica 113 patches e instala imediatamente o gerenciador de pacotes Sileo junto com o TrollStore.
  • exp estende 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