vphone-cli

May 24, 2026 ยท View on GitHub

๐Ÿ‡ฐ๐Ÿ‡ทํ•œ๊ตญ์–ด | ๐Ÿ‡ฏ๐Ÿ‡ตๆ—ฅๆœฌ่ชž | ๐Ÿ‡จ๐Ÿ‡ณไธญๆ–‡ | ๐Ÿ‡ฌ๐Ÿ‡งEnglish

vphone-cli

PCC ๋ฆฌ์„œ์น˜ VM ์ธํ”„๋ผ์™€ Apple์˜ Virtualization.framework๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ€์ƒ iPhone(iOS 26)์„ ๋ถ€ํŒ…ํ•ฉ๋‹ˆ๋‹ค.

poc

ํ…Œ์ŠคํŠธ๋œ ํ™˜๊ฒฝ

HostiPhoneCloudOS
Mac16,12 26.317,3_26.1_23B8526.1-23B85
Mac16,12 26.317,3_26.3_23D12726.1-23B85
Mac16,12 26.317,3_26.3_23D12726.3-23D128
Mac16,12 26.317,3_26.3.1_23D813326.3-23D128
Mac16,11 26.217,3_26.4_23E24626.4-23E5207q
Mac16,11 26.217,3_26.5_23F7726.4-23E5207q

ํŽŒ์›จ์–ด ๋ณ€ํ˜•

๋ณด์•ˆ ์šฐํšŒ ์ˆ˜์ค€์ด ๋‹ค๋ฅธ 5๊ฐ€์ง€ ํŒจ์น˜ ๋ณ€ํ˜•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

๋ณ€ํ˜•๋ถ€ํŠธ ์ฒด์ธCFWMake ํƒ€๊ฒŸ
Patchless4 ํŒจ์น˜2 ํŽ˜์ด์ฆˆfw_patch_less + boot_less
์ผ๋ฐ˜42 ํŒจ์น˜10 ํŽ˜์ด์ฆˆfw_patch + cfw_install
๊ฐœ๋ฐœ53 ํŒจ์น˜12 ํŽ˜์ด์ฆˆfw_patch_dev + cfw_install_dev
ํƒˆ์˜ฅ113 ํŒจ์น˜14 ํŽ˜์ด์ฆˆfw_patch_jb + cfw_install_jb
์‹คํ—˜ํƒˆ์˜ฅ + EXP ์ „์šฉํƒˆ์˜ฅ + EXPfw_patch_exp + cfw_install_exp

JB ์ตœ์ข… ์„ค์ •(์‹ฌ๋ณผ๋ฆญ ๋งํฌ, Sileo, apt, TrollStore)์€ /cores/vphone_jb_setup.sh LaunchDaemon์„ ํ†ตํ•ด ์ฒซ ๋ฒˆ์งธ ๋ถ€ํŒ… ์‹œ ์ž๋™์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ์ง„ํ–‰ ์ƒํ™ฉ ํ™•์ธ: /var/log/vphone_jb_setup.log.

์‹คํ—˜(EXP) ๋ณ€ํ˜•์€ ํƒˆ์˜ฅ ๋ณ€ํ˜•์˜ ์ƒ์œ„ ์ง‘ํ•ฉ์œผ๋กœ, ์—ฐ๊ตฌ ๋ธŒ๋žœ์น˜์˜ ์‹คํ—˜์  ํŒจ์น˜๋ฅผ ์ถ”๊ฐ€๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค: ์ปค๋„ hv_vmm_present sysctl ์ด๋ฆ„ ๋ณ€๊ฒฝ + ์ปค๋„ ๋‚ด๋ถ€ ํ˜ธ์ถœ์ž ๋ณ€์กฐ(KernelEXPPatcher), ๋กœ๊ทธ์ธ ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ๊ฐ€ ์žˆ๋Š” DSC ๋ฐ”์ดํŠธ 5 ๋ณ€์กฐ + ์Šฌ๋กฏ ์žฌ์ธ์ฆ, watchdogd ์ •๋ฐ€ 2๊ฐœ ๋ช…๋ น์–ด ํŒจ์น˜(EXP-JB-3.5), ํŽŒ์›จ์–ด ํŒจ์น˜ ๋‹จ๊ณ„์˜ DeviceTree ์‹๋ณ„ ์†์„ฑ 8๊ฐœ, ๋ณต์› ํ›„ DT ์‹๋ณ„ ์žฌ์ž‘์„ฑ(EXP-JB-6), ๊ทธ๋ฆฌ๊ณ  SPOOF_BUILD=<id>๋ฅผ ํ†ตํ•œ ์˜ตํŠธ์ธ SystemVersion.plist ProductBuildVersion ์žฌ์ž‘์„ฑ(EXP-JB-7). ๋‹ค๋ฅธ ๋ณ€ํ˜•์€ ์˜๋„์ ์œผ๋กœ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ปดํฌ๋„ŒํŠธ๋ณ„ ์ƒ์„ธ ๋ถ„๋ฅ˜๋Š” research/0_binary_patch_comparison.md๋ฅผ ์ฐธ์กฐํ•˜์„ธ์š”.

