内核驱动加载与 SELinux——.ko 版本匹配 + setenforce 0
.ko 是什么
.ko 是 Linux 内核模块(Kernel Object)文件。JsHook 激活时,会自动检测当前设备的内核版本:
adb shell uname -r
# 输出类似 4.19.157-perf+
然后释放版本号匹配的 .ko 文件到 /data/adb/jshook/.kernel/,再加载进内核。
自动匹配的过程
激活流程里这一步是自动的,正常情况下你不需要手动介入:
- JsHook 检测内核版本 → 拿到版本号
- 在已部署的内核驱动包里找版本匹配的
.ko - 用 root 权限加载模块(
insmod或modprobe) - 模块成功加载 → 内核模式可用
版本不匹配怎么办
极少数情况下,JsHook 自带的内核驱动包里没有匹配当前内核版本的 .ko,导致加载失败:
- 内核驱动模式的开关能打开,但一开 Hook 服务就报错
- 日志里有
kernel driver not found或insmod failed
解决办法:
- 先确认是不是内核太特殊(某些定制 ROM、虚拟机)
- 尝试把内核驱动模式关掉,只用普通 fridamod 注入
- 去 JsHook 的 Telegram 群或 GitHub Issue 报告你的内核版本号,等作者添加支持
SELinux Enforcing 的影响
Android 默认 SELinux 是 Enforcing 模式。如果内核驱动加载被 SELinux 阻止,需要临时切成 Permissive:
adb shell su -c setenforce 0
或者在终端(MT 管理器终端或 Termux)里执行:
su
setenforce 0
怎么确认驱动加载成功
用 dmesg 查看内核日志:
adb shell su -c dmesg | grep jshook
驱动成功加载后应该能看到类似 jshook: driver loaded successfully 的日志行。
内核版本检查命令汇总
# 查内核版本
adb shell uname -r
# 查当前 SELinux 模式
adb shell getenforce
# 查驱动是否加载
adb shell su -c lsmod | grep jshook
# 或者
adb shell su -c cat /proc/modules | grep jshook
# 查内核日志
adb shell su -c dmesg | grep jshook
相关故障
内核驱动相关问题集中在:
- 驱动加载失败 → 版本不匹配或 SELinux 阻止
kernel.getModuleBase返回 0x0 → 目标 SO 没加载或驱动没正常工作- 观察者进程启动失败 → 检查
/data/adb/jshook/.kernel/权限和app_process
详见 内核模式故障排查。