The Dockerization of iOS: Inside vphone-aio
How a single shell script bypasses Apple's hardware locks to spin up a jailbroken iOS virtual machine on Apple Silicon.

1 script run the vphone
- vphone-aio shifts iOS security research from physical hardware to ephemeral software containers.
- The project bypasses GitHub's size limits by using split archives and streaming decompression to assemble a 12GB virtual machine on the fly.
- By injecting the amfi_get_out_of_my_way=1 boot argument, the script forces macOS to load an unsigned, jailbroken iOS image.
- Background iproxy processes tunnel SSH and VNC traffic out of the virtualization sandbox to the host machine.
Escaping the Hardware Prison
For years, iOS security research required hoarding older physical iPhones vulnerable to hardware exploits like checkm8. Finding, maintaining, and repeatedly wiping these devices was a slow, fragile process. The transition to Apple Silicon changed the underlying physics of this workflow. Because modern MacBooks and iPhones share the same ARM64 architecture, native execution is possible without the severe performance penalties of traditional emulation. vphone-aio capitalizes on this architectural irony.
Smuggling a Twelve-Gigabyte Payload
Distributing a pre-configured, multi-gigabyte virtual machine presents a massive logistical hurdle. GitHub is not designed to function as a content delivery network for 12GB disk images. To solve this, the orchestrator script utilizes Git LFS and split `.zst.part` archives. Instead of requiring the user to download a massive file, decompress it, and then extract it (which would temporarily consume double the disk space), the script pipes `zstd -dc` directly into `tar xf`. This streams the decompression process, extracting the VM on the fly and bypassing temporary file bloat.
Bypassing the Hypervisor Police
Running an OS image is one thing, but running a tampered, jailbroken iOS image requires deceiving macOS's strict security protocols. The native `Virtualization.framework` is guarded by System Integrity Protection (SIP) and Apple Mobile File Integrity (AMFI). To run the customized payload, the host Mac must have SIP disabled. More importantly, the script injects the `amfi_get_out_of_my_way=1` boot argument. This explicitly commands the Mac kernel to ignore signature checks, allowing the unsigned iOS kernel and its root-level modifications to load seamlessly.
Punching Holes in the Sandbox
Once the VM boots, it exists in a highly restricted virtualization sandbox. Without a physical screen or standard network interfaces, accessing the jailbroken environment requires a tunneling strategy. The orchestrator script solves this by spawning background `iproxy` processes.
iproxy 22222 22222 >/dev/null 2>&1 &
iproxy 5901 5901 >/dev/null 2>&1 &
This logic maps the isolated VM's internal ports directly to the host MacBook's localhost. Port 22222 provides instant SSH root access, while port 5901 connects to a VNC server running inside the iOS guest, exporting the graphical framebuffer. If the script is terminated, an elegant trap function automatically kills these background processes, preventing port conflicts on the next run.
The Ephemeral Jailbreak
By treating an iOS environment as a disposable software container, vphone-aio fundamentally changes how researchers approach tweak development and security auditing. If a kernel panic corrupts the system, there is no need to enter DFU mode or wait for a slow restore process across a USB cable. The corrupted folder is deleted, the script is re-run, and a pristine, rooted iOS 16.1 environment is ready in minutes.
| Feature | Physical checkm8 Device | vphone-aio VM |
|---|---|---|
| Hardware Requirement | Specific vulnerable iPhone models | Any Apple Silicon Mac |
| Setup Time | Hours of manual exploitation | Minutes via automated script |
| State Management | Permanent unless wiped | Ephemeral (delete folder to reset) |
| Accessibility | Physical USB connection required | Localhost SSH/VNC tunneling |