patchless: Add support for non SIP/AMFI disabled systems

This commit is contained in:
zqxwce
2026-04-15 16:41:07 +03:00
committed by zqxwce
parent 65aa42f2c1
commit 7d09a1bb0e
6 changed files with 56 additions and 49 deletions
+2 -2
View File
@@ -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.*
+11 -6
View File
@@ -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 + 完全セキュリティバイパス)
```
+11 -6
View File
@@ -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 + 전체 보안 우회)
```
+11 -6
View File
@@ -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 + 完整安全绕过)
```
-14
View File
@@ -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
+21 -15
View File
@@ -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