diff --git a/README.md b/README.md index 1c1f380..a03f3e6 100644 --- a/README.md +++ b/README.md @@ -36,8 +36,6 @@ See [research/0_binary_patch_comparison.md](./research/0_binary_patch_comparison **Configure SIP/AMFI** — required for private Virtualization.framework entitlements and unsigned binary workflows. -The Patchless variant is currently only supported by Option 1. - Boot into Recovery (long press power button), open Terminal, then choose one setup path: - **Option 1: Fully disable SIP + AMFI boot-arg (most permissive)** @@ -87,6 +85,8 @@ Boot into Recovery (long press power button), open Terminal, then choose one set This helper computes the current signed `vphone-cli` CDHash and uses the URL-encoded project path form observed by `AMFIPathValidator`. +> The Patchless variant requires either the use of option 1 or amfidont with the `-S` flag (`sudo amfidont -S --path [PATH_TO_VPHONE_DIR]`) + **Install dependencies:** *You will need both brew dependencies and Git Submodule dependencies.* diff --git a/docs/README_ja.md b/docs/README_ja.md index b477d44..b7ffb83 100644 --- a/docs/README_ja.md +++ b/docs/README_ja.md @@ -17,13 +17,14 @@ Apple の Virtualization.framework と PCC の研究用 VM インフラを使用 ## ファームウェアバリアント -セキュリティバイパスのレベルが異なる3つのパッチバリアントが利用可能です: +セキュリティバイパスのレベルが異なる4つのパッチバリアントが利用可能です: -| バリアント | ブートチェーン | CFW | Make ターゲット | -| ---------- | :------------: | :---------: | ---------------------------------- | -| **通常版** | 41 パッチ | 10 フェーズ | `fw_patch` + `cfw_install` | -| **開発版** | 52 パッチ | 12 フェーズ | `fw_patch_dev` + `cfw_install_dev` | -| **脱獄版** | 112 パッチ | 14 フェーズ | `fw_patch_jb` + `cfw_install_jb` | +| バリアント | ブートチェーン | CFW | Make ターゲット | +| ---------- | :------------: | :---------: | -------------------------------------------- | +| **Patchless** | 3 パッチ | 2 フェーズ | `fw_patch_less` (root) + `boot_less` | +| **通常版** | 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`。 @@ -78,6 +79,8 @@ Apple の Virtualization.framework と PCC の研究用 VM インフラを使用 このリポジトリでは、`make amfidont_allow_vphone` を実行すると `amfidont` 用のエンコード済みパスと CDHash の許可設定をまとめて行えます。 +> Patchless バリアントでは、方法 1 か、`-S` フラグ付きの amfidont(`sudo amfidont -S --path [PATH_TO_VPHONE_DIR]`)が必要です。 + **依存関係のインストール:** ```bash @@ -97,6 +100,7 @@ git clone --recurse-submodules https://github.com/Lakr233/vphone-cli.git ```bash make setup_machine # 初回起動までを完全自動化(復元/ラムディスク/CFWを含む) # オプション:NONE_INTERACTIVE=1 SUDO_PASSWORD=... +# LESS=1 で patchless バリアント(- AMFI, SSV, Img4, TXM バイパス) # DEV=1 で開発バリアント(+ TXM entitlement/デバッグバイパス) # JB=1 で脱獄バリアント(dev + 完全セキュリティバイパス) ``` @@ -110,6 +114,7 @@ make vm_new # VM ディレクトリとマニフェスト(con # オプション:CPU=8 MEMORY=8192 DISK_SIZE=64 make fw_prepare # IPSW のダウンロード、抽出、マージ、マニフェスト生成 make fw_patch # ブートチェーンのパッチ当て(通常バリアント) +# または: sudo make fw_patch_less # patchless バリアント(- AMFI, SSV, Img4, TXM バイパス) # または: make fw_patch_dev # 開発バリアント(+ TXM entitlement/デバッグバイパス) # または: make fw_patch_jb # 脱獄バリアント(dev + 完全セキュリティバイパス) ``` diff --git a/docs/README_ko.md b/docs/README_ko.md index ad98072..c6fe8d4 100644 --- a/docs/README_ko.md +++ b/docs/README_ko.md @@ -17,13 +17,14 @@ PCC 리서치 VM 인프라와 Apple의 Virtualization.framework를 사용하여 ## 펌웨어 변형 -보안 우회 수준이 다른 3가지 패치 변형을 사용할 수 있습니다: +보안 우회 수준이 다른 4가지 패치 변형을 사용할 수 있습니다: -| 변형 | 부트 체인 | CFW | Make 타겟 | -| -------- | :-------: | :-------: | ---------------------------------- | -| **일반** | 41 패치 | 10 페이즈 | `fw_patch` + `cfw_install` | -| **개발** | 52 패치 | 12 페이즈 | `fw_patch_dev` + `cfw_install_dev` | -| **탈옥** | 112 패치 | 14 페이즈 | `fw_patch_jb` + `cfw_install_jb` | +| 변형 | 부트 체인 | CFW | Make 타겟 | +| ------------ | :-------: | :-------: | ------------------------------------------- | +| **Patchless** | 3 패치 | 2 페이즈 | `fw_patch_less` (root) + `boot_less` | +| **일반** | 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`. @@ -78,6 +79,8 @@ PCC 리서치 VM 인프라와 Apple의 Virtualization.framework를 사용하여 이 저장소에서는 `make amfidont_allow_vphone`으로 `amfidont`에 필요한 인코딩 경로와 CDHash 허용 설정을 한 번에 적용할 수 있습니다. +> Patchless 변형은 방법 1 또는 `-S` 플래그를 포함한 amfidont(`sudo amfidont -S --path [PATH_TO_VPHONE_DIR]`)가 필요합니다. + **의존성(Dependencies) 설치:** ```bash @@ -97,6 +100,7 @@ git clone --recurse-submodules https://github.com/Lakr233/vphone-cli.git ```bash make setup_machine # "First Boot"까지의 전체 과정 자동화 (복원/Ramdisk/커스텀 펌웨어 포함) # 옵션: NONE_INTERACTIVE=1 SUDO_PASSWORD=... +# LESS=1 Patchless 변형 (- AMFI, SSV, Img4, TXM 우회) # DEV=1 개발 변형 (+ TXM 권한/디버그 우회) # JB=1 탈옥 변형 (dev + 전체 보안 우회) ``` @@ -110,6 +114,7 @@ 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 + 전체 보안 우회) ``` diff --git a/docs/README_zh.md b/docs/README_zh.md index 798ebee..c0832ac 100644 --- a/docs/README_zh.md +++ b/docs/README_zh.md @@ -17,13 +17,14 @@ ## 固件变体 -提供三种补丁变体,安全绕过级别逐步递增: +提供四种补丁变体,安全绕过级别逐步递增: -| 变体 | 启动链 | 自定义固件 | Make 目标 | -| ---------- | :--------: | :--------: | ---------------------------------- | -| **常规版** | 41 个补丁 | 10 个阶段 | `fw_patch` + `cfw_install` | -| **开发版** | 52 个补丁 | 12 个阶段 | `fw_patch_dev` + `cfw_install_dev` | -| **越狱版** | 112 个补丁 | 14 个阶段 | `fw_patch_jb` + `cfw_install_jb` | +| 变体 | 启动链 | 自定义固件 | Make 目标 | +| ------------- | :--------: | :--------: | ------------------------------------------- | +| **Patchless** | 3 个补丁 | 2 个阶段 | `fw_patch_less` (root) + `boot_less` | +| **常规版** | 41 个补丁 | 10 个阶段 | `fw_patch` + `cfw_install` | +| **开发版** | 52 个补丁 | 12 个阶段 | `fw_patch_dev` + `cfw_install_dev` | +| **越狱版** | 112 个补丁 | 14 个阶段 | `fw_patch_jb` + `cfw_install_jb` | > 越狱最终配置(符号链接、Sileo、apt、TrollStore)通过 `/cores/vphone_jb_setup.sh` LaunchDaemon 在首次启动时自动运行。查看进度:`/var/log/vphone_jb_setup.log`。 @@ -78,6 +79,8 @@ 在本仓库中,可以运行 `make amfidont_allow_vphone` 一次性配置 `amfidont` 所需的编码路径与 CDHash 允许项。 +> Patchless 变体要求使用方式 1,或带 `-S` 参数的 amfidont(`sudo amfidont -S --path [PATH_TO_VPHONE_DIR]`)。 + **安装依赖:** ```bash @@ -97,6 +100,7 @@ git clone --recurse-submodules https://github.com/Lakr233/vphone-cli.git ```bash make setup_machine # 完全自动化完成"首次启动"流程(包含 restore/ramdisk/CFW) # 选项:NONE_INTERACTIVE=1 SUDO_PASSWORD=... +# LESS=1 patchless 变体(- AMFI、SSV、Img4、TXM 绕过) # DEV=1 开发变体(+ TXM 权限/调试绕过) # JB=1 越狱变体(dev + 完整安全绕过) ``` @@ -110,6 +114,7 @@ make vm_new # 创建 VM 目录及清单文件(config.plist # 选项:CPU=8 MEMORY=8192 DISK_SIZE=64 make fw_prepare # 下载 IPSWs,提取、合并、生成 manifest make fw_patch # 修补启动链(常规变体) +# 或:sudo make fw_patch_less # patchless 变体(- AMFI、SSV、Img4、TXM 绕过) # 或:make fw_patch_dev # 开发变体(+ TXM 权限/调试绕过) # 或:make fw_patch_jb # 越狱变体(dev + 完整安全绕过) ``` diff --git a/scripts/boot_host_preflight.sh b/scripts/boot_host_preflight.sh index 64d57e4..efd8760 100755 --- a/scripts/boot_host_preflight.sh +++ b/scripts/boot_host_preflight.sh @@ -128,20 +128,6 @@ if (( ASSERT_BOOTABLE == 1 )); then fi fi -if (( LESS == 1 && ASSERT_BOOTABLE == 1 )); then - case " $CURRENT_BOOT_ARGS " in - *" amfi_get_out_of_my_way=0x1 "*) - ;; - *) - (( QUIET == 0 )) && { - echo "" - echo "Error: The patchless variant requires a disabled AMFI." >&2 - } - exit 3 - ;; - esac -fi - print_section "Entitlements" if [[ -f "$RELEASE_BIN" ]]; then codesign -d --entitlements :- "$RELEASE_BIN" 2>/dev/null || true diff --git a/scripts/setup_tools.sh b/scripts/setup_tools.sh index 27a9f35..e794261 100755 --- a/scripts/setup_tools.sh +++ b/scripts/setup_tools.sh @@ -99,23 +99,29 @@ VARIANT="${VARIANT:-}" if [[ "$VARIANT" == "less" ]]; then echo "[5/5] apfs sealvolume" - TMP_DIR="$(mktemp -d)" - ipsw download appledb \ - --os macOS \ - --build 25D2140 \ - --pattern "094-33864-054.dmg" \ - --output "$TMP_DIR" + if [[ -f "$TOOLS_PREFIX/apfs_sealvolume" ]]; then + echo " apfs_sealvolume already present" + else + TMP_DIR="$(mktemp -d)" + ipsw download appledb \ + --os macOS \ + --build 25D2140 \ + --pattern "094-33864-054.dmg" \ + --output "$TMP_DIR" - RAMDISK_IM4P="$TMP_DIR/25D2140__MacOS/094-33864-054.dmg" - RAMDISK="$TMP_DIR/ramdisk.dmg" - ipsw img4 im4p extract --output "$RAMDISK" "$RAMDISK_IM4P" + RAMDISK_IM4P="$TMP_DIR/25D2140__MacOS/094-33864-054.dmg" + RAMDISK="$TMP_DIR/ramdisk.dmg" + ipsw img4 im4p extract --output "$RAMDISK" "$RAMDISK_IM4P" - DEVICE=$(hdiutil attach -readonly -nobrowse "$RAMDISK" | awk '/Apple_APFS/ {print $1; exit}') - MOUNT=$(mount | grep "$DEVICE" | awk '{print $3}') - cp "$MOUNT/System/Library/Filesystems/apfs.fs/Contents/Resources/apfs_sealvolume" \ - "$TOOLS_PREFIX/apfs_sealvolume" - hdiutil detach "$DEVICE" >/dev/null 2>&1 || true - echo "Downloaded: $TOOLS_PREFIX/apfs_sealvolume" + MOUNT=$(hdiutil attach -readonly -nobrowse "$RAMDISK" | awk 'END{ print$NF}') + cp "$MOUNT/System/Library/Filesystems/apfs.fs/Contents/Resources/apfs_sealvolume" \ + "$TOOLS_PREFIX/apfs_sealvolume" + hdiutil detach "$MOUNT" >/dev/null 2>&1 || true + rm -rf "$TMP_DIR" + echo " Downloaded: $TOOLS_PREFIX/apfs_sealvolume" + echo " Resigning apfs_sealvolume" + codesign --force --sign - "$TOOLS_PREFIX/apfs_sealvolume" + fi else echo "[5/5] apfs sealvolume (skipped — patchless variant only)" fi