jshook 中文文档 下载 App

调试 hook 脚本——日志、空脚本定位、逐个加回

先分清楚是哪类问题

Hook 脚本出问题一般就两大类:

症状可能原因
目标应用一开就闪退注入时机太早、脚本代码本身崩溃、和目标应用生命周期冲突
脚本没反应(想 Hook 的行为没变)Hook 没生效(重启了吗?框架选对了吗?)、Hook 写错类名/方法名
悬浮窗不显示增强渲染不支持、modmenu 创建失败、脚本没跑到那
控制台没输出日志没开、console.log 被吞了、脚本根本没运行

工具一:日志

JsHook 的日志面板是最直接的调试入口。确保:

  1. 目标应用选对了框架(fridamod 等)
  2. 开了 Hook 服务
  3. 脚本里有明确的 console.log('[+] 脚本开始运行') 之类的标记行
  4. 重启目标应用
  5. 看 JsHook 日志面板

如果脚本运行了但你加的 Hook 没生效,标记行应该能看到。如果标记行都看不到,说明脚本根本没跑。

工具二:空脚本

目标应用一开就闪退,先排除是不是脚本本身的问题:

  1. 在 JsHook 里取消所有脚本勾选
  2. 保持 Hook 服务开启、框架选中
  3. 重启目标应用
  4. 如果还是闪退 → 注入本身有问题(时机太早、框架不兼容、内核驱动模式触发冲突)
  5. 如果不闪退了 → 脚本有问题,继续第三步

工具三:逐个加回

确认注入本身没问题后,逐个把脚本加回来:

  1. 只勾脚本 A → 重启目标应用 → 看会不会闪退
  2. 取消 A,只勾脚本 B → 重启 → 看会不会闪退
  3. 如果 A 单独跑没问题、B 单独跑没问题、A+B 一起跑闪退 → A 和 B 互相冲突,得调整脚本逻辑

工具四:注入节奏调整

如果是空脚本也闪退,试试调整注入时机:

  1. 关 Hook 服务
  2. 启动目标应用,等它完全跑起来(几秒,进入主界面)
  3. 开 Hook 服务(此时 Frida 会 attach 到已运行的进程)
  4. 看目标应用会不会崩

如果 attach 到运行中的进程不闪退,说明注入时机太早干扰了应用初始化流程。以后用这种"先开应用、再开 Hook"的模式。

工具五:VS Code 扩展联动

用 JS Hook 的 VS Code 扩展可以实时看日志:

配合电脑端 frida 直连模式(fridainject 框架),可以在电脑上直接改脚本、推送、看日志。

常见坑快速排查

console.log 没输出

Frida 不支持 console.log 的 %s 风格格式化(像 Node.js 那样)。如果你的代码里写了:

console.log('[+] 结果: %d', result);  // ❌ 只会输出 '[+] 结果: %d'

改成字符串拼接:

console.log('[+] 结果: ' + result);  // ✅

Hook 写错了类名

Frida 对类名不报错,只会找不到 → Hook 不生效但不崩。如果 Hook 没反应,先验证类名和方法名对不对:

Java.perform(function () {
    // 列所有已加载类,搜索目标
    Java.enumerateLoadedClasses({
        onMatch: function (name) {
            if (name.indexOf('Shop') !== -1) {
                console.log('[+] 找到类: ' + name);
            }
        },
        onComplete: function () {}
    });
});

方法名大小写

Java 方法名是大小写敏感的。getGold 和 getgold 是两个不同的方法名,Frida 不会帮你模糊匹配。