jshook 中文文档 下载 App

内核模式故障排查——驱动加载 / getModuleBase 返回 0 / 观察者进程失败

故障一:内核驱动加载失败

症状

排查步骤

  1. 查内核版本:
adb shell uname -r
  1. 查 SELinux 模式:
adb shell getenforce
# 如果是 Enforcing,临时切回 Permissive
adb shell su -c setenforce 0
  1. 查驱动是否已加载:
adb shell su -c lsmod | grep jshook
# 或者
adb shell su -c dmesg | grep jshook
  1. 查部署目录权限:
adb shell su -c ls -la /data/adb/jshook/.kernel/

解决方案

原因解决
SELinux 阻止setenforce 0
内核版本没对应驱动关闭内核模式,用普通注入;或向开发者反馈
驱动文件损坏清 /data/adb/jshook/,重新激活

故障二:getModuleBase 返回 0x0

症状

var base = kernel.getModuleBase('libil2cpp.so');
console.log(base);  // 0x0

排查步骤

  1. 目标应用有没有在跑? SO 库加载了才会有基址。先确认目标应用完全启动(主界面出现)。
  2. SO 名精确匹配:区分大小写,文件名要完全一致:
// 正确
kernel.getModuleBase('libil2cpp.so');
// 错误
kernel.getModuleBase('libil2CPP.SO');  // 大小写不对
kernel.getModuleBase('libil2cpp');      // 少了 .so
  1. 驱动是否正常工作:先确认故障一不是当前问题。
  2. 用 MCP 工具验证:如果开了 MCP 服务,用 kernel_status 工具检查驱动状态。

故障三:观察者进程没启动

症状

内核模式开了,Hook 服务也开了,但脚本完全没有运行迹象(console.log 不输出)。

排查步骤

  1. 查观察者进程日志:
adb shell su -c cat /data/adb/jshook/.kernel/kernel_*.log
  1. 检查 app_process 可执行:
adb shell su -c ls -la /data/adb/jshook/.kernel/app_process
# 需要有执行权限
adb shell su -c chmod 755 /data/adb/jshook/.kernel/app_process
  1. 手动启动观察者进程测试(仅供调试,正常流程不会手动跑):
adb shell su -c 'cd /data/adb/jshook/.kernel && ./app_process /system/bin --jshook'

通用排查命令

查看内核日志

adb shell su -c dmesg | grep -i jshook

查看 /data/adb/jshook 目录结构

adb shell su -c ls -laR /data/adb/jshook/

重新激活流程

如果以上都试了还是不行,考虑重新激活:

  1. 清 JsHook 应用数据
  2. 删除 /data/system/jshook 和 /data/adb/jshook
  3. 确保 SELinux 是 Permissive
  4. 重新激活

这步有点重,执行前确认脚本和订阅都备份好了。

内核模式不可用时的替代

以上都试过还是不行?可以关掉内核模式,只用普通 fridamod 注入: