In-memory kernel privilege escalation for Lenovo Legion Y700 2023 (TB320FC) exploiting CVE-2025-21479, a Qualcomm Adreno GPU SMMU flaw, with ReSukiSU root management.
English | 简体中文
联想拯救者 Y700 2023(TB320FC)的内存态内核提权方案,利用 CVE-2025-21479(Qualcomm Adreno GPU SMMU 漏洞),并通过 ReSukiSU 提供完整的 root 管理能力。
不需要解锁 Bootloader、不需要刷机、激活阶段不需要电脑。
⚠️ 仅限对你自己拥有或明确获得授权的设备进行安全研究。详见免责声明。
本项目的所有偏移与行为均针对以下设备调校。未经重新适配,不要预期在其他机型/固件上可用(详见 exploit/device_info.txt)。
| 型号 | 联想拯救者 Y700 2023(TB320FC)/ TB320FC_PRC |
| SoC | Qualcomm SM8475(骁龙 8+ Gen 1,Adreno 730) |
| 系统 | ZUXOS 1.1.350 / Android 15(SDK 35) |
| 构建 | AQ3A.240812.002(TB320FC_CN_OPEN_USER_Q00031.0_V_ZUXOS_1.1.350_ST_250418) |
| 内核 | 5.10.209-android12-9-gef44381c3e04-ab50 |
| 安全补丁 | 2025-03-05 |
| Bootloader | 已锁定(本项目不解锁) |
2026-09 已在上述固件上验证可用。
| 能力 | 实现 |
|---|---|
| 提权 | cheese exploit:KGSL SMMU 漏洞 → GPU 任意物理内存读写 → 内存态 root(uid 0 + full caps) |
| Root 管理 | ReSukiSU(KernelSU fork)以 late-load 模式加载 kernelsu.ko;su 由内核 hook 提供(u:r:ksu:s0) |
| SELinux | 激活后恢复 Enforcing(ReSukiSU 策略规则保持在线) |
| 一键操作 | RootActivator APK 内置 exploit 与 ksud,开机后点一下即可 |
| Xposed 模块 | 通过 NeoZygisk(ptrace 注入 zygote)+ Vector 支持 |
| 持久性 | 设计上无持久化(内存态):每次重启后重新激活(约 3-4 分钟) |
| RootActivator(已激活) | ReSukiSU(工作中,2 个模块) |
|---|---|
![]() | ![]() |
左:激活成功后的 RootActivator——SELinux Enforcing、kernelsu 已加载、su 可用。 右:ReSukiSU 管理器——LKM 模式工作中,2 个模块(NeoZygisk + Vector)。
RootActivator APK
│
├─ libcheese.so ── KGSL SMMU 漏洞利用(CVE-2025-21479)
│ 1. Adreno 730 微码访问检查缺陷(SDS 包被误判为 RingBuffer)
│ 2. 伪造 CP_SMMU_TABLE_UPDATE 覆写 GPU TTBR0 → 任意物理内存读写
│ 3. 清零 selinux_state.enforcing;从固定物理地址 0xA8000000 转储内核镜像,
│ 直接从原始镜像解析 kallsyms(SM8475 无物理 KASLR)
│ 4. 将 __do_sys_capset 补丁为提权 shellcode
│ (prepare_kernel_cred(0) + commit_creds + 清 TIF_SECCOMP);
│ fork 的子进程调用 capset() → uid 0 + full caps
│
└─ libksud.so(ReSukiSU)── late-load 模式
1. kernelsu.ko 从 ksud 内嵌资产加载(手动重定位,不依赖内核符号导出)
2. install → /data/adb/ksu(ksud/busybox/bootctl)
3. su 通道就绪:/system/bin/su → 内核 hook 重定向 → u:r:ksu:s0
4. setenforce 1——恢复 Enforcing(策略规则已由 ko 注入)
关键工程点
insmod kernelsu.ko 会失败。ReSukiSU 的 late-load 自行解析符号后可正常加载。从源码构建(见构建),或从 GitHub Releases 页面下载 APK(仓库中不存放二进制)。
从 ReSukiSU Releases 下载并安装管理器 APK。
su -c 'sh /data/adb/modules/zygisksu/post-fs-data.sh'
本仓库只包含 PoC(漏洞利用)及其一键激活 app。设备侧的自定制层 (debloat 脚本、隐私 hosts 模块、Xposed 作用域工具、拉起脚本等)刻意 不入本仓库,保存在仓库之外的私有存档中。 详见 docs/ARCHITECTURE.md。
├── LICENSE / CHANGELOG.md
├── README.md / README.zh-CN.md
│
├── exploit/ PoC —— 获取 root(CVE-2025-21479)
│ ├── source/ cheese.c / kallsyms_lookup.c / adrenaline.h
│ ├── device_info.txt 目标设备参数(偏移量、已验证事实)
│ ├── build.sh 编译脚本(需 Android NDK)
│ └── README.md 边界声明、运行链、已知失败模式
│
├── app/ RootActivator —— 一键激活(附加项默认全关)
│ ├── src/ BootReceiver / HealGuardService / HealConfig / MainActivity(Kotlin)
│ ├── assets/ selfheal.sh / waiter.sh / xposed-up.sh
│ ├── native/ libcheese.so + libksud.so(由 exploit/ 构建,见 tools/fetch_assets.py)
│ ├── AndroidManifest.xml
│ ├── debug.keystore 公开 APK 使用的调试签名
│ ├── build.py 构建脚本(kotlinc + d8 + aapt2 + apksigner)
│ └── README.md 应用文档(英文)
│
├── tools/ 构建 / 巡检辅助
│ ├── fetch_assets.py 主机:准备 native 资产(exploit + ksud)
│ ├── status_check.sh 设备内:root / 模块快照
│ └── check_mods.sh 设备内:模块检查辅助
├── docs/ 文档(英文)
│ ├── ARCHITECTURE.md 链路、工程注记、根因记录
│ ├── TROUBLESHOOTING.md 失败处理、成功率数据
│ └── VECTOR.md Xposed(NeoZygisk + LSPosed/Vector)部署
└── screenshots/ 真机 PNG 证据
cd exploit
NDK=/path/to/android-ndk ./build.sh
# 产出 ./cheese(arm64)→ 用作 app/native/libcheese.so
cd app
python ../tools/fetch_assets.py # 准备 native 资产
python build.py # 需要 kotlinc + Android build-tools
# 产出 RootActivator.apk
构建接受的环境变量(详见 app/build.py):
KOTLIN_HOME、ANDROID_BUILD_TOOLS、ANDROID_JAR、KEYSTORE、JAVA_HOME。
fetch_assets.py 额外需要 RESUKISU_APK(ReSukiSU arm64 APK 的路径)以提取 libksud.so。
adb root 不可用(adbd cannot run as root in production builds)ksud soft-reboot——显示卡死时它会与
SurfaceFlinger/ActivityManager 互相死锁。请用 NeoZygisk 的 ptrace 注入替代本项目仅供安全研究与教育目的使用,且仅限用于你自己拥有或明确获得授权的设备。使用者需自行承担一切后果与法律责任。漏洞利用可能导致设备重启,极端情况下可能造成数据丢失——请先备份重要数据。