編按:本文綜合整理自 vphone-cli GitHub Repo、wh1te4ever 的 super-tart-vphone 技術 writeup、Hacker News 討論串,並加入 Siami 編輯部觀點與分析。
這件事在講什麼
開發者 Lakr233(@Lakr233)這個週末丟出了一個開源工具 vphone-cli,讓 Apple Silicon Mac 透過 Apple 自家的 Virtualization.framework 直接跑一個虛擬 iPhone。一行指令 vphone-cli vm create myphone -V jb 就能下載 IPSW、打 patch、做 DFU restore、安裝客製化 firmware、首次開機,全部自動化。
這個專案在 Hacker News 上架不到 24 小時就衝到 143 分、45 則留言,討論度集中在「這跟 Corellium 有什麼不同」「Apple 為什麼自己提供 kernel」「這對資安研究跟 AI Agent 測試有什麼意義」三條線。
跟 Corellium 不同的是:Apple 自己提供了給 Virtualization.framework 用的 iOS kernel(藏在 PCC / cloudOS 映像檔裡),vphone-cli 只是把 iOS user-space 跟必要的 patch 拼起來跑。HN 第一則留言 m132 點出關鍵差異:「應用程式其實可以很容易分辨出來這不是實體機器」——所以這工具是資安研究、jailbreak 開發、AI Agent E2E 測試用途,不是要拿來繞過 Apple 的反詐欺偵測。
系統需求比想像的嚴苛
這個專案不是普通開發者玩具,環境門檻很高:
- 硬體:Apple Silicon Mac(必須是 bare-metal,虛擬機裡的 macOS 不能 nest PV=3 guest)
- 系統:macOS 15+(Sequoia)
- 工具:Xcode + iOS SDK(會 cross-compile guest daemon)
- 核心要求:要放寬 SIP/AMFI,因為需要 private PV=3 entitlements 跟 unsigned binary 支援
兩條放寬路徑:
- 完全關閉 SIP + AMFI boot-arg:進 Recovery 跑
csrutil disable+csrutil allow-research-guests enable,回到 macOS 設amfi_get_out_of_my_way=1boot-arg - 保留 SIP 但用 amfidont allowlist:
csrutil enable --without debug+ 跑vphone-amfidont
官方 README 列出的測試環境相容性表顯示,目前能在 Mac16,11 / Mac16,8 / Mac16,12 / Mac16,6 這幾款 Mac 上跑,涵蓋 iPhone 17,3(iOS 18.6.2 到 27.0)配 cloudOS 26.1 到 26.4 的組合。也就是說,這不是「什麼 Mac 都能跑」,對硬體型號有對應限制。
五種 firmware 變體:從 patchless 到 full jailbreak
vphone-cli 提供 --variant 參數切換五種 firmware 安全性繞過強度,這是整個專案設計最巧的地方:
| Variant | Boot Chain Patches | CFW Phases | 用途 |
|---|---|---|---|
less | 4 | 2 | Patchless,保留 iOS 防護機制 |
regular | 42 | 10 | AMFI/SSV/Img4/TXM 繞過 |
dev | 53 | 12 | + TXM entitlement/debug 繞過 |
jb | 113 | 14 | + 完整 jailbreak(Sileo、TrollStore 自動裝) |
exp | 141 | 18 | JB superset + 反 VM 偵測研究用 |
從 patchless 到 full jailbreak 加 EXP 變體,patch 數量級距從 4 到 141,覆蓋度驚人。對於資安研究員,可以從最不破壞的 less 開始測 VM 行為,再逐步推到 exp 跑完整 anti-VM-detection 研究。
對開發者的隱含訊號:Apple 內建的虛擬化框架本來就設計成「讓你有方法跑 iOS」(這從 Virtualization.framework 的 PV=3 guest 支援就看得出來),但實作上需要非常多 patch 才能讓 user-space 正常運作,這個專案把 patch 工程全部模組化了。
不只是測試機:MCP 自動化控制
這個專案另一個亮點是 host control socket(<bundle>/vphone.sock),讓外部程式可以程式化控制虛擬 iPhone——截圖、觸控、滑動、硬體按鍵、剪貼簿,每個動作都會回傳一張螢幕截圖。
社群已經有人基於這個 socket 包了一個 MCP server:pluginslab/vphone-mcp,讓 AI Agent 可以直接用 MCP 工具驅動虛擬 iPhone 跑 E2E 測試。這個組合對 iOS App 開發者意義重大:
- CI/CD 自動化:GitHub Actions 跑 Mac mini(Apple Silicon)+ vphone-cli + MCP = 雲端跑 iOS UI 測試
- AI Agent 開發:Claude / GPT 等 Agent 透過 MCP 真的能操作 iOS App,不只是 Web
- 研究重現性:資安研究員可以把 exploit 測試環境整個打包成
.tzst(zstd 壓縮 VM image)分享
README 寫到 --max = xz -9 的匯出選項,是為了解決「VM image 太大不方便分享」的問題——做研究的人可以把整個 state 打包,跨機器重現實驗。
為什麼這件事重要
iOS 一直是研究跟自動化測試的最難搞平台。過去只有兩個選擇:
- 買實體機 + jailbreak——成本高、難以規模化、每次 iOS 更新要重 jailbreak
- Corellium 商業服務——年費制、研究倫理爭議、closed source
vphone-cli 開源之後出現了第三條路:Apple 自家框架 + 開源 patch + Apple Silicon Mac(USD 599 起的 Mac mini Air 就能跑)。這對三個族群直接受惠:
- 資安研究員:可以重現 iOS 漏洞、跑 patch A/B testing、做漏洞獎金研究
- iOS 開發者:可以 CI/CD 跑 UI 測試,不用依賴雲端 Mac farm
- AI Agent 工程師:可以訓練 / 評測 Agent 操作 iOS App 的能力
這也是 Apple 對歐盟 DMA 跟日本智慧手機法案的隱性回應——既然法律要求開放 sideload,那至少把「VM 跑 iOS」這條路開給開發者社群,減少商業服務(Corellium)壟斷 iOS 研究生態。
當然,代價是應用程式可以偵測得到 VM(HN 留言 m132:「Applications can very easily tell it apart from the real thing」),所以這個工具不是要繞過反詐欺,而是推進研究跟自動化。
數據解讀 / 質疑
從 HN 數據看這篇討論的結構:
- 143 分 / 45 則留言 / 24 小時內——對純開發者工具來說是中等偏高的熱度
- 最多被引用的兩個關鍵字:「Corellium 比較」(8 則)、「PCC / cloudOS 是什麼」(5 則)——顯示社群對「Apple 為什麼有 PCC 映像檔」最有興趣
- 爭議焦點:HN 討論串第 2-4 則留言圍繞在開發者 wh1te4ever 帳號名稱爭議,但這跟技術無關,Siami 編輯部判斷為社群文化衝突,不深入報導
值得質疑的點:
- Apple 是否會修補 PV=3 guest kernel 路徑? 如果 Apple 把這個關閉,整個 vphone-cli 會失效——這也是開源專案最大的風險
- 應用程式偵測能力:iOS App 用什麼特徵判斷「我在 VM」?這個專案的
expvariant 試圖反制,但能撐多久? - 「完全關閉 SIP」的安全成本:對一般 Mac 使用者來說,這個工具強迫關閉 AMFI,會降低 macOS 整體安全性——是否值得?
技術上有趣的 FAQ 細節:專案踩到 ldid-procursus 2.1.5 的 UB bug(__builtin_clzll(0) 沒 zero-guard,導致迴圈 underflow 變成無窮寫入),原因是 Apple 系統 binary 的 entitlements plist 裡有整數值剛好是 0。已修但還沒 stable release,使用者要自己 brew install --HEAD ldid-procursus。
安裝門檻跟現實限制
如果你想自己跑,下面是現實時間成本估算:
brew install zqxwce/tap/vphone-cli
vphone-cli vm create myphone -V jb
vphone-cli vm launch myphone
但前面還有:
./scripts/setup_tools.sh # 裝依賴、build toolchain submodules、建 Python venv
./scripts/build.sh # build + sign vphone-cli、打 .app、cross-compile vphoned
第一次跑大概 30-60 分鐘(下載 IPSW + patch + restore + 首次開機)。後續啟動只要幾秒。
對台灣開發者的現實限制:台灣 Apple Silicon Mac 普及率比想像中低,多數人還在 Intel Mac。這專案完全沒辦法跑在 Intel Mac,等於是個 Apple Silicon 限定福利。
延伸資源
- 官方 repo:github.com/Lakr233/vphone-cli
- 技術 writeup:github.com/wh1te4ever/super-tart-vphone-writeup(解釋 PCC / cloudOS kernel 怎麼運作)
- MCP 自動化 server:github.com/pluginslab/vphone-mcp(AI Agent E2E 測試用)
- HN 討論串:news.ycombinator.com/item?id=49485267
研究團隊如果要把 VM 整包分享出去,可以直接 vphone-cli vm export myphone --out myphone.tzst(zstd 預設,--max 切到 xz -9),跨機器重現實驗。
網友熱門留言 (3)