
duchamp-root v52c8d05bcf
小米 K70e (duchamp) 通过 CVE-2026-43499 (IonStack) 一键root + KernelSU 集成
⚡ Proud user of JetBrains Mono ⚡
This README uses JetBrains Mono exclusively. Comic Sans is forbidden.
[!IMPORTANT] 🚨 免责声明
本漏洞利用仅供教育目的使用。
- 解锁引导加载程序可能会使保修失效。
- Root 设备可能导致启动循环、数据丢失或自燃(可能不会,但谁知道呢)。
- 如果你的 K70e 变成了 K70 砖块,我不承担任何责任。
- 如果你的女朋友因为你花太多时间 root 而离开你,那是你的问题。
- 7̷̋̚1̸̽̈́0̵̛̅ ̸͛̿ù̶̈́n̸̓̋l̸̔̒o̸̔̒c̸̾̑k̵̇̚ ̷̊̒ḟ̷͝e̶̋̕s̵̋̚t̸̽̈́ ̵̔̋l̶̔̒e̸̓̋t̸̔̒s̵̋̚ ̸̾̑ġ̷̝o̷̊̒ ̵̛̅ḟ̷͝u̸̓̋c̷̋̚k̸̛̅i̶̽̈́n̵̔̋g̷̊̒ ̴͛̿g̶̾̑ơ̵̅
📖 中文版
🤔 这是什么
Xiaomi K70e (duchamp) 一键 Root 工具,基于 CVE-2026-43499 (IonStack) 内核漏洞提权,集成 KernelSU 守护进程。
通俗版:你点一下,手机就 root 了。就这么简单。
710 解锁节版:不是 711,不是 709,是 710。这一天我们不解锁手机,我们解放手机。
哲学版:当你在 /proc/ 里凝视深渊,深渊也在用 pipe_physrw 凝视你。
🎯 当前适配
| 设备 | 代号 | 芯片 | 内核版本 | 状态 |
|---|---|---|---|---|
| Redmi K70E | duchamp | MT6897 (Dimensity 8300) | 6.1.138-android14-11 | ✅ |
其它机型见
src/targets/目录(原项目包含的参考配置,未实际验证)。
🧠 漏洞链
| 阶段 | 技术 | 描述 |
|---|---|---|
| 1. KASLR 泄漏 | pselect slide 侧信道 | 利用 nfulnl_log_packet 数据别名读 _stext |
| 2. FOPS 劫持 | pselect 任意栈写 | FUTEX_CMP_REQUEUE_PI + 竞争条件改 ops 表 |
| 3. 物理读写原语 | pipe_buffer ops 伪造 | 伪造 pipe_buf_ops → 获得任意内核 phys rw |
| 4. 提权 | patch cred + seccomp + selinux | 改 cred uid=0、cap 全满、关 seccomp、关 selinux |
| 5. 持久化 | 嵌入式 KernelSU | 写入并启动 ksud(KernelSU 守护进程) |
🎭 用户故事
710 解锁节
用户: "我的 K70e 能解锁吗?"
我: "不用解锁,直接 root。"
用户: "???"
我: "w 710"
用户: "什么?"
我: "710解锁节最新力作,不是解锁BL,是解放手机。"
第一次开机
用户: "为什么我的手机重启了?"
preload.so: "别慌,我在提权。"
用户: "KernelSU 是什么?"
preload.so: "就是你手机上现在跑的 root 管理器。"
KernelSU 集成
用户: "root 之后怎么管理?"
ksud: "你好,我是 KernelSU 守护进程。"
用户: "你能干什么?"
ksud: "我可以给应用授权 root。"
用户: "你不是系统自带的吧?"
ksud: "我是嵌入在 preload.so 里的。"
用户: "牛逼。"
翻车现场
用户: "我刷了你这个,变砖了!!!"
我: "你什么机型?"
用户: "iPhone 14。"
我: "......你认真的?"
用户: "我看你说 710 解锁节就来试试。"
我: "710 是 Xiaomi 14 的代号之一,不是 iPhone 14。你走吧。"
⚙️ 工作原理
- 加载 preload.so — 注入任意应用(
LD_PRELOAD),触发__attribute__((constructor)) - 泄漏 KASLR 基址 — 通过
pselect侧信道 + nfulnl_log_packet 数据别名读取_stext - 劫持 FOPS 表 — 利用 futex PI 竞争条件 + pipe 操作改写文件操作的 ops 指针
- 获得 phys rw — 伪造
pipe_buf_ops,实现任意内核物理地址读写 - 修补 cred — 找到 root child 进程的 cred,改 uid=0、cap 全满、sid=kernel
- 关安全机制 — 关 seccomp、清 TIF_SECCOMP、写 selinux enforce=0
- 启动 KernelSU — 提取嵌入的 ksud 到
/data/local/tmp/ksud,启动 KernelSU 守护进程
📦 使用方式
前置条件
- Xiaomi K70e (duchamp) 或其它支持的设备
- 已解锁 Bootloader(或不解锁的临时 root 也支持)
- ADB 调试已开启
- 一个不怕变砖的勇气
快速开始
# 从 Release 下载 preload.so
wget https://github.com/Colorful-glassblock/duchamp-root/releases/download/v1.0/preload.so
# 推送到设备
adb push preload.so /data/local/tmp/
# 通过 LD_PRELOAD 注入任意应用触发
adb shell
su -c "LD_PRELOAD=/data/local/tmp/preload.so your_app"
或者使用我们提供的注入脚本(TODO)。
自行编译
# 需要 NDK 或 Termux 的 aarch64-linux-android-clang
make PROJECT=duchamp
# 输出在 build/duchamp/bin/preload.so
📂 文件结构
├── Makefile # 构建系统
├── assets/
│ └── (待补充)
├── build/
│ └── embed/
│ └── ksud # 嵌入的 KernelSU 守护进程二进制
└── src/
├── main.c # 入口 + 线程管理
├── preload.c # LD_PRELOAD 加载器 + 嵌入式文件写入
├── root.c # 内核提权 + cred 修补 + su/ksud 安装
├── slide.c # KASLR 侧信道泄漏
├── fops.c # FOPS 劫持
├── pipe.c # pipe_buffer 物理读写原语
├── ksud_blob.S # 嵌入 ksud 二进制
├── offset.h # 内核偏移通用头
├── common.h # 全局常量 + 函数声明
├── kernelsnitch/ # Kernelsnitch 绕过
└── targets/
├── duchamp/
│ └── target.h # duchamp 专属偏移
├── blazer-CP2A.260605.012/
├── caiman-CP2A.260605.012.C1/
├── comet-CP2A.260605.012.C1/
├── komodo-CP2A.260605.012.C1/
├── tegu-CP2A.260605.012/
├── tokay-CP2A.260605.012/
└── ... # 其它机型 target.h
🧩 依赖
aarch64-linux-android-clang(NDK r29 或 Termux 版本)lld(LLVM 链接器)make+git- 一颗强大的心脏(变砖预警)
🛡️ 免责声明
本工具仅供学习研究使用。
解锁 Bootloader 可能导致保修失效。
Root 设备可能导致变砖、数据丢失、银行 App 无法使用。
如果你因此被女朋友甩了,那是你自己的问题。
如果你刷了变砖来找我,我会笑你。
710解锁节快乐!🚀
💡 彩蛋 / FAQ
Q: 为什么叫 710 解锁节?
A: 7 月 10 日。不是 711(便利店),不是 709(不知道什么东西)。是 710。这一天我们不解锁 BL,我们解放手机。
Q: 710 和 Xiaomi 14 有什么关系?
A: Xiaomi 14 的代号之一是 frankel 开头的设备,不是 shennong。等等,710 是节日不是代号...
Q: QwQ?
A: 情绪稳定(假的)。
Q: 有 su 吗?
A: 没有,只有 KernelSU。需要 su 的话装个 KernelSU 管理器自己开。
Q: 支持其它机型吗?
A: 看 src/targets/ 目录。你的机型在里面就支持,不在就自己加。
Q: 我能在没有解锁 BL 的情况下用吗?
A: 可以,LD_PRELOAD 注入不需要解锁 BL。但是重启后需要重新注入。
Q: 会触发 Kernelsnitch 吗?
A: 已经内置了 Kernelsnitch 绕过,但如果你被检测到了,那是 skill issue。
Q: 114514?
A: はいはいわかりました草
📖 英文
🤔 这是什么
Xiaomi K70e (duchamp) 一键 root 工具,基于 CVE-2026-43499 (IonStack) 内核漏洞利用,集成 KernelSU 守护进程。
通俗版:点一下,就 root,完成。
710 节日版:7 月 10 日。不是 7 月 11 日(便利店),也不是 7 月 9 日(谁在乎呢)。7 月 10 日。在这一天,我们不解锁引导加载程序,我们解放手机。
哲学版:当你凝视 /proc/ 深渊时,深渊也用 pipe_physrw 凝视着你。
🎯 支持的设备
| 设备 | 代号 | 芯片 | 内核 | 状态 |
|---|---|---|---|---|
| Redmi K70E | duchamp | MT6897 (Dimensity 8300) | 6.1.138-android14-11 | ✅ |
src/targets/下的其他设备是原项目的参考配置,未经验证。
🧠 漏洞利用链
| 阶段 | 技术 | 描述 |
|---|---|---|
| 1. KASLR 泄漏 | pselect slide 侧信道 | 通过 nfulnl_log_packet 数据别名读取 _stext |
| 2. FOPS 劫持 | pselect 任意栈写入 | FUTEX_CMP_REQUEUE_PI 竞争条件 → 覆写 ops 表 |
| 3. 物理读写原语 | 伪造 pipe_buf_ops | 伪造管道缓冲区操作 → 任意内核物理读写 |
| 4. 提权 | 修补 cred + seccomp + selinux | uid=0,完整能力,禁用 seccomp,禁用 selinux |
| 5. 持久化 | 嵌入式 KernelSU | 写入并启动 ksud(KernelSU 守护进程) |
🎭 表情包画廊
710 节日
用户: "我能解锁我的 K70e 吗?"
开发者: "不用解锁,直接 root。"
用户: "???"
开发者: "w 710"
用户: "啥?"
开发者: "710 解锁节。不是解锁 BL,是解放手机。"
首次启动
用户: "为什么我的手机重启了?"
preload.so: "别慌,我正在提权。"
用户: "为什么 KernelSU 在我的手机上?"
preload.so: "我放的,不用谢。"
KernelSU 集成
用户: "之后如何管理 root?"
ksud: "嗨,我是 KernelSU 守护进程。"
用户: "你能做什么?"
ksud: "为应用授予 root 权限。"
用户: "你不是内置的吧?"
ksud: "我嵌入在 preload.so 中。"
用户: "不错。"
变砖报告
用户: "我刷了你那玩意儿,现在变砖了!!!"
开发者: "什么设备?"
用户: "iPhone 14。"
开发者: "……你认真的?"
用户: "你说 710 节日,我就试了。"
开发者: "710 是 Xiaomi 14 的代号之一,不是 iPhone 14。出去。"
⚙️ 工作原理
- 加载 preload.so — 通过
LD_PRELOAD注入任意应用,触发__attribute__((constructor)) - 泄漏 KASLR 基址 — 通过 nfulnl_log_packet 数据别名的
pselect侧信道读取_stext - 劫持 FOPS 表 — futex PI 竞争条件 + 管道操作覆写
- 获取物理读写 — 伪造
pipe_buf_ops实现任意内核物理内存访问 - 修补 cred — 找到 root 子任务,修补 uid=0、完整能力、内核 sid
- 禁用安全机制 — 修补 seccomp,清除 TIF_SECCOMP,selinux enforce=0
- 启动 KernelSU — 提取嵌入的 ksud 到
/data/local/tmp/ksud,启动 KernelSU 守护进程
📦 使用方法
前提条件
- Xiaomi K70e (duchamp) 或其他支持的设备
- 已解锁引导加载程序(或者不解锁也行——
LD_PRELOAD两种方式都行) - 已启用 ADB 调试
- 勇敢的心
快速开始
# 从 Releases 下载 preload.so
wget https://github.com/Colorful-glassblock/duchamp-root/releases/download/v1.0/preload.so
# 推送到设备
adb push preload.so /data/local/tmp/
# 通过 LD_PRELOAD 注入任意应用
adb shell
LD_PRELOAD=/data/local/tmp/preload.so your_app
从源码构建
# 需要 NDK 或 Termux 的 aarch64-linux-android-clang
make PROJECT=duchamp
# 输出在 build/duchamp/bin/preload.so
📂 文件结构
├── Makefile
├── assets/
│ └── (待补充)
├── build/embed/ksud # 嵌入的 KernelSU 守护进程
└── src/
├── main.c, preload.c, root.c, slide.c, fops.c, pipe.c
├── ksud_blob.S # 嵌入的 ksud 二进制
├── su_daemon.c, offset.h, common.h
├── kernelsnitch/ # Kernelsnitch 绕过
└── targets/ # 设备特定的 target.h 文件
🧩 依赖
aarch64-linux-android-clang(NDK r29 或 Termux)lld链接器make+git- 坚强的心脏(变砖警告)
🛡️ 免责声明
本工具仅供教育目的使用。
解锁 BL 可能导致保修失效。
Root 可能导致启动循环、数据丢失或应用不兼容。
如果设备变砖,那是 skill issue。
如果责怪开发者,那是你的问题。
如果你笑了,那是我们的人。
710 解锁节!🚀
💡 趣闻 / 常见问题
问:为什么叫“710 解锁节”?
答:7 月 10 日。不是便利店节(7/11),也不是不知所谓的 7 月 9 日。7 月 10 日。在这一天,我们不解锁引导加载程序,我们解放手机。
问:QwQ?
答:情绪稳定(天大的谎言)。
问:能不解锁 BL 就使用吗?
答:可以。LD_PRELOAD 注入不需要解锁 BL。但重启后需要重新注入。
问:会触发 Kernelsnitch 吗?
答:已包含 Kernelsnitch 绕过。如果仍被抓到,那是 skill issue。
问:114514?
答:はいはいわかりました草
用 💀、☕、710% 的努力制作,绝对零 Comic Sans