์‚ฌ์ „ ์š”๊ตฌ ์‚ฌํ•ญ

ํ˜ธ์ŠคํŠธ OS: PV=3 ๊ฐ€์ƒํ™”๋ฅผ ์œ„ํ•ด macOS 15+(Sequoia)๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

SIP/AMFI ์„ค์ • โ€” Private Virtualization.framework ๊ถŒํ•œ๊ณผ ์„œ๋ช…๋˜์ง€ ์•Š์€ ๋ฐ”์ด๋„ˆ๋ฆฌ ์›Œํฌํ”Œ๋กœ์šฐ์— ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋ณต๊ตฌ ๋ชจ๋“œ(์ „์› ๋ฒ„ํŠผ ๊ธธ๊ฒŒ ๋ˆ„๋ฅด๊ธฐ)๋กœ ๋ถ€ํŒ…ํ•œ ํ›„ ํ„ฐ๋ฏธ๋„์„ ์—ด๊ณ , ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค:

  • ๋ฐฉ๋ฒ• 1: SIP ์™„์ „ ๋น„ํ™œ์„ฑํ™” + AMFI boot-arg (๊ฐ€์žฅ ๊ด€๋Œ€)

    ๋ณต๊ตฌ ๋ชจ๋“œ์—์„œ:

    csrutil disable
    csrutil allow-research-guests enable
    

    macOS๋กœ ๋‹ค์‹œ ์‹œ์ž‘ํ•œ ํ›„:

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

    ํ•œ ๋ฒˆ ๋” ์žฌ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

  • ๋ฐฉ๋ฒ• 2: SIP์€ ๋Œ€๋ถ€๋ถ„ ํ™œ์„ฑ ์œ ์ง€, ๋””๋ฒ„๊ทธ ์ œํ•œ๋งŒ ๋น„ํ™œ์„ฑํ™”, amfidont ๋˜๋Š” amfree ์‚ฌ์šฉ

    ๋ณต๊ตฌ ๋ชจ๋“œ์—์„œ:

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

    macOS๋กœ ๋‹ค์‹œ ์‹œ์ž‘ํ•œ ํ›„:

    # amfidont ์‚ฌ์šฉ:
    xcrun python3 -m pip install amfidont
    sudo amfidont --path [PATH_TO_VPHONE_DIR]
    
    # ๋˜๋Š” amfree ์‚ฌ์šฉ:
    brew install retX0/tap/amfree
    sudo amfree --path [PATH_TO_VPHONE_DIR]
    

    ์ด ์ €์žฅ์†Œ์—์„œ๋Š” make amfidont_allow_vphone์œผ๋กœ amfidont์— ํ•„์š”ํ•œ ์ธ์ฝ”๋”ฉ ๊ฒฝ๋กœ์™€ CDHash ํ—ˆ์šฉ ์„ค์ •์„ ํ•œ ๋ฒˆ์— ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Patchless ๋ณ€ํ˜•์€ ๋ฐฉ๋ฒ• 1 ๋˜๋Š” -S ํ”Œ๋ž˜๊ทธ๋ฅผ ํฌํ•จํ•œ amfidont(sudo amfidont -S --path [PATH_TO_VPHONE_DIR])๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์˜์กด์„ฑ(Dependencies) ์„ค์น˜:

