Lakr233/vphone-cli
vphone-cli — Apple Virtualization.framework로 가상 iPhone을 부팅하는 CLI 도구
Apple Silicon Mac에서 Virtualization.framework와 PCC 리서치 VM 인프라를 활용해 실제 iOS를 구동하는 가상 iPhone을 만들어주는 오픈소스 CLI입니다. IPSW 다운로드부터 부트 체인 패치, DFU 리스토어, CFW 설치, 첫 부팅까지 한 명령으로 자동화하며, 패치 수준에 따라 'less'부터 완전 탈옥(jb)·연구용(exp)까지 다섯 단계 변형을 지원합니다.
- 주제
본문
vphone-cli는 Apple이 Private Cloud Compute(PCC) 보안 검증을 위해 공개한 리서치 VM 인프라를 활용해, Apple Silicon Mac 위에 가상 iPhone을 부팅하는 커맨드라인 도구입니다. GitHub에 오르며 주목받았고, iOS 보안 연구와 탈옥 커뮤니티에서 특히 관심을 받을 만한 프로젝트입니다.
동작 방식과 요구사항
호스트 환경으로는 Apple Silicon, macOS 15(Sequoia) 이상, Xcode와 iOS SDK(게스트 데몬인 vphoned를 크로스 컴파일하기 위함)가 필요합니다. 또한 unsigned 바이너리에 private PV=3 entitlement를 허용해야 하므로 SIP와 AMFI 완화가 요구됩니다. 완화 방법은 두 가지입니다. 첫째는 Recovery에서 csrutil disable과 csrutil allow-research-guests enable로 SIP를 완전히 끈 뒤 amfi_get_out_of_my_way=1 부트 인자를 설정하는 가장 관대한 방식이고, 둘째는 SIP를 켜둔 채 debug 기능만 해제하고 amfidont로 해당 바이너리만 허용 목록에 올려 AMFI를 시스템 전역으로는 유지하는 방식입니다.
사용 흐름
vphone-cli vm create myphone -V jb 한 줄이면 다운로드 → 패치 → DFU 리스토어 → CFW 설치 → 첫 부팅까지 전체 파이프라인이 실행됩니다. 단계별 수동 실행도 가능해, vm new로 빈 번들을 만들고 fw prepare로 IPSW를 내려받아 병합한 뒤 fw patch로 부트 체인을 패치하고, DFU 부팅 후 SHSH를 받아 리스토어하고, cfw install로 커스텀 펌웨어를 심은 뒤 정식 부팅하는 순서를 개별 명령으로 나눠 실행할 수 있습니다. APFS 클론(clone), zstd 기반보내기/가져오기(export/import), VM 목록과 정보 조회(--json 지원) 등 라이브러리 관리 기능도 갖췄습니다. 모든 데이터는 ~/.vphone/ 아래에 저장되며 $VPHONE_ROOT로 통째로 경로를 바꿀 수 있습니다.
다섯 가지 패치 변형
--variant로 선택하는 패치 단계가 이 도구의 핵심입니다. less(부트 체인 4개 패치)는 iOS 완화 기법을 유지하는 패치리스 수준이고, regular(42개)는 AMFI·SSV·Img4·TXM 우회를 포함하며, dev(53개)는 TXM entitlement와 디버그 우회를 추가하고, jb(113개)는 첫 부팅 시 Sileo와 TrollStore가 자동 설치되는 완전 탈옥이며, exp(141개)는 탈옥 상위 집합에 VM 탐지 회피 연구용 패치까지 더한 구성입니다. 리서치 문서에 컴포넌트별 패치 비교표가 함께 제공됩니다.
접속과 자동화
탈옥 변형에서는 ssh -p 22222 mobile@<vm-ip>(암호 alpine), regular/dev는 root로 SSH 접속이 가능하고, VNC는 vnc://<vm-ip>:5901로 연결됩니다. 특히 주목할 점은 VM 번들 안의 vphone.sock 호스트 제어 소켓으로 스크린샷, 터치, 스와이프, 하드웨어 키, 클립보드를 프로그래밍 방식으로 제어할 수 있으며, 각 액션이 인라인 스크린샷을 반환해 AI 기반 E2E 테스트에 쓸 수 있다는 것입니다. 이를 감싼 MCP 서버인 vphone-mcp도 별도 제공됩니다.
알려진 제약과 함정
VM 안에서는 중첩 가상화가 안 되므로 호스트가 실물 Mac이어야 하고, 설정 과정에서 일본이나 EU 지역을 선택하면 규제 검사를 통과하지 못해 시스템 앱이 설치되지 않습니다. 홈 버튼은 VNC에서 우클릭으로 시뮬레이션합니다. 또한 Homebrew stable의 ldid-procursus 2.1.5까지는 entitlement 값이 정확히 정수 0인 바이너리를 재서명할 때 무한 루프에 빠지는 알려진 버그가 있어, cfw install이 멈추면 --HEAD로 소스 빌드해야 합니다.
원문: GitHub / 번역·요약: Trawling