改了脚本没反应——逐项确认 Hook 开关、框架类型和重启
最常见的四个原因
按出现频率排序:
- 没重启目标应用 → 概率 90%
- Hook 服务关着 → 概率 5%
- 框架和脚本类型不匹配 → 概率 3%
- 脚本文件没保存 / 路径不对 → 概率 2%
逐项确认清单
① 目标应用重启了吗
脚本注入发生在目标应用启动时。改完脚本后没有重启目标应用,进程里跑的还是旧脚本。
确认方式:强制停止目标应用 → 重新打开。看到应用从冷启动开始(开屏动画)。
② Hook 服务开着吗
JsHook 应用详情页里目标应用的 Hook 服务开关必须是打开状态。开关关掉的话,目标应用启动时不会触发任何注入。
Hook 服务开关在:JsHook → 应用列表 → 点目标应用 → 详情页 → Hook 服务开关。
③ 框架和脚本类型匹配吗
两个硬规则:
- rhino 脚本不能配 frida 系框架(fridamod / fridainject / fridagadget)
- frida 脚本不能配 rhino 专属框架
fridamod 默认推荐但只认 frida 类型脚本。如果你用的是 rhino 脚本(Xposed 风格 API),要选对应的 rhino 框架选项。
判断方法:看脚本里用的 API。用了 Java.use() / Interceptor → frida 类型。用了 Xposed 静态方法 → rhino 类型。
④ 脚本文件真的改对了吗
- VS Code 推送后,JsHook 里的脚本是不是真的更新了(对比时间戳或文件大小)
- 手动编辑的话,文件有没有保存?存到 JsHook 实际读取的脚本目录了吗?
- 有没有同名脚本在仓库订阅和手动导入里出现冲突?
验证 Hook 是不是真的生效
以上都确认了还是没反应?加一行日志验证 Hook 到底有没有跑:
Java.perform(function () {
console.log('[★★★] Hook 脚本开始运行 ★★★');
console.log('[★★★] 当前应用: ' + runtime.packageName);
var Shop = Java.use('com.example.Shop');
console.log('[★★★] Shop 类找到: ' + Shop.$className);
Shop.buy.implementation = function (itemId) {
console.log('[★★★] buy 被调用了!itemId: ' + itemId);
return this.buy(itemId);
};
});
重启目标应用后看 JsHook 日志面板。如果能看到 [★★★] 开头的日志行,说明 Hook 跑起来了——问题在脚本逻辑里。如果连 [★★★] Hook 脚本开始运行 ★★★ 都看不到,说明脚本根本没跑,回头检查前面的确认清单。
终极武器:空脚本测试
把脚本内容全部删掉,只留一行:
console.log('[TEST] 空脚本也能跑');
勾选这个空脚本 → 重启目标应用 → 看日志里有没有 [TEST]。
- 空脚本能跑 → 你的脚本逻辑有问题(类名写错、方法找不到等)
- 空脚本也不跑 → Hook 服务/框架/重启流程有问题,回到前面排查