brew install aria2 wget gnu-tar openssl@3 ldid-procursus sshpass keystone libusb ipsw zstd

scripts/fw_prepare.sh ๋Š” ๋” ๋น ๋ฅธ ๋‹ค์ค‘ ์—ฐ๊ฒฐ ๋‹ค์šด๋กœ๋“œ๋ฅผ ์œ„ํ•ด aria2c ๋ฅผ ์šฐ์„  ์‚ฌ์šฉํ•˜๊ณ , ํ•„์š”ํ•˜๋ฉด curl ๋˜๋Š” wget ์œผ๋กœ ํด๋ฐฑํ•ฉ๋‹ˆ๋‹ค.

Submodules โ€” ์ด ์ €์žฅ์†Œ๋Š” ๋ฆฌ์†Œ์Šค, Swift ์˜์กด์„ฑ, scripts/repos/ ์•„๋ž˜ ํˆด์ฒด์ธ ์†Œ์Šค๋ฅผ git submodule๋กœ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ํด๋ก  ์‹œ ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”:

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

๋น ๋ฅธ ์‹œ์ž‘

make setup_machine            # "First Boot"๊นŒ์ง€์˜ ์ „์ฒด ๊ณผ์ • ์ž๋™ํ™” (๋ณต์›/Ramdisk/์ปค์Šคํ…€ ํŽŒ์›จ์–ด ํฌํ•จ)
# ์˜ต์…˜: NONE_INTERACTIVE=1 SUDO_PASSWORD=...
# LESS=1 Patchless ๋ณ€ํ˜• (- AMFI, SSV, Img4, TXM ์šฐํšŒ)
# DEV=1 ๊ฐœ๋ฐœ ๋ณ€ํ˜• (+ TXM ๊ถŒํ•œ/๋””๋ฒ„๊ทธ ์šฐํšŒ)
# JB=1 ํƒˆ์˜ฅ ๋ณ€ํ˜• (dev + ์ „์ฒด ๋ณด์•ˆ ์šฐํšŒ)
# EXP=1 ์‹คํ—˜ ๋ณ€ํ˜• (ํƒˆ์˜ฅ + ์—ฐ๊ตฌ ํŒจ์น˜: hv_vmm ์ด๋ฆ„ ๋ณ€๊ฒฝ, DT ์‹๋ณ„, ๋ณต์› ํ›„ ์žฌ์ž‘์„ฑ)
# SPOOF_BUILD=<id> (EXP ์ „์šฉ) SystemVersion.plist์˜ ProductBuildVersion์„ <id>๋กœ ์žฌ์ž‘์„ฑ, ์˜ˆ: 23F77

์ˆ˜๋™ ์„ค์ •

make setup_tools              # brew ์˜์กด์„ฑ ์„ค์น˜, trustcache + insert_dylib ๋นŒ๋“œ, Python venv ์ƒ์„ฑ(pymobiledevice3/aria2c ํฌํ•จ)
make build                    # vphone-cli ๋นŒ๋“œ ๋ฐ ์„œ๋ช…
make vm_new                   # VM ๋””๋ ‰ํ† ๋ฆฌ ๋ฐ ๋งค๋‹ˆํŽ˜์ŠคํŠธ(config.plist) ์ƒ์„ฑ
# ์˜ต์…˜: CPU=8 MEMORY=8192 DISK_SIZE=64
make fw_prepare               # IPSW ๋‹ค์šด๋กœ๋“œ, ์ถ”์ถœ, ๋ณ‘ํ•ฉ, manifest ์ƒ์„ฑ
make fw_patch                 # ๋ถ€ํŠธ ์ฒด์ธ ํŒจ์น˜ (์ผ๋ฐ˜ ๋ณ€ํ˜•)
# ๋˜๋Š”: sudo make fw_patch_less # Patchless ๋ณ€ํ˜• (- AMFI, SSV, Img4, TXM ์šฐํšŒ)
# ๋˜๋Š”: make fw_patch_dev     # ๊ฐœ๋ฐœ ๋ณ€ํ˜• (+ TXM ๊ถŒํ•œ/๋””๋ฒ„๊ทธ ์šฐํšŒ)
# ๋˜๋Š”: make fw_patch_jb      # ํƒˆ์˜ฅ ๋ณ€ํ˜• (dev + ์ „์ฒด ๋ณด์•ˆ ์šฐํšŒ)
# ๋˜๋Š”: make fw_patch_exp     # ์‹คํ—˜ ๋ณ€ํ˜• (ํƒˆ์˜ฅ + ์—ฐ๊ตฌ ํŒจ์น˜ ์Šคํƒ)

