vphone-cli

Voorwaarden

Host-systeem

  • Hardware: Apple Silicon
  • Besturingssysteem: macOS 15+ (Sequoia)
  • Software: Xcode + iOS SDK (voor het cross-compileren van de guest-daemon)
  • Systeeminstellingen: SIP/AMFI-ontspanning om private PV=3-entitlements met onondertekende binaries toe te staan.

Afhankelijkheden

Installeer de volgende pakketten via Homebrew: brew install python@3.13 aria2 wget gnu-tar openssl@3 ldid-procursus sshpass keystone cmake libusb ipsw zstd

Installatie

Via Homebrew

brew install zqxwce/tap/vphone-cli

Handmatig builden

  1. Clone de repository:

git clone --recurse-submodules https://github.com/Lakr233/vphone-cli.git

  1. Installeer afhankelijkheden, build de toolchain-submodules en maak de Python venv aan:

./scripts/setup_tools.sh

  1. Build en onderteken vphone-cli, bundel de .app en cross-compile vphoned:

./scripts/build.sh

  1. Navigeer naar de binary en bekijk de help:

cd .build/vphone-cli.app/Contents/MacOS/ vphone-cli --help

Snelstart

Met één commando kan een VM end-to-end worden gemaakt (downloaden → patchen → DFU-herstel → CFW-installatie → eerste boot):

vphone-cli vm create myphone -V jb (waarbij -V of --variant de variant bepaalt) vphone-cli vm launch myphone

Opdrachten

Hoewel vphone-cli vm create de volledige pipeline automatiseert, kunnen de onderstaande stappen handmatig worden uitgevoerd of opnieuw worden gedraaid.

Beheer

  • VM's weergeven: vphone-cli vm list (gebruik --json voor scripting)
  • Informatie over één VM tonen: vphone-cli vm info myphone
  • Lege bundle maken: vphone-cli vm new myphone (opties voor cpu/mem/disk)
  • Configuratie aanpassen: vphone-cli vm config myphone --cpu 8 --memory 8192
  • VM klonen: vphone-cli vm clone myphone myphone-2 (snelle APFS-kloon, nieuwe device-identiteit)
  • VM exporteren: vphone-cli vm export myphone --out myphone.tzst (standaard zstd; --max gebruikt xz -9; --out kan een map zijn; slaat restore-dir en staging-bestanden over)
  • VM importeren: vphone-cli vm import myphone.tzst --name restored
  • VM hernoemen: vphone-cli vm rename myphone iphone16
  • VM verwijderen: vphone-cli vm delete iphone16

Handmatig een VM bouwen

  1. Lege bundle maken: vphone-cli vm new myphone
  2. IPSW's downloaden en mergen: vphone-cli fw prepare myphone --iphone-version 26.1
  3. Boot-chain patchen: vphone-cli fw patch myphone --variant jb
  4. Booten in DFU (op de achtergrond): vphone-cli vm launch myphone --dfu &
  • SHSH ophalen: vphone-cli restore myphone --get-shsh
  • DFU-herstel: vphone-cli restore myphone
  • DFU-boot stoppen: vphone-cli vm stop myphone
  1. CFW installeren (host-mount; vereist sudo): vphone-cli cfw install myphone --variant jb
  2. Eerste boot: vphone-cli vm launch myphone

Om te updaten naar een nieuwere iOS, wijs fw prepare naar een IPSW via --iphone-source /pad/naar.ipsw --cloudos-source /pad/naar.ipsw.

Firmware-varianten

Er zijn vijf patch-varianten beschikbaar met toenemende security-bypass. Gebruik --variant om een keuze te maken:

VariantBoot ChainCFWNotities
less4 patches2 fasesPatchless — houdt iOS mitigaties ingeschakeld
regular42 patches10 fasesAMFI/SSV/Img4/TXM bypass
dev53 patches12 fases+ TXM entitlement/debug bypass
jb113 patches14 fases+ volledige jailbreak (Sileo, TrollStore auto-install bij eerste boot)
exp141 patches18 fasesJB superset + anti-VM-detectie research patches

Zie research/0binarypatch_comparison.md voor een gedetailleerde uitsplitsing per component.

Uitvoeren en Verbinding maken

  • SSH (jailbreak): ssh -p 22222 mobile@<vm-ip> (wachtwoord: alpine)
  • SSH (regular/dev): ssh -p 22222 root@<vm-ip>
  • VNC: vnc://<vm-ip>:5901

Bestandslocaties

Alle bestanden die vphone-cli aanmaakt, bevinden zich onder ~/.vphone/. Dit is buiten de repo en de .app-bundel geplaatst zodat de signed bundle draagbaar blijft. De gehele boom kan worden omgeleid met $VPHONE_ROOT.

PadInhoud
~/.vphone/De root voor gebruikersdata — override met $VPHONE_ROOT.
~/.vphone/VMs/VM bundles — één map per VM. Override met $VPHONELIBRARYROOT.
~/.vphone/ipsws/Gedownloade iPhone + cloudOS IPSW's, gecachet voor hergebruik.
~/.vphone/tools/Gecachte APFS seal-volume artifacts (apfssealvolume<versie>) opgehaald tijdens fw prepare.
~/.vphone/debs/Gecachte .deb pakketten die de jb/exp CFW installatie in de guest plaatst (Sileo, apt, etc.).
~/.vphone/venv/Automatisch geprovisioneerde Python-omgeving. Override met $VPHONEVENVDIR.

