
Device-bound CVE-2026-64560 adaptation for RedMi K80pro miro OS 3.0.304.0
Redmi K80 Pro (miro) 的 CVE-2026-64560 用户态本地提权移植项目。
🚀 不想看这么多文档?
如果你不想深入研究,或者不想读这一堆 AI 生成的
.md, 请直接看dyc.md—— 一篇讲人话的快速上手: 从零到越狱(含 KernelSU),只讲要敲什么命令,不讲为什么。
上游漏洞利用及 Xiaomi 15 (dada) 适配来自
quyicheng03-boop,
本仓库是在其基础上为 K80 Pro 重新推导地址与常量后的移植成果。
本项目只做移植,不包含漏洞发现。 漏洞原理、利用链设计全部属于上游作者。 详见
docs/UPSTREAM.md与NOTICE。
这个仓库里的源码和二进制,只对下面这一个固件版本有效:
换任何一个 OTA 版本都会失效。 内核里的结构体偏移、符号地址、KASLR 区间
全部是针对这一个 Image 推导的,差一个字符都跑不起来。
指纹不匹配时程序会在门口退出:
TARGET_PROFILE_GATE_FAIL fingerprint=...
这是安全失败,不会碰内核。如果你的固件不是上表版本,请按
docs/05-technical.md 自行重新移植,不要直接
套用本仓库的常量。
docs/04-troubleshooting.md
的风险分析),但不要在你不拥有、或数据未备份的设备上运行。fastboot 通道。k80pro-miro-cve-2026-64560/
├── README.md 本文件
├── dyc.md 快速上手(讲人话版),新手先看这个
├── LICENSE 上游许可证
├── NOTICE 上游归属声明
├── SHA256SUMS.txt release_build/ 内三个产物的校验值
│
├── src/ 编译用的源码
│ ├── exploit-fanout-miro.c
│ ├── exploit-rotate-miro.c
│ ├── temp-su.c
│ ├── miro-profile.h 常量参考(不参与编译)
│ ├── miro-integration.c 集成参考(不参与编译)
│ └── exploit-*.c 上游原始文件(生成器的输入,不参与编译)
│
├── release_build/ 预编译产物(可直接使用)
│ ├── cve-2026-64560-fanout
│ ├── cve-2026-64560-rotate
│ └── su
│
├── docs/
│ ├── 01-build.md 如何编译
│ ├── 02-usage.md 如何在 adb shell 中使用
│ ├── 03-tokens.md 输出 token 速查表
│ ├── 04-troubleshooting.md 排错与风险说明
│ ├── 05-technical.md 移植技术说明
│ └── UPSTREAM.md 上游来源
│
└── tools/ 构建脚本与复现/诊断工具(不参与利用)
├── build.sh 一键编译(sh tools/build.sh)
└── *.py 复现 / 诊断脚本
先确认产物完整:
sha256sum -c SHA256SUMS.txt # Linux / macOS
certutil -hashfile <文件> SHA256 # Windows,逐个核对
需要 Android NDK(不能用系统 gcc,原因见该文档)。最省事的方式是
用仓库自带的脚本,它会自己找 NDK、选对工具链、编译、并和
SHA256SUMS.txt 逐个对比哈希:
sh tools/build.sh # 编译 + 校验
sh tools/build.sh --no-check # 只编译
脚本只做编译,不碰设备、不推送、不运行 exploit。
不想用脚本的话,也可以手敲三条 clang 命令,产出
cve-2026-64560-fanout、cve-2026-64560-rotate、su。
编译完成后比对是否与 release_build/ 里的字节一致:
sha256sum build/* # 与 SHA256SUMS.txt 里的三个值对照
成功的唯一判据是新开一个 adb shell,能通过 /data/local/tmp/su 拿到 uid=0:
$ printf 'id\nexit\n' | adb shell -T /data/local/tmp/su
uid=0(root) gid=0(root) groups=0(root),1004(input),... context=u:r:shell:s0
注意 context=u:r:shell:s0 —— root 身份但保持 shell 域,这是设计如此,
不是错误。
过程中会看到的关键 token(完整表见 docs/03-tokens.md):
BOOTID_WRITE_PASS attempt=5 q0=... q1=... slide=... kernel_base=...
STAGE0_GATE_PASS slide=... kernel_base=...
MISC_BRIDGE_OPEN_PASS fd=... observed=...
STAGE8_CRED_STAGE_PASS task=... cred=... uid=0 context=shell
ROOT_CHILD_HOLD_PASS child=... uid=0 context=shell selinux_permissive=1
成功率不是 100%。 Stage0 阶段实测约 1/5 单次命中率, 所以程序默认每阶段重试 32 次。整链是概率性的。
失败可能表现为死机。 需要长按电源键强制重启。 重启后内核状态完全清空,可以重新再来。
成功后会留下两个状态,直到重启为止:
/data/local/tmp/su 变成对任何 shell 身份开放 root 的守护进程清理方式见 docs/02-usage.md 末尾。
permissive 不是残留 bug,而是加载内核模块(KernelSU LKM 等)的前提。 细节见
docs/04-troubleshooting.md。
dada) 适配:上游仓库作者miro) 移植:见 CHANGELOG| 项 | 值 |
|---|
| 机型 | Redmi K80 Pro (ro.product.device = miro) |
| 指纹 | Redmi/miro/miro:16/BP2A.250605.031.A3/OS3.0.304.0.WOMCNXM:user/release-keys |
| 内核 | 6.6.118-android15-8-gc44b714366cc-abogki519650608-4k |
| 内核构建时间 | Thu Jun 4 03:48:35 UTC 2026 |
| 页面大小 | 4096(4K) |