์ •๋ฆฌ

make clean                    # ๋นŒ๋“œ/๋„๊ตฌ ์‚ฐ์ถœ๋ฌผ๋งŒ ์‚ญ์ œ
make clean CLEAN_VM=1         # ํ™•์ธ ํ›„ vm/ ๋„ ์‚ญ์ œ
make clean CLEAN_IPSW=1       # ํ™•์ธ ํ›„ ipsws/ ๋„ ์‚ญ์ œ

๊ธฐ๋ณธ clean์€ vm/ ๋˜๋Š” ipsws/ ๋ฅผ ์‚ญ์ œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋™์•ˆ ํ„ฐ๋ฏธ๋„ 1์„ ๊ณ„์† ์‹คํ–‰ ์ƒํƒœ๋กœ ๋‘์„ธ์š”.

# ํ„ฐ๋ฏธ๋„ 1
make boot_dfu                 # VM์„ DFU ๋ชจ๋“œ๋กœ ๋ถ€ํŒ… (๊ณ„์† ์‹คํ–‰ ์œ ์ง€)
# ํ„ฐ๋ฏธ๋„ 2
make restore_get_shsh         # SHSH blob ๊ฐ€์ ธ์˜ค๊ธฐ
make restore                  # pymobiledevice3 restore ๋ฐฑ์—”๋“œ๋กœ ํŽŒ์›จ์–ด ํ”Œ๋ž˜์‹ฑ
# ๋˜๋Š”: make restore_offline    # ์˜คํ”„๋ผ์ธ ๋ณต์› (AEA ์ด๋ฏธ์ง€๋ฅผ ์ œ์ž๋ฆฌ์—์„œ ๋ณตํ˜ธํ™”ํ•˜๊ณ  ์บ์‹œ๋œ .shsh blob ์‚ฌ์šฉ)
                              # ์ตœ์ดˆ 1ํšŒ๋Š” AEA ๋ณตํ˜ธํ™”๋ฅผ ์œ„ํ•ด ์ธํ„ฐ๋„ท ์—ฐ๊ฒฐ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค

์ปค์Šคํ…€ ํŽŒ์›จ์–ด ์„ค์น˜

ํ„ฐ๋ฏธ๋„ 1์˜ DFU ๋ถ€ํŒ…์„ ์ค‘๋‹จ(Ctrl+C)ํ•œ ๋‹ค์Œ, ๋žจ๋””์Šคํฌ๋ฅผ ์œ„ํ•ด ๋‹ค์‹œ DFU๋กœ ๋ถ€ํŒ…ํ•ฉ๋‹ˆ๋‹ค:

# ํ„ฐ๋ฏธ๋„ 1
make boot_dfu                 # ๊ณ„์† ์‹คํ–‰ ์œ ์ง€
# ํ„ฐ๋ฏธ๋„ 2
sudo make ramdisk_build       # ์„œ๋ช…๋œ SSH ๋žจ๋””์Šคํฌ ๋นŒ๋“œ
make ramdisk_send             # ์žฅ์น˜๋กœ ์ „์†ก

๋žจ๋””์Šคํฌ๊ฐ€ ์‹คํ–‰๋˜๋ฉด(์ถœ๋ ฅ์— Running server๊ฐ€ ํ‘œ์‹œ๋จ), ์„ธ ๋ฒˆ์งธ ํ„ฐ๋ฏธ๋„์„ ์—ด์–ด usbmux ํ„ฐ๋„์„ ์‹œ์ž‘ํ•œ ํ›„, ํ„ฐ๋ฏธ๋„ 2์—์„œ ์ปค์Šคํ…€ ํŽŒ์›จ์–ด๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค:

