ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

AMFI绕过全解析:vphone-cli 如何破解 iOS 代码签名信任机制

AMFI绕过全解析:vphone-cli 如何破解 iOS 代码签名信任机制 AMFI绕过全解析vphone-cli 如何破解 iOS 代码签名信任机制【免费下载链接】vphone-cli项目地址: https://gitcode.com/GitHub_Trending/vp/vphone-cliAMFI 绕过是 vphone-cli 能在 Mac 上启动虚拟 iPhone 并运行未签名代码的核心。本文带你从 iOS 代码签名信任机制讲起逐层拆解 vphone-cli 对 AMFI 的三重绕过信任缓存强制放行、execve 杀死路径改写、SHA256 哈希类型门禁解除。全文面向新手无需汇编基础读完即可理解这套虚拟 iPhone 越狱链是如何让自签名 App 顺利运行的。AMFI 是什么iOS 代码签名的守门人在 macOS 的世界里AMFI 指Apple Mobile File Integrity——内核中的一个 MACF 策略组件职责只有一件事任何二进制在 exec 之前必须通过代码签名验证。它检查的内容包括代码签名是否存在完全无签名的二进制直接被杀CDHash 是否在信任缓存Trust Cache里Apple 官方发布的二进制白名单哈希类型是否符合要求例如是否 SHA256entitlements权限是否一致。任何一项失败内核都会记录类似AMFI: code signature validation failed的日志并终止该进程——这就是你平时看到自签名 App 闪退的真正原因。vphone-cli 用 Apple 的 Virtualization.framework 在 Mac 上启动研究用虚拟机 iPhonePCC 研究 VM 基础设施。要让越狱生态Sileo、TrollStore、注入 dylib在虚拟机里工作就必须让 AMFI 放行非 Apple 签名的代码。这正是 sources/FirmwarePatcher/Kernel/JBPatches/ 目录下一批内核补丁要做的事。先搞清信任机制一个二进制是如何被信任的iOS 的代码签名信任链可以简化为三步步骤组件做什么1TXMTrusted Execution Monitor在安全异常级别验证代码签名哈希selector 24 验证链2AMFI 信任缓存查询调用AMFIIsCDHashInTrustCache检查二进制的 CDHash 是否在信任缓存中3AMFI execve 回调综合判断签名/entitlements/受限执行模式决定是否杀死进程只有三步全部通过进程才能运行。vphone-cli 的jb越狱变体共对内核打了113 个补丁其中 AMFI 相关的三道补丁恰好分别卡在这三个关键点。五档固件变体的补丁规模对比可见 research/0_binary_patch_comparison.md。绕过一JB-01 信任缓存恒真补丁最关键这是整个 AMFI 绕过的心脏对应内核方法patch_amfi_cdhash_in_trustcache。原始行为AMFIIsCDHashInTrustCache会把二进制的 CDHash 交给 TXM 的 selector 14 路径做信任缓存成员查询返回在/不在。补丁后行为vphone-cli 直接重写了这个函数的入口——恒返回存在并把结果写入输出参数。效果是任何 CDHash 都在信任缓存里包括你用自己证书重签的 App 和 dylib。// 补丁前int ok txm_query_cdhash(hash, type, out); return ok 0; // 补丁后if (out) *out 1; return 1;为什么它如此关键因为 AMFI 的 vnode 签名回调vnode_check_signature里有三个验证分支——信任缓存分支、can-execute-cdhash 分支、动态/amfid 分支——都会汇入这个信任缓存在不在的判断。强制放行后非 Apple 签名代码走的是受信任路径内核会给它打上信任标记位csflags | 0x04000000。实现细节适合进阶读者补丁器 KernelJBPatchAmfiTrustcache.swift 并不硬编码地址每个 iOS 版本地址都不同而是语义匹配在 AMFI 代码区扫描函数边界PACIBSP寻找保存 x2 → 栈清零 → 传栈槽 → 调用查询 → 保存结果 → 快路径判断 → 空指针保护这一独特指令形状全局唯一命中后才改写前 4 条指令。完整分析文档见 research/kernel_patch_jb/patch_amfi_cdhash_in_trustcache.md。绕过二JB-02 execve 杀死路径改写一条指令翻转生死信任缓存只是第一道门。AMFI 还注册了 execve 回调_cred_label_update_execve综合检查完全无签名代码、受限执行模式拒绝、dyld 签名不可验证、entitlements 不匹配等情况——所有失败分支最终都汇入同一个杀死出口返回 1拒绝。vphone-cli 的做法极其优雅JB-02patch_amfi_execve_kill_path把共享出口处的MOV W0, #1拒绝改为MOV W0, #0放行前面所有的日志、断言、预检查原样保留只翻转最终决策。 这就是逆向补丁的精髓找到所有拒绝路径的漏斗口改一个字节胜过逐个绕过十几个检查分支。详细追踪见 research/kernel_patch_jb/patch_amfi_execve_kill_path.md。⚠️ 需要说明该补丁针对的是完全未签名/深验证失败的兜底路径。实践中越狱场景多是有签名但不在 Apple 信任缓存的自签代码主要靠 JB-01 放行JB-02 在新版本调度中已默认由 C21 类补丁在相同位置接替详见 research/0_binary_patch_comparison.md 中的 JB 补丁表。绕过三JB-06 解除 SHA256-only 哈希类型门禁即使前面都通过了AMFI 还埋了一个迟到的拒绝在签名验证的后期如果哈希类型不是 SHA256值不为 2就记录Hash type is not SHA256并强制拒绝。这会让前面好不容易被接受的自签代码在最后一步又被杀。JB-06patch_post_validation_additional把判断指令cmp w0, #2改为cmp w0, w0恒相等彻底解除这个哈希类型门禁。这个补丁对 launchd 注入 dylib 的工作流尤其重要——因为动态加载的 dylib 也会走同一条验证路径。分析文档research/kernel_patch_jb/patch_post_validation_additional.md。上游还有一关TXM 的信任缓存二分查找细心的读者会问AMFI 查询信任缓存最终不是要问 TXM 吗没错。在更底层的 TXM运行于 SPTM 监督下的安全监控器中regular变体就已经打了一个补丁把信任缓存二分查找的比较调用bl hash_cmp改为mov x0, #0恒匹配让 TXM 层面的哈希比对直接命中。dev/jb变体更进一步对 TXM 的 selector 24代码签名验证链、selector 41get-task-allow 调试权限等做了 12 个补丁。一个有趣的工程细节TXM 不能像普通函数那样ret返回调用者是更高安全级别的 SPTM直接返回会触发取指权限异常只能通过svc #0陷回 SPTM——所以补丁必须走完整的正常返回链。这部分完整分析在 research/txm_jb_patches.md。补丁如何落地一条命令搞定理解机制后实际使用非常省心。五档固件变体的安全放行程度递增变体启动链补丁数说明less4无 AMFI 绕过保持全部缓解措施regular42AMFI/SSV/Img4/TXM 基础绕过dev53 TXM entitlement/调试绕过jb113完整越狱Sileo、TrollStore 首启自动安装exp141JB 超集 反虚拟机检测研究补丁一条命令走完整条流水线下载 → 打补丁 → DFU 恢复 → 安装 CFW → 首次启动vphone-cli vm create myphone -V jb # 选择越狱变体 vphone-cli vm launch myphone补丁器用 Swift 实现位于 sources/FirmwarePatcher/通过 Keystone 编码器生成替换指令、Capstone 校验往返一致性保证同一变体输出字节级可复现。所有 JB 补丁的运行时验证记录含逐条补丁的命中地址与 IDA 映射结果保存在 research/kernel_patch_jb/runtime_verification/。风险与安全影响务必了解JB-01 是全局信任决策绕过CDHash 来源区分被彻底移除不在信任缓存的策略分支不再正常运作。这是设计使然安全影响高。JB-02 削弱了内核策略闸门诊断保真度下降特权面扩大。整套机制仅面向本地研究虚拟机需要 Apple Silicon macOS 15 SIP/AMFI 放宽请勿将其移植到真实设备——在真机上破坏签名信任会直接导致设备不可用。小结vphone-cli 对 AMFI 的破解是一次教科书式的分层拆解TXM 层让信任缓存查找恒命中内核 AMFI 层用恒真函数 共享杀死出口翻转 哈希门禁解除三板斧放行自签代码再配合 CFW 安装阶段对 dylib 注入链的支撑最终让虚拟 iPhone 完整跑起越狱生态。配合首图那样的 root SSH 终端ssh -p 22222 mobilevm-ip密码alpine你就能在一台 Mac 上拥有一个可自由折腾的 iOS 沙盒了。【免费下载链接】vphone-cli项目地址: https://gitcode.com/GitHub_Trending/vp/vphone-cli创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表