Files
vphone-cli/docs/README_ja.md
Lakr 6d11093152 feat: Add VM manifest system and code clarity improvements
Implement VM configuration manifest system compatible with security-pcc's
VMBundle.Config format, storing VM settings in config.plist.

**Manifest System:**
- Add VPhoneVirtualMachineManifest.swift with security-pcc compatible structure
- Add scripts/vm_manifest.py for manifest generation during vm_new
- Update VPhoneCLI to support --config option with CLI overrides
- Update vm_create.sh to generate config.plist with CPU/memory/screen settings

**Environment Variables:**
- CPU/MEMORY/DISK_SIZE now only used during vm_new (written to manifest)
- boot/boot_dfu automatically read from config.plist
- Remove unused CFW_INPUT variable (overridden by scripts internally)
- Document remaining variables with their usage scope

**Documentation:**
- Update README.md with VM configuration section
- Update docs/README_{zh,ja,ko}.md with translated VM configuration docs
- Update Makefile help output with vm_new options and config.plist usage
- Fix fw_patch_jb description: "dev + JB extensions"
- Fix restore_get_shsh description: "Dump SHSH response from Apple"

**Code Quality:**
- Add VPhoneVirtualMachineRefactored.swift demonstrating code-clarity principles
- Extract 200+ line init into focused configuration methods
- Improve naming: hardwareModel, graphicsConfiguration, soundDevice
- Add BatteryConnectivity enum for magic numbers
- Create research/manifest_and_refactoring_summary.md with full analysis

**Compatibility with security-pcc:**
- Platform type: Fixed vresearch101 (iPhone-only)
- Network: NAT only (no bridging/host-only needed)
- Added: ScreenConfig and SEP storage (iPhone-specific)
- Removed: VirtMesh plugin support (PCC-specific)

docs: add machineIdentifier storage analysis

Research and validate the integration of machineIdentifier into config.plist.

**Findings:**
- security-pcc stores machineIdentifier in config.plist (same approach)
- VZMacAuxiliaryStorage creation is independent of machineIdentifier
- VZMacMachineIdentifier only requires Data representation, not file source
- No binding or validation between components

**Conclusion:**
-  No compatibility issues
-  Matches security-pcc official implementation
-  Proper handling of first-boot creation and data recovery
-  Safe to use

Delete VPhoneVirtualMachineRefactored.swift

refactor: integrate machineIdentifier into config.plist

Move machineIdentifier storage from standalone machineIdentifier.bin file
into the central config.plist manifest for simpler VM configuration.

**Changes:**
- VPhoneVirtualMachineManifest: Remove machineIDFile field
- VPhoneVirtualMachine: Load/create machineIdentifier from manifest
- VPhoneCLI: Remove --machine-id parameter, require --config
- Makefile: Remove --machine-id from boot/boot_dfu targets
- vm_manifest.py: Remove machineIDFile from manifest structure

**Behavior:**
- First boot: Creates machineIdentifier and saves to config.plist
- Subsequent boots: Loads machineIdentifier from config.plist
- Invalid/empty machineIdentifier: Auto-regenerates and updates manifest
- All VM configuration now centralized in single config.plist file

**File cleanup:**
- Move VPhoneVirtualMachineRefactored.swift to research/ as reference

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-10 17:12:13 +08:00

11 KiB
Raw Blame History

vphone-cli

Apple の Virtualization.framework と PCC の研究用 VM インフラを使用して、仮想 iPhone (iOS 26) を起動するためのツール

poc

検証済み環境

ホスト iPhone CloudOS
Mac16,12 26.3 17,3_26.1_23B85 26.1-23B85
Mac16,12 26.3 17,3_26.3_23D127 26.1-23B85
Mac16,12 26.3 17,3_26.3_23D127 26.3-23D128
Mac16,12 26.3 17,3_26.3.1_23D8133 26.3-23D128

ファームウェアバリアント

セキュリティバイパスのレベルが異なる3つのパッチバリアントが利用可能です

バリアント ブートチェーン CFW Make ターゲット
通常版 41 パッチ 10 フェーズ fw_patch + cfw_install
開発版 52 パッチ 12 フェーズ fw_patch_dev + cfw_install_dev
脱獄版 112 パッチ 14 フェーズ fw_patch_jb + cfw_install_jb