Prioriteit: Specifieke overrides ($VPHONELIBRARYROOT, $VPHONEVENVDIR) gaan voor $VPHONE_ROOT, wat weer gaat voor de standaard ~/.vphone. De caches ipsws/, tools/ en debs/ bevinden zich altijd direct onder de actieve root.

SIP/AMFI-ontspanning (Relaxation)

Optie A — Volledige uitschakeling

Schakel SIP volledig uit en daarna AMFI via een boot-arg (meest permissief).

  1. In Recovery (lang indrukken power → Terminal):

csrutil disable csrutil allow-research-guests enable

  1. Herstart macOS en stel de AMFI boot-arg in (vereist volledig uitgeschakelde SIP):

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

  1. Herstart het systeem.

Optie B — Gedeeltelijke ontspanning

Houd SIP aan (debug-only relaxed) en voeg de binary toe aan de allowlist met amfidont (houdt AMFI systeembreed ingeschakeld).

  1. In Recovery:

csrutil enable --without debug csrutil allow-research-guests enable

  1. Herstart macOS en voer uit:

vphone-amfidont (voor lokale builds: .build/vphone-cli.app/Contents/Resources/vphone-amfidont)

Geteste Omgevingen

HostiPhoneCloudOS
Mac16,11 27.0b217,318.6.222G10026.1-23B85
Mac16,8 26.5.117,326.023A34126.1-23B85
Mac16,8 26.5.117,326.0.123A35526.1-23B85
Mac16,12 26.317,326.123B8526.1-23B85
Mac16,12 26.317,326.323D12726.1-23B85
Mac16,12 26.317,326.323D12726.3-23D128
Mac16,12 26.317,326.3.123D813326.3-23D128
Mac16,11 26.217,326.423E24626.4-23E5207q
Mac16,11 26.217,326.523F7726.4-23E5207q
Mac16,11 27.0b217,326.5.223F8426.4-23E5207q
Mac16,6 26.4.117,326.623G7126.4-23E5207q
Mac16,11 27.0b217,326.6.123G8326.4-23E5207q
Mac16,11 27.0b217,327.024A5380h26.4-23E5207q
Mac16,6 26.4.117,327.024A5390f26.4-23E5207q
Mac16,6 26.6.117,327.024A5408d26.4-23E5207q
Mac16,11 27.0b217,327.024A5418b26.4-23E5207q
Mac16,11 27.0b217,327.024A5424a26.4-23E5207q

Veelgestelde Vragen (FAQ)

  • zsh: killed ./vphone-cli — De AMFI/debug restricties zijn niet omzeild. Raadpleeg de sectie Voorwaarden (amfigetoutofmy_way=1 of amfidont).
  • Virtualization is not available on this hardware — Je Mac is zelf een VM; PV=3 guest boot kan niet genest worden. Gebruik een niet-geneste macOS 15+ host.
  • Blijft hangen op "Press home to continue" — Maak verbinding via VNC en klik met de rechtermuisknop (klik met twee vingers) om de home-knop te simuleren.
  • Systeem-apps worden niet geïnstalleerd — Kies tijdens de iOS-setup niet voor Japan of de EU als regio (vanwege extra regulatoire controles die de VM niet kan doorlopen); kies bijvoorbeeld de Verenigde Staten.
  • App crasht bij opstarten met EXCGUARD / GUARDTYPEMACHPORT — Patch opnieuw met vphone-cli fw patch <name> --variant <v> --force-exc-guard en voer vervolgens opnieuw de restore/installatie uit (#291). Dit staat standaard aan voor iOS 18 bases.
  • Een .ipa/.tipa installeren — Gebruik het Install-menu van de draaiende VM (sleep-and-drop of bestandsselectie).
  • cfw install blijft hangen bij het opnieuw ondertekenen van een systeem-binary (bijv. Campo), geheugenverbruik stijgt onbeperkt — Bekende bug in ldid-procursus tot versie 2.1.5-procursus7 (de huidige Homebrew stable). De functie bytes(uint64_t) roept __builtin_clzll(0) aan zonder zero-guard, wat undefined behavior is. Dit resulteert in een loop die oneindig bytes naar een buffer schrijft. Dit wordt getriggerd door elke entitlements plist die een integerwaarde van precies 0 bevat. Opgelost in upstream, maar nog niet in een tagged release; build handmatig vanuit source: brew install --HEAD ldid-procursus && brew link --overwrite ldid-procursus. Beëindig eerst het hangende ldid-proces (sudo kill -9 <pid>).

Automatisering

vphone-cli biedt een host-control socket (<bundle>/vphone.sock) voor programmatische besturing — screenshots, touch, swipes, hardware-toetsen, klembord. Elke actie retourneert een inline screenshot voor AI-gestuurde E2E-tests. Zie vphone-mcp voor een MCP-server die dit wrapt.

Erkenningen

wh1te4ever/super-tart-vphone-writeup