# ํ„ฐ๋ฏธ๋„ 3 โ€” ๊ณ„์† ์‹คํ–‰ ์œ ์ง€
python3 -m pymobiledevice3 usbmux forward 2222 22
# ํ„ฐ๋ฏธ๋„ 2
make cfw_install
# ๋˜๋Š”: make cfw_install_jb        # ํƒˆ์˜ฅ ๋ณ€ํ˜•
# ๋˜๋Š”: make cfw_install_exp       # ์‹คํ—˜ ๋ณ€ํ˜• (ํƒˆ์˜ฅ + ์—ฐ๊ตฌ ํŒจ์น˜ ์Šคํƒ)
# ๋˜๋Š”: SPOOF_BUILD=23F77 make cfw_install_exp   # ์ถ”๊ฐ€๋กœ ProductBuildVersion ์žฌ์ž‘์„ฑ

์ฒซ ๋ถ€ํŒ…

ํ„ฐ๋ฏธ๋„ 1์˜ DFU ๋ถ€ํŒ…์„ ์ค‘๋‹จ(Ctrl+C)ํ•œ ํ›„ ๋‹ค์Œ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค:

make boot

cfw_install_jb ์‹คํ–‰ ํ›„ ํƒˆ์˜ฅ ๋ณ€ํ˜•์€ ์ฒซ ๋ฒˆ์งธ ๋ถ€ํŒ… ์‹œ Sileo์™€ TrollStore๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Sileo์—์„œ openssh-server๋ฅผ ์„ค์น˜ํ•˜์—ฌ SSH ์ ‘๊ทผ์„ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ผ๋ฐ˜/๊ฐœ๋ฐœ ๋ณ€ํ˜•์˜ ๊ฒฝ์šฐ, VM์—์„œ direct console์ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. bash-4.4#์ด ๋ณด์ด๋ฉด ์—”ํ„ฐ๋ฅผ ๋ˆ„๋ฅด๊ณ  ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์‰˜ ํ™˜๊ฒฝ์„ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  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

์ฐธ๊ณ : ํ˜ธ์ŠคํŠธ ํ‚ค ์ƒ์„ฑ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š์œผ๋ฉด dropbear(SSH ์„œ๋ฒ„)๊ฐ€ ์—ฐ๊ฒฐ์„ ์ˆ˜๋ฝํ•˜๋”๋ผ๋„ SSH ํ•ธ๋“œ์…ฐ์ดํฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ํ‚ค๊ฐ€ ์—†์–ด ์ฆ‰์‹œ ์—ฐ๊ฒฐ์„ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

์ดํ›„ ๋ถ€ํŒ…

make boot

๋ณ„๋„์˜ ํ„ฐ๋ฏธ๋„์—์„œ usbmux ํฌ์›Œ๋”ฉ ํ„ฐ๋„์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค:

python3 -m pymobiledevice3 usbmux forward 2222 22222    # SSH (dropbear)
python3 -m pymobiledevice3 usbmux forward 2222 22       # SSH (ํƒˆ์˜ฅ: Sileo์—์„œ openssh-server๋ฅผ ์„ค์น˜ํ•œ ๊ฒฝ์šฐ)
python3 -m pymobiledevice3 usbmux forward 5901 5901     # VNC
python3 -m pymobiledevice3 usbmux forward 5910 5910     # RPC

๋‹ค์Œ์„ ํ†ตํ•ด ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค:

  • SSH (ํƒˆ์˜ฅ): ssh -p 2222 mobile@127.0.0.1 (password: alpine)
  • SSH (์ผ๋ฐ˜/๊ฐœ๋ฐœ): ssh -p 2222 root@127.0.0.1 (password: alpine)
  • VNC: vnc://127.0.0.1:5901
  • RPC: rpcclient -p 5910 127.0.0.1

VM ๋ฐฑ์—… ๋ฐ ์ „ํ™˜