JB最終設定シンボリックリンク、Sileo、apt、TrollStore/cores/vphone_jb_setup.sh LaunchDaemon により初回起動時に自動実行されます。進捗確認:/var/log/vphone_jb_setup.log

詳細なコンポーネントごとの内訳については research/0_binary_patch_comparison.md を参照してください。

前提条件

ホストOS: PV=3 仮想化には macOS 15+Sequoiaが必要です。

SIP/AMFIの設定 — プライベートな Virtualization.framework の entitlement と未署名バイナリのワークフローに必要です。

復旧モードで起動し(電源ボタンを長押し)、ターミナルを開いて、以下のいずれかの方法を選択します:

  • 方法 1SIP を完全に無効化 + AMFI boot-arg最も制限が少ない

    復旧モードで:

    csrutil disable
    csrutil allow-research-guests enable
    

    通常の macOS に再起動した後:

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

    もう一度再起動します。

  • 方法 2SIP はほぼ有効のまま、デバッグ制限のみ無効化、amfidont を使用

    復旧モードで:

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

    通常の macOS に再起動した後:

    xcrun python3 -m pip install amfidont
    sudo amfidont --path [PATH_TO_VPHONE_DIR]
    

依存関係のインストール:

brew install ideviceinstaller wget gnu-tar openssl@3 ldid-procursus sshpass keystone autoconf automake pkg-config libtool cmake

Submodules — このリポジトリはリソースアーカイブに git submodule を使用しています。クローン時に以下を使用してください:

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

クイックスタート

make setup_machine            # 初回起動までを完全自動化(復元/ラムディスク/CFWを含む
# オプションNONE_INTERACTIVE=1 SUDO_PASSWORD=...

手動セットアップ

make setup_tools              # brew の依存関係インストール、trustcache + libimobiledevice のビルド、Python venv の作成
make build                    # vphone-cli のビルド + 署名
make vm_new                   # VM ディレクトリとマニフェストconfig.plistの作成
# オプションCPU=8 MEMORY=8192 DISK_SIZE=64
make fw_prepare               # IPSW のダウンロード、抽出、マージ、マニフェスト生成
make fw_patch                 # ブートチェーンのパッチ当て(通常バリアント)
# または: make fw_patch_dev   # 開発バリアント(+ TXM entitlement/デバッグバイパス)
# または: make fw_patch_jb    # 脱獄バリアントdev + 完全セキュリティバイパス)

VM 設定

v1.0 から、VM 設定は vm/config.plist に保存されます。VM 作成時に CPU、メモリ、ディスクサイズを設定します

# カスタム設定で VM を作成
make vm_new CPU=16 MEMORY=16384 DISK_SIZE=128

# 起動時に config.plist から設定を自動読み込み
make boot

マニフェストファイルはすべての VM 設定CPU、メモリ、画面、ROM、ストレージを保存し、security-pcc の VMBundle.Config 形式 と互換性があります。

復元

復元プロセスには 2つのターミナル が必要です。ターミナル 2 を使用している間、ターミナル 1 を実行し続けてください。

# ターミナル 1
make boot_dfu                 # DFUモードでVMを起動実行したままにする
# ターミナル 2
make restore_get_shsh         # SHSH blob の取得
make restore                  # idevicerestore 経由でファームウェアを焼き込み

カスタムファームウェアのインストール

ターミナル 1 の DFU 起動を停止しCtrl+C、Ramdisk 用に再び DFU で起動します:

# ターミナル 1
make boot_dfu                 # 実行したままにする
# ターミナル 2
sudo make ramdisk_build       # 署名済みSSH Ramdisk のビルド
make ramdisk_send             # デバイスへ送信

