框架与脚本类型匹配——rhino 脚本不能配 frida 框架
核心规则
rhino 类型脚本不能配 frida 系框架(fridamod / fridainject / fridagadget),反之亦然。两套脚本走完全不同的注入路径。
两套系统
┌──────────────────────────────────────────────────────┐
│ JsHook 脚本系统 │
├───────────────────────┬──────────────────────────────┤
│ rhino 类型脚本 │ frida 类型脚本 │
│ ────────── │ ──────────── │
│ rhino 引擎运行 │ fridamod / fridainject │
│ 只能 Hook Java 层 │ / fridagadget │
│ Xposed 风格 API │ Java 层 + native 层 │
│ │ Frida API + JsApi │
│ 走 rhino 专属框架 │ 支持内核驱动模式 / 加密 │
└───────────────────────┴──────────────────────────────┘
怎么判断脚本类型
脚本仓库的 JSON 里每条脚本有一个 type 字段:
{
"id": "abc123",
"title": "金币修改",
"type": "frida", // 或 "rhino"
"version": "1.0.0",
"url": "https://example.com/gold.js"
}
JsHook 界面里显示脚本时会标注类型。手动导入脚本时需要你自己选类型。
框架选择界面的提示
在应用详情页选框架时,JsHook 会根据你勾选的脚本类型自动过滤可选框架:
- 只勾选 rhino 脚本 → 只显示 rhino 可用的框架选项
- 只勾选 frida 脚本 → 显示 fridamod / fridainject / fridagadget
- 同时勾选两种类型 → 理论上支持,但脚本会在不同引擎里分别运行
实际使用中建议一个应用只选一种脚本类型,避免两套引擎同时跑的复杂度。
写脚本前先确定类型
不同类型的脚本能用的 API 天差地别:
| API | rhino 脚本 | frida 脚本 |
|---|---|---|
Java.use() | ❌ | ✅ |
Interceptor.attach() | ❌ | ✅ |
Module.findBaseAddress() | ❌ | ✅ |
| Xposed 风格静态辅助 | ✅ | ❌ |
modmenu.create() | 视引擎而定 | ✅ |
| 内核驱动 API | ❌ | ✅(fridamod + 内核模式) |
不确定自己写的是哪种类型?看你用的 API:
- 用了
Java.perform+Java.use+Interceptor→ frida 类型 - 用了 Xposed 风格的静态方法(如
XposedHelpers.findAndHookMethod)→ rhino 类型
加密脚本只能选 fridamod
加密脚本是 frida 类型脚本的子集,但有额外限制:只能配合 fridamod 框架运行。fridainject 和 fridagadget 不支持加密脚本。
更多加密脚本细节见 脚本加密。