【免费下载链接】KernelSU
Personal fork of KernelSU Project
KernelSU 是一款运行在内核层的 Android Root 框架,除了常见的提权和模块管理,它还藏着不少实用功能。本文将带你一次性掌握 KernelSU 隐藏功能清单:从.ksurc自定义 Shell 启动文件,到 ADB Root 直连 root,再到内核级 umount 按应用卸载模块,共 10 个新手容易忽略的实用技巧,全部基于源码与官方文档整理,读完即可上手。
功能一:.ksurc —— 给 su 换一份"启动脚本" 📄
默认情况下,/system/bin/sh加载的是/system/etc/mkshrc。而 KernelSU 允许你创建/data/adb/ksu/.ksurc文件,让su启动时优先加载这份自定义 rc 文件,而不是系统的mkshrc。
实用场景:
- 在
.ksurc中写入alias别名、环境变量,每次su或 ADB shell 都自动生效 - 配合 ADB Root(见功能二)使用,
adb shell也会读取.ksurc
使用方法:用任意具有 root 权限的方式创建文件即可:
echo 'export PS1="ksu# "' > /data/adb/ksu/.ksurc内核侧在 ADB Root 时通过检查该文件是否存在,把ENV=/data/adb/ksu/.ksurc注入 shell 环境,相关逻辑可参考 adbroot.cc。官方说明见 hidden-features.md。
功能二:ADB Root —— 一条命令拿到 root 的 ADB 🔌
普通 Android 设备执行adb root往往失败,KernelSU 提供了内核级 ADB Root:当adbd进程启动时,内核钩子拦截execve,通过LD_PRELOAD注入libadbroot.so,让 ADB 守护进程直接以 root 权限运行,甚至无需手动执行adb root或setprop。
使用方法(开启功能):
ksud feature set adb_root 1要点提醒:
- 需要设备已执行过
ksud install,确保/data/adb/ksu/lib/libadbroot.so存在,否则会跳过并打印libadbroot.so not exists日志 - 开启后,
adb shell即是 root shell,同时会自动追加/data/adb/ksu/bin到PATH,直接可用ksud等命令 - 源码位于 adb_root.c,注入逻辑在 adbroot.cc
⚠️ 注意:ADB Root 仅建议在可信电脑连接时使用,公网连接风险极高。
功能三:内核 umount —— 按应用自动卸载模块 🛡️
这是 KernelSU 最核心的安全特性之一:当目标应用(未授权 root、在黑名单中的应用)从 zygote 派生时,内核会自动卸载模块挂载点,让该应用"看不到"模块的修改。
它如何工作:
- zygote 向应用 UID 切换身份时,内核钩子
ksu_handle_umount被触发 - 若新 UID 属于普通应用或隔离进程,且未被授予 root,内核遍历挂载列表逐个
umount - 还会校验父进程 SELinux 上下文是否为 zygote,防止误伤非 zygote 子进程(那会是一次灾难)
相关操作:
ksud feature get kernel_umount # 查看开关 ksud feature set kernel_umount 1 # 启用(默认开启)- 5.10 以下内核需要 backport
path_umount才能生效,方法见 how-to-integrate-for-non-gki.md - 按应用精细控制:在应用的 Profile 中开启 "Umount modules",内核侧通过 supercall.h 中的
ksu_uid_should_umount_cmd判断 - 源码:kernel_umount.c
功能四:SU Compat 模式 —— 兼容传统 su 命令的调用 🤝
很多第三方 App(或脚本)习惯直接调用/system/bin/su。KernelSU 的su_compat功能在内核层做"魔法重定向":
- 已授权的应用执行
/system/bin/su时,实际会被重定向到/data/adb/ksud,直接获得 root - 未授权的应用调用时,重定向到
/system/bin/sh,表现为"su 不存在"
ksud feature get su_compat ksud feature set su_compat 1这让你无需为每个 App 单独配置授权,传统脚本生态无缝可用。实现细节见 sucompat.c。
功能五:SULog —— 内核级 root 行为审计日志 📜
想知道"谁在什么时间以什么身份执行了 su"?KernelSU 的 SULog 把内核中捕获的 root 行为事件流式输出到用户空间,由sulogd守护进程持久化到磁盘。
特性亮点:
- 日志默认保留 3 天,单文件上限 10MB,可通过模块配置调整
- 在管理器 App 的 SULog 界面中可按应用查看每次 su 请求的详细命令
- 开启后
ksud会自动确保sulogd在运行
ksud feature set sulog 1相关实现:sulog.rs、内核侧事件队列 event_queue.c。
功能六:ksud feature —— 内核功能的开关与持久化 ⚙️
ksud feature是管理上述所有内核功能(su_compat、kernel_umount、sulog、adb_root)的统一入口,支持读写、列表、状态检查与配置持久化:
ksud feature list # 查看所有功能及状态 ksud feature get adb_root # 查询当前值 ksud feature set adb_root 0 # 关闭功能 ksud feature check kernel_umount # 检查是否被模块接管 ksud feature save # 保存当前状态到配置文件 ksud feature load # 从配置文件恢复应用保存的状态以二进制格式写入/data/adb/ksu/.feature_config(魔数0x7f4b5355),重启后由ksud自动加载,意味着你一次配置、永久生效。命令定义见 cli.rs,实现见 feature.rs。
功能七:模块配置系统 —— 持久化 + 临时键值存储 💾
KernelSU 内置了模块配置系统,配置以二进制格式存储在/data/adb/ksu/module_configs/<module_id>/,分两种:
| 类型 | 文件 | 生命周期 |
|---|---|---|
| 持久配置 | persist.config | 重启保留,卸载模块时删除 |
| 临时配置 | tmp.config | 每次开机 post-fs-data 阶段自动清除 |
ksud module config set my_setting "some value" ksud module config set --temp runtime_state "active" ksud module config list ksud module config delete my_setting限制:键最多 256 字节、值最多 1MB、每模块最多 32 项,同键读取时临时值优先。完整文档见 module-config.md。
功能八:manage.feature —— 让模块"接管"内核功能 🔗
模块可以通过配置键声明"我管理某个内核功能",例如:
ksud module config set manage.su_compat true ksud module config set manage.kernel_umount false一旦声明:
- 该功能的值由模块控制,其他模块或用户直接
ksud feature set会被拒绝(提示Feature is managed by module(s)) - 模块列表 API 会以
managedFeatures字段暴露接管关系,管理器可展示冲突,避免多个模块争抢同一功能 - 删除该配置键即解除接管
这是模块生态与 KernelSU 核心功能协调的机制,详见 module-config.md 高级功能一节。
功能九:模块 WebUI 的 JavaScript 库 —— 页面里直接跑 root 命令 🌐
KernelSU 官方提供了kernelsunpm 包,模块的 WebUI 页面可以在浏览器中调用root shell:
exec(command):一次性执行命令,返回 stdout/stderr/errnospawn(command, args):启动子进程,流式读取输出listPackages()/getPackagesInfo():查询已安装包及信息ksu://icon/{packageName}:直接引用应用图标作为图片toast()、fullScreen()、exit():UI 交互辅助
import { exec } from 'kernelsu'; const { errno, stdout } = await exec('ls -l /data/adb/ksu');这让模块开发者无需写 action 脚本,就能在 WebUI 中实现动态管理界面。API 完整文档见 js/README.md。
功能十:内核 umount 列表管理 —— 手动控制卸载队列 🧹
除了自动按应用卸载,KernelSU 还维护着一个可手动管理的"待卸载列表"(ksu_add_try_umount_cmd),ksud暴露了对应的子命令:
ksud kernel umount # 管理 umount 列表(清除/添加/删除条目) ksud kernel notify-module-mounted # 通知内核模块已挂载- 列表支持三种模式:
wipe(清空)、add(添加挂载点+flags)、del(按路径删除条目) - 元模块(如
meta-overlayfs)挂载时,把源标记为 "KSU",内核 umount 才能正确卸载——这是元模块开发者的关键约束 - 相关协议定义在 supercall.h
功能速查表 📋
| # | 功能 | 命令/文件 | 适合人群 |
|---|---|---|---|
| 1 | .ksurc自定义 shell 启动 | /data/adb/ksu/.ksurc | 脚本党 |
| 2 | ADB Root | ksud feature set adb_root 1 | 调试党 |
| 3 | 内核 umount | ksud feature get kernel_umount | 安全党 |
| 4 | SU Compat | ksud feature set su_compat 1 | 传统 su 用户 |
| 5 | SULog 审计 | ksud feature set sulog 1 | 排查问题 |
| 6 | feature 持久化 | ksud feature save/load | 高级用户 |
| 7 | 模块配置系统 | ksud module config | 模块开发者 |
| 8 | manage.feature 接管 | ksud module config set manage.* | 模块开发者 |
| 9 | WebUI JS 库 | import { exec } from 'kernelsu' | WebUI 开发者 |
| 10 | umount 列表管理 | ksud kernel umount | 进阶调试 |
常见问答(FAQ)
Q1:开启 ADB Root 后adb shell为什么没有自动加载.ksurc?确认/data/adb/ksu/.ksurc文件已创建且非空;ADB Root 通过ENV环境变量注入,文件不存在则回退默认行为。
Q2:内核 umount 对 5.10 以下内核无效?低版本内核缺少path_umount支持,选项只会被保存为配置而不实际卸载,需按官方文档手动 backportpath_umount到fs/namespace.c。
Q3:模块声明了manage.su_compat后,我自己还能改吗?不能直接改。ksud feature set会提示该功能正被模块管理;删除模块中的manage.su_compat配置键即可解除。
Q4:SULog 日志存在哪里?由sulogd以 700 权限的专用目录写入,默认保留 3 天,可在管理器 SULog 界面查看按应用分类的记录。
总结
KernelSU 的强大不仅在于内核级 Root,更在于这些藏在ksud命令、配置文件和内核钩子背后的细节能力。.ksurc让你的 shell 更顺手,ADB Root 让调试效率翻倍,内核 umount 则默默守护着系统对普通应用的"干净"。配合 feature.h 中定义的四大功能位,善用ksud feature系列命令,你就是自己设备的完全掌控者。
⚠️ 安全提醒:以上功能(尤其 ADB Root 与 SULog 关闭)都会扩大攻击面,请仅在可信环境使用,并保持 KernelSU 与元模块更新。
【免费下载链接】KernelSU
Personal fork of KernelSU Project
相关推荐
终极Klib实用指南:10个鲜为人知的高效技巧让你的C项目飞起来
终极Klib实用指南:10个鲜为人知的高效技巧让你的C项目飞起来 Klib作为一款轻量级独立C语言库,凭借其高效的数据结构和算法实现,成为众多C项目的秘密武器。
生物信息学科学计算高性能计算10个Gadgetbridge隐藏功能:你可能不知道的实用技巧
10个Gadgetbridge隐藏功能:你可能不知道的实用技巧 Gadgetbridge是一款开源的Android应用,旨在替代各大厂商封闭的智能设备应用。它不
移动开发智能硬件可穿戴如何用Whisper Diarization实现智能多说话人语音识别与分离
如何用Whisper Diarization实现智能多说话人语音识别与分离 Whisper Diarization是一个基于OpenAI Whisper的强大语
语音人工智能深度学习AI 应用CLINLP
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考