๐Ÿ‡ฐ๐Ÿ‡ทํ•œ๊ตญ์–ด | ๐Ÿ‡ฏ๐Ÿ‡ตๆ—ฅๆœฌ่ชž | ๐Ÿ‡จ๐Ÿ‡ณไธญๆ–‡ | ๐Ÿ‡ฌ๐Ÿ‡งEnglish
# vphone-cli PCC ๋ฆฌ์„œ์น˜ VM ์ธํ”„๋ผ์™€ Apple์˜ Virtualization.framework๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ€์ƒ iPhone(iOS 26)์„ ๋ถ€ํŒ…ํ•ฉ๋‹ˆ๋‹ค. ![poc](./demo.png) ## ํ…Œ์ŠคํŠธ๋œ ํ™˜๊ฒฝ | Host | 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` | ## ํŽŒ์›จ์–ด ๋ณ€ํ˜• ๋ณด์•ˆ ์šฐํšŒ ์ˆ˜์ค€์ด ๋‹ค๋ฅธ 3๊ฐ€์ง€ ํŒจ์น˜ ๋ณ€ํ˜•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: | ๋ณ€ํ˜• | ๋ถ€ํŠธ ์ฒด์ธ | CFW | Make ํƒ€๊ฒŸ | | -------------- | :-------: | :-------: | ---------------------------------- | | **์ผ๋ฐ˜** | 38 ํŒจ์น˜ | 10 ํŽ˜์ด์ฆˆ | `fw_patch` + `cfw_install` | | **๊ฐœ๋ฐœ** | 47 ํŒจ์น˜ | 12 ํŽ˜์ด์ฆˆ | `fw_patch_dev` + `cfw_install_dev` | | **ํƒˆ์˜ฅ (WIP)** | 84 ํŒจ์น˜ | 14 ํŽ˜์ด์ฆˆ | `fw_patch_jb` + `cfw_install_jb` | ์ปดํฌ๋„ŒํŠธ๋ณ„ ์ƒ์„ธ ๋ถ„๋ฅ˜๋Š” [research/patch_comparison_all_variants.md](../research/patch_comparison_all_variants.md)๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”. ## ์‚ฌ์ „ ์š”๊ตฌ ์‚ฌํ•ญ **ํ˜ธ์ŠคํŠธ OS:** PV=3 ๊ฐ€์ƒํ™”๋ฅผ ์œ„ํ•ด macOS 15+(Sequoia)๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. **SIP ๋ฐ AMFI ๋น„ํ™œ์„ฑํ™”** โ€” Private Virtualization.framework ๊ถŒํ•œ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ณต๊ตฌ ๋ชจ๋“œ(์ „์› ๋ฒ„ํŠผ ๊ธธ๊ฒŒ ๋ˆ„๋ฅด๊ธฐ)๋กœ ๋ถ€ํŒ…ํ•œ ํ›„ ํ„ฐ๋ฏธ๋„์„ ์—ฝ๋‹ˆ๋‹ค: ```bash csrutil disable csrutil allow-research-guests enable ``` macOS๋กœ ๋‹ค์‹œ ์‹œ์ž‘ํ•œ ํ›„: ```bash sudo nvram boot-args="amfi_get_out_of_my_way=1 -v" ``` ํ•œ ๋ฒˆ ๋” ์žฌ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. **์˜์กด์„ฑ(Dependencies) ์„ค์น˜:** ```bash brew install ideviceinstaller wget gnu-tar openssl@3 ldid-procursus sshpass keystone autoconf automake pkg-config libtool ``` **Submodules** โ€” ์ด ์ €์žฅ์†Œ๋Š” ๋ฆฌ์†Œ์Šค ์•„์นด์ด๋ธŒ๋ฅผ ์œ„ํ•ด git submodule์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํด๋ก  ์‹œ ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”: ```bash git clone --recurse-submodules https://github.com/Lakr233/vphone-cli.git ``` ## ๋น ๋ฅธ ์‹œ์ž‘ ```bash make setup_machine # "First Boot"๊นŒ์ง€์˜ ์ „์ฒด ๊ณผ์ • ์ž๋™ํ™” (๋ณต์›/Ramdisk/์ปค์Šคํ…€ ํŽŒ์›จ์–ด ํฌํ•จ) ``` ## ์ˆ˜๋™ ์„ค์ • ```bash make setup_tools # brew ์˜์กด์„ฑ ์„ค์น˜, trustcache + libimobiledevice ๋นŒ๋“œ, Python venv ์ƒ์„ฑ make build # vphone-cli ๋นŒ๋“œ ๋ฐ ์„œ๋ช… make vm_new # vm/ ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ (ROM, ๋””์Šคํฌ, SEP ์ €์žฅ์†Œ) make fw_prepare # IPSW ๋‹ค์šด๋กœ๋“œ, ์ถ”์ถœ, ๋ณ‘ํ•ฉ, manifest ์ƒ์„ฑ make fw_patch # ๋ถ€ํŠธ ์ฒด์ธ ํŒจ์น˜ (์ผ๋ฐ˜ ๋ณ€ํ˜•) # ๋˜๋Š”: make fw_patch_dev # ๊ฐœ๋ฐœ ๋ณ€ํ˜• (+ TXM ๊ถŒํ•œ/๋””๋ฒ„๊ทธ ์šฐํšŒ) # ๋˜๋Š”: make fw_patch_jb # ํƒˆ์˜ฅ ๋ณ€ํ˜• (+ ์ „์ฒด ๋ณด์•ˆ ์šฐํšŒ) (WIP) ``` ## ๋ณต์› ๋ณต์› ํ”„๋กœ์„ธ์Šค๋ฅผ ์œ„ํ•ด **๋‘ ๊ฐœ์˜ ํ„ฐ๋ฏธ๋„**์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ํ„ฐ๋ฏธ๋„ 2๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋™์•ˆ ํ„ฐ๋ฏธ๋„ 1์„ ๊ณ„์† ์‹คํ–‰ ์ƒํƒœ๋กœ ๋‘์„ธ์š”. ```bash # ํ„ฐ๋ฏธ๋„ 1 make boot_dfu # VM์„ DFU ๋ชจ๋“œ๋กœ ๋ถ€ํŒ… (๊ณ„์† ์‹คํ–‰ ์œ ์ง€) ``` ```bash # ํ„ฐ๋ฏธ๋„ 2 make restore_get_shsh # SHSH blob ๊ฐ€์ ธ์˜ค๊ธฐ make restore # idevicerestore๋ฅผ ํ†ตํ•ด ํŽŒ์›จ์–ด ํ”Œ๋ž˜์‹ฑ ``` ## ์ปค์Šคํ…€ ํŽŒ์›จ์–ด ์„ค์น˜ ํ„ฐ๋ฏธ๋„ 1์˜ DFU ๋ถ€ํŒ…์„ ์ค‘๋‹จ(Ctrl+C)ํ•œ ๋‹ค์Œ, ๋žจ๋””์Šคํฌ๋ฅผ ์œ„ํ•ด ๋‹ค์‹œ DFU๋กœ ๋ถ€ํŒ…ํ•ฉ๋‹ˆ๋‹ค: ```bash # ํ„ฐ๋ฏธ๋„ 1 make boot_dfu # ๊ณ„์† ์‹คํ–‰ ์œ ์ง€ ``` ```bash # ํ„ฐ๋ฏธ๋„ 2 make ramdisk_build # ์„œ๋ช…๋œ SSH ๋žจ๋””์Šคํฌ ๋นŒ๋“œ make ramdisk_send # ์žฅ์น˜๋กœ ์ „์†ก ``` ๋žจ๋””์Šคํฌ๊ฐ€ ์‹คํ–‰๋˜๋ฉด(์ถœ๋ ฅ์— `Running server`๊ฐ€ ํ‘œ์‹œ๋จ), **์„ธ ๋ฒˆ์งธ ํ„ฐ๋ฏธ๋„**์„ ์—ด์–ด iproxy ํ„ฐ๋„์„ ์‹œ์ž‘ํ•œ ํ›„, ํ„ฐ๋ฏธ๋„ 2์—์„œ ์ปค์Šคํ…€ ํŽŒ์›จ์–ด๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค: ```bash # ํ„ฐ๋ฏธ๋„ 3 โ€” ๊ณ„์† ์‹คํ–‰ ์œ ์ง€ iproxy 2222 22 ``` ```bash # ํ„ฐ๋ฏธ๋„ 2 make cfw_install ``` ## ์ฒซ ๋ถ€ํŒ… ํ„ฐ๋ฏธ๋„ 1์˜ DFU ๋ถ€ํŒ…์„ ์ค‘๋‹จ(Ctrl+C)ํ•œ ํ›„ ๋‹ค์Œ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค: ```bash make boot ``` ๊ทธ๋Ÿฌ๋ฉด VM์—์„œ **direct console**์ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. `bash-4.4#`์ด ๋ณด์ด๋ฉด ์—”ํ„ฐ๋ฅผ ๋ˆ„๋ฅด๊ณ  ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์‰˜ ํ™˜๊ฒฝ์„ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  SSH ํ˜ธ์ŠคํŠธ ํ‚ค๋ฅผ ์ƒ์„ฑํ•˜์„ธ์š”: ```bash 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 ``` > **์ฐธ๊ณ :** ํ˜ธ์ŠคํŠธ ํ‚ค ์ƒ์„ฑ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š์œผ๋ฉด dropbear(SSH ์„œ๋ฒ„)๊ฐ€ ์—ฐ๊ฒฐ์„ ์ˆ˜๋ฝํ•˜๋”๋ผ๋„ SSH ํ•ธ๋“œ์…ฐ์ดํฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ํ‚ค๊ฐ€ ์—†์–ด ์ฆ‰์‹œ ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค. ## ์ดํ›„ ๋ถ€ํŒ… ```bash make boot ``` ๋ณ„๋„์˜ ํ„ฐ๋ฏธ๋„์—์„œ iproxy ํ„ฐ๋„์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค: ```bash iproxy 22222 22222 # SSH iproxy 5901 5901 # VNC iproxy 5910 5910 # RPC ``` ๋‹ค์Œ์„ ํ†ตํ•ด ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค: - **SSH:** `ssh -p 22222 root@127.0.0.1` (password: `alpine`) - **VNC:** `vnc://127.0.0.1:5901` - [**RPC:**](http://github.com/doronz88/rpc-project) `rpcclient -p 5910 127.0.0.1` ## FAQ > **๋ฌด์—‡๋ณด๋‹ค ๋จผ์ € โ€” `git pull`์„ ์‹คํ–‰ํ•˜์—ฌ ์ตœ์‹  ๋ฒ„์ „์ธ์ง€ ํ™•์ธํ•˜์„ธ์š”.** **Q: ์‹คํ–‰ํ•˜๋ ค๊ณ  ํ•˜๋ฉด `zsh: killed ./vphone-cli` ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.** AMFI๊ฐ€ ๋น„ํ™œ์„ฑํ™”๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. boot-arg๋ฅผ ์„ค์ •ํ•˜๊ณ  ์žฌ์‹œ์ž‘ํ•˜์„ธ์š”: ```bash sudo nvram boot-args="amfi_get_out_of_my_way=1 -v" ``` **Q: ์‹œ์Šคํ…œ ์•ฑ(App Store, ๋ฉ”์‹œ์ง€ ๋“ฑ)์„ ๋‹ค์šด๋กœ๋“œํ•˜๊ฑฐ๋‚˜ ์„ค์น˜ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.** iOS ์ดˆ๊ธฐ ์„ค์ • ์‹œ ์ง€์—ญ์„ **์ผ๋ณธ** ๋˜๋Š” **์œ ๋Ÿฝ ์—ฐํ•ฉ**์œผ๋กœ ์„ ํƒํ•˜์ง€ **๋งˆ์„ธ์š”**. ์ด ์ง€์—ญ์—์„œ๋Š” ์ถ”๊ฐ€์ ์ธ ๊ทœ์ œ ๊ฒ€์‚ฌ(์‚ฌ์ด๋“œ๋กœ๋”ฉ ๊ณต๊ฐœ, ์นด๋ฉ”๋ผ ์…”ํ„ฐ์Œ ๋“ฑ)๊ฐ€ ์ ์šฉ๋˜๋Š”๋ฐ, ๊ฐ€์ƒ ๋จธ์‹ ์€ ์ด๋Ÿฌํ•œ ์š”๊ฑด์„ ์ถฉ์กฑํ•  ์ˆ˜ ์—†์–ด ์‹œ์Šคํ…œ ์•ฑ์˜ ๋‹ค์šด๋กœ๋“œ ๋ฐ ์„ค์น˜๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ”ผํ•˜๋ ค๋ฉด ๋‹ค๋ฅธ ์ง€์—ญ(์˜ˆ: ๋ฏธ๊ตญ)์„ ์„ ํƒํ•˜์„ธ์š”. **Q: "Press home to continue" ํ™”๋ฉด์—์„œ ๋ฉˆ์ท„์Šต๋‹ˆ๋‹ค.** VNC(`vnc://127.0.0.1:5901`)๋กœ ์ ‘์†ํ•˜์—ฌ ํ™”๋ฉด์˜ ์•„๋ฌด ๊ณณ์ด๋‚˜ ์šฐํด๋ฆญ(Mac ํŠธ๋ž™ํŒจ๋“œ์—์„œ๋Š” ๋‘ ์†๊ฐ€๋ฝ ํด๋ฆญ)ํ•˜์„ธ์š”. ์ด๊ฒƒ์ด ํ™ˆ ๋ฒ„ํŠผ ๋ˆ„๋ฅด๊ธฐ๋ฅผ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•ฉ๋‹ˆ๋‹ค. **Q: SSH๊ฐ€ ์—ฐ๊ฒฐ๋˜์ž๋งˆ์ž ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค (`Connection closed by 127.0.0.1`).** ์ฒซ ๋ถ€ํŒ… ์‹œ Dropbear ํ˜ธ์ŠคํŠธ ํ‚ค๊ฐ€ ์ƒ์„ฑ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. VNC๋‚˜ `make boot` ์ฝ˜์†”์„ ํ†ตํ•ด ์—ฐ๊ฒฐํ•˜์—ฌ ๋‹ค์Œ์„ ์‹คํ–‰ํ•˜์„ธ์š”: ```bash 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 dropbearkey -t rsa -f /var/dropbear/dropbear_rsa_host_key dropbearkey -t ecdsa -f /var/dropbear/dropbear_ecdsa_host_key killall dropbear dropbear -R -p 22222 ``` **Q: ์ตœ์‹  iOS ๋ฒ„์ „์œผ๋กœ ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๋‚˜์š”?** ๋„ค. `fw_prepare`๋ฅผ ์›ํ•˜๋Š” ๋ฒ„์ „์˜ IPSW URL๋กœ ๋ฎ์–ด์“ฐ์„ธ์š”: ```bash export IPHONE_SOURCE=/path/to/some_os.ipsw export CLOUDOS_SOURCE=/path/to/some_os.ipsw make fw_prepare make fw_patch ``` ์ €ํฌ์˜ ํŒจ์น˜๋Š” ์ •์  ์˜คํ”„์…‹์ด ์•„๋‹Œ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ถ„์„์„ ํ†ตํ•ด ์ ์šฉ๋˜๋ฏ€๋กœ, ์ตœ์‹  ๋ฒ„์ „์—์„œ๋„ ์ž‘๋™ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋งŒ์•ฝ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด AI์—๊ฒŒ ๋„์›€์„ ์š”์ฒญํ•˜์„ธ์š”. ## ๊ฐ์‚ฌ ์ธ์‚ฌ - [wh1te4ever/super-tart-vphone-writeup](https://github.com/wh1te4ever/super-tart-vphone-writeup)