์—ฌ๋Ÿฌ VM ํ™˜๊ฒฝ(์˜ˆ: ๋‹ค๋ฅธ iOS ๋นŒ๋“œ ๋˜๋Š” ํŽŒ์›จ์–ด ๋ณ€ํ˜•)์„ ์ €์žฅํ•˜๊ณ  ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฑ์—…์€ vm.backups/์— ์ €์žฅ๋˜๋ฉฐ rsync --sparse๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํฌ์†Œ ๋””์Šคํฌ ์ด๋ฏธ์ง€๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

make vm_backup NAME=26.1-clean    # ํ˜„์žฌ VM ์ €์žฅ
rm -rf vm && make vm_new          # ์ƒˆ๋กœ์šด ๋นŒ๋“œ๋ฅผ ์œ„ํ•ด ์ดˆ๊ธฐํ™”
# ... fw_prepare, fw_patch, restore, cfw_install, boot
make vm_backup NAME=26.3-jb       # ์ƒˆ VM๋„ ์ €์žฅ
make vm_list                      # ๋ชจ๋“  ๋ฐฑ์—… ๋ชฉ๋ก ๋ณด๊ธฐ
make vm_switch NAME=26.1-clean    # ๋ฐฑ์—… ๊ฐ„ ์ „ํ™˜

์ฐธ๊ณ : ๋ฐฑ์—…/์ „ํ™˜/๋ณต์› ์ „์— ๋ฐ˜๋“œ์‹œ VM์„ ์ค‘์ง€ํ•˜์„ธ์š”.

FAQ

๋ฌด์—‡๋ณด๋‹ค ๋จผ์ € โ€” git pull์„ ์‹คํ–‰ํ•˜์—ฌ ์ตœ์‹  ๋ฒ„์ „์ธ์ง€ ํ™•์ธํ•˜์„ธ์š”.

Q: ์‹คํ–‰ํ•˜๋ ค๊ณ  ํ•˜๋ฉด zsh: killed ./vphone-cli ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

AMFI/๋””๋ฒ„๊ทธ ์ œํ•œ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์šฐํšŒ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•˜์„ธ์š”:

  • ๋ฐฉ๋ฒ• 1 (AMFI ์™„์ „ ๋น„ํ™œ์„ฑํ™”):

    sudo nvram boot-args="amfi_get_out_of_my_way=1 -v"
    
  • ๋ฐฉ๋ฒ• 2 (๋””๋ฒ„๊ทธ ์ œํ•œ๋งŒ ๋น„ํ™œ์„ฑํ™”): ๋ณต๊ตฌ ๋ชจ๋“œ์—์„œ csrutil enable --without debug(์™„์ „ํ•œ SIP ๋น„ํ™œ์„ฑํ™” ์—†์Œ)๋ฅผ ์‚ฌ์šฉํ•œ ๋‹ค์Œ, amfidont ๋˜๋Š” amfree๋ฅผ ์„ค์น˜/๋กœ๋“œํ•˜์—ฌ AMFI์˜ ๋‚˜๋จธ์ง€ ๊ธฐ๋Šฅ์€ ํ™œ์„ฑ ์ƒํƒœ๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ €์žฅ์†Œ์—์„œ๋Š” make amfidont_allow_vphone์œผ๋กœ amfidont์— ํ•„์š”ํ•œ ์ธ์ฝ”๋”ฉ ๊ฒฝ๋กœ์™€ CDHash ํ—ˆ์šฉ ์„ค์ •์„ ์ž๋™ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Q: make boot / make boot_dfu ์‹คํ–‰ ์‹œ VZErrorDomain Code=2 "Virtualization is not available on this hardware."๋กœ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

ํ˜ธ์ŠคํŠธ ์ž์ฒด๊ฐ€ Apple ๊ฐ€์ƒ ๋จธ์‹ ์—์„œ ์‹คํ–‰ ์ค‘์ด๊ธฐ ๋•Œ๋ฌธ์—, ์ค‘์ฒฉ๋œ Virtualization.framework ๊ฒŒ์ŠคํŠธ ๋ถ€ํŒ…์€ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ค‘์ฒฉ์ด ์•„๋‹Œ macOS 15+ ํ˜ธ์ŠคํŠธ์—์„œ ์‹คํ–‰ํ•˜์„ธ์š”. make boot_host_preflight์—์„œ Model Name: Apple Virtual Machine 1 ๋ฐ kern.hv_vmm_present=1๋กœ ์ด๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ๋Š” ์ด๋Ÿฐ ํ˜ธ์ŠคํŠธ์—์„œ boot_binary_check๊ฐ€ VM ์‹œ์ž‘ ์ „์— ๋น ๋ฅด๊ฒŒ ์‹คํŒจ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