Ramdisk が起動したら(出力に Running server と表示されるはずです、iproxy トンネル用に 3つ目のターミナル を開き、ターミナル 2 から CFW をインストールします:

# ターミナル 3 — 実行したままにする
iproxy 2222 22
# ターミナル 2
make cfw_install
# または: make cfw_install_jb        # 脱獄バリアント

初回起動

ターミナル 1 の DFU 起動を停止しCtrl+C、以下を実行します

make boot

cfw_install_jb 実行後、脱獄バリアントでは初回起動時に SileoTrollStore が利用可能になります。Sileo から openssh-server をインストールして SSH アクセスを有効にできます。

通常版/開発版では、VM に直接繋がるコンソールが開きます。bash-4.4# と表示されたら、Enter を押し、シェル環境を初期化して SSH ホストキーを生成するために以下のコマンドを実行します:

export PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11:/usr/games:/iosbinpack64/usr/local/sbin:/iosbinpack64/usr/local/bin:/iosbinpack64/usr/sbin:/iosbinpack64/usr/bin:/iosbinpack64/sbin:/iosbinpack64/bin'

mkdir -p /var/dropbear
cp /iosbinpack64/etc/profile /var/profile
cp /iosbinpack64/etc/motd /var/motd

# SSHホストキーの生成SSHを機能させるために必要
dropbearkey -t rsa -f /var/dropbear/dropbear_rsa_host_key
dropbearkey -t ecdsa -f /var/dropbear/dropbear_ecdsa_host_key

shutdown -h now

注意: ホストキー生成手順を行わないと、dropbearSSH サーバーは接続を受け付けますが、SSH ハンドシェイクを実行するためのキーがないためすぐに切断されます。

2回目以降の起動

make boot

別のターミナルで iproxy トンネルを開始します:

iproxy 22222 22222   # SSHdropbear
iproxy 2222 22       # SSH脱獄版Sileo で openssh-server を入れた場合)
iproxy 5901 5901     # VNC
iproxy 5910 5910     # RPC

以下で接続します:

  • SSH脱獄版: ssh -p 2222 mobile@127.0.0.1 (パスワード: alpine)
  • SSH通常版/開発版): ssh -p 2222 root@127.0.0.1 (パスワード: alpine)
  • VNC: vnc://127.0.0.1:5901
  • RPC: rpcclient -p 5910 127.0.0.1

よくある質問 (FAQ)

何よりもまず — git pull を実行して最新バージョンであることを確認してください

Q: 実行しようとすると zsh: killed ./vphone-cli と表示されます

AMFI/デバッグ制限が正しくバイパスされていません。以下のいずれかの方法を選択してください:

  • 方法 1AMFI を完全に無効化):

    sudo nvram boot-args="amfi_get_out_of_my_way=1 -v"
    
  • 方法 2デバッグ制限のみ無効化 復旧モードで csrutil enable --without debug(完全な SIP 無効化は不要)を使用し、amfidont をインストール/ロードして AMFI のその他の機能は有効のままにします。

Q: システムアプリApp Store、メッセージなどがダウンロード・インストールできません

iOS の初期設定時に、地域として日本または欧州連合を選択しないでください。これらの地域では追加の規制チェック(サイドローディングの開示、カメラのシャッター音など)が適用されますが、仮想マシンではこれらの要件を満たせないため、システムアプリのダウンロードおよびインストールができなくなります。この問題を回避するには、他の地域(例: 米国)を選択してください。

Q: "Press home to continue" の画面から進めません

VNC経由で接続しvnc://127.0.0.1:5901、画面の任意の場所を右クリックMac のトラックパッドでは 2 本指クリック)してください。これによりホームボタンの押下がシミュレートされます。

Q: SSH アクセスを有効にするには?

Sileo から openssh-server をインストールしてください(脱獄バリアントの初回起動後に利用可能)。

Q: openssh-server をインストールしても SSH が動作しません。

VM を再起動してください。次回起動時に SSH サーバーが自動的に開始されます。

Q: .tipa ファイルをインストールできますか?

はい。インストールメニューは .ipa.tipa パッケージの両方に対応しています。ドラッグ&ドロップまたはファイルピッカーを使用してください。

Q: もっと新しいiOSバージョンにアップデートできますか

はい。fw_prepare に希望するバージョンの IPSW URL を指定することでできます:

export IPHONE_SOURCE=/path/to/some_os.ipsw
export CLOUDOS_SOURCE=/path/to/some_os.ipsw
make fw_prepare
make fw_patch

私たちのパッチは静的なオフセットではなくバイナリ解析によって適用されるため、新しいバージョンでも動作するはずです。何か壊れた場合は AI に聞いてください。

謝辞