Q: ์‹œ์Šคํ…œ ์•ฑ(App Store, ๋ฉ”์‹œ์ง€ ๋“ฑ)์„ ๋‹ค์šด๋กœ๋“œํ•˜๊ฑฐ๋‚˜ ์„ค์น˜ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

iOS ์ดˆ๊ธฐ ์„ค์ • ์‹œ ์ง€์—ญ์„ ์ผ๋ณธ ๋˜๋Š” ์œ ๋Ÿฝ ์—ฐํ•ฉ์œผ๋กœ ์„ ํƒํ•˜์ง€ ๋งˆ์„ธ์š”. ์ด ์ง€์—ญ์—์„œ๋Š” ์ถ”๊ฐ€์ ์ธ ๊ทœ์ œ ๊ฒ€์‚ฌ(์‚ฌ์ด๋“œ๋กœ๋”ฉ ๊ณต๊ฐœ, ์นด๋ฉ”๋ผ ์…”ํ„ฐ์Œ ๋“ฑ)๊ฐ€ ์ ์šฉ๋˜๋Š”๋ฐ, ๊ฐ€์ƒ ๋จธ์‹ ์€ ์ด๋Ÿฌํ•œ ์š”๊ฑด์„ ์ถฉ์กฑํ•  ์ˆ˜ ์—†์–ด ์‹œ์Šคํ…œ ์•ฑ์˜ ๋‹ค์šด๋กœ๋“œ ๋ฐ ์„ค์น˜๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ”ผํ•˜๋ ค๋ฉด ๋‹ค๋ฅธ ์ง€์—ญ(์˜ˆ: ๋ฏธ๊ตญ)์„ ์„ ํƒํ•˜์„ธ์š”.

Q: "Press home to continue" ํ™”๋ฉด์—์„œ ๋ฉˆ์ท„์Šต๋‹ˆ๋‹ค.

VNC(vnc://127.0.0.1:5901)๋กœ ์ ‘์†ํ•˜์—ฌ ํ™”๋ฉด์˜ ์•„๋ฌด ๊ณณ์ด๋‚˜ ์šฐํด๋ฆญ(Mac ํŠธ๋ž™ํŒจ๋“œ์—์„œ๋Š” ๋‘ ์†๊ฐ€๋ฝ ํด๋ฆญ)ํ•˜์„ธ์š”. ์ด๊ฒƒ์ด ํ™ˆ ๋ฒ„ํŠผ ๋ˆ„๋ฅด๊ธฐ๋ฅผ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•ฉ๋‹ˆ๋‹ค.

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์—๊ฒŒ ๋„์›€์„ ์š”์ฒญํ•˜์„ธ์š”.

Q: restore_offline๋ฅผ ์‚ฌ์šฉํ–ˆ๋”๋‹ˆ ์„ค์ • ํ™”๋ฉด์—์„œ ์ง„ํ–‰์ด ๋ฉˆ์ท„์Šต๋‹ˆ๋‹ค

์„ค์ • ๊ณผ์ •์—์„œ Apple ์„œ๋ฒ„์— ์—ฐ๊ฒฐ์„ ์‹œ๋„ํ•˜๋Š”๋ฐ, restore_offline๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ ์ธํ„ฐ๋„ท์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€ ์•Š์„ ๊ฐ€๋Šฅ์„ฑ์ด ํฝ๋‹ˆ๋‹ค. ๊ธฐ๊ธฐ๋ฅผ supervised ์ƒํƒœ๋กœ ๋งŒ๋“ค๋ฉด ์„ค์ • ํ™”๋ฉด์˜ ๋Œ€๋ถ€๋ถ„์„ ์šฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

python3 -m pymobiledevice3 profile supervise vphone

๊ฐ์‚ฌ ์ธ์‚ฌ