JsHook 的能力构成——Frida 注入层 + JsApi 扩展层
两层结构
JsHook 的所有能力可以清晰地分成两层:Frida 注入层(底层)和 JsApi 扩展层(上层)。两层叠加在一起,让你既可以用完整的 Frida API 做精细控制,又可以用 JsApi 里预封装好的接口快速完成常见操作。
┌─────────────────────────────────────────────┐
│ JsApi 扩展层(JsHook 自己加的) │
│ modmenu / crypto / file / kernel / storage │
├─────────────────────────────────────────────┤
│ Frida 注入层(原生 Frida API) │
│ Java.use / Interceptor / Module / Memory │
├─────────────────────────────────────────────┤
│ Frida 运行时(fridamod / rhino) │
└─────────────────────────────────────────────┘
Frida 注入层
这一层是 Frida 原生能力的完整暴露,提供:
- 运行时修改应用行为:在方法执行前/后插入自定义逻辑
- 监控方法调用与执行流:拦截任意函数,记录参数与返回值
- JS API 控制目标应用:
Java、Interceptor、Module、Memory、Process等全局对象 - 双引擎覆盖:Java 层和 native 层都能 Hook
典型 API:
Java.perform(function () {
var MainActivity = Java.use('com.example.app.MainActivity');
MainActivity.onCreate.overload('android.os.Bundle')
.implementation = function (bundle) {
console.log('[+] onCreate 被调用了');
this.onCreate(bundle);
};
});
JsApi 扩展层
Frida 只提供注入框架,日常开发中常用的操作(读写文件、加密解密、画 UI)需要自己拼。JsHook 内置了这些常用操作的封装,统一叫 JsApi。
| 模块 | 能力 |
|---|---|
modmenu | ImGui 悬浮窗菜单,支持 switch/select/slider/button/input 等组件 |
moddraw | ImGui 直接绘制图形、文字 |
crypto | 常用加密解密(AES/DES/RSA/MD5/SHA) |
file | 文件读写、目录操作 |
device | 设备信息(型号、系统版本、CPU、分辨率) |
view | 视图操作、模拟点击、坐标定位 |
kernel | 内核模式下的内存读写(需 fridamod + 内核驱动) |
memory | 守护进程 IPC 读写任意进程内存 |
storage | 本地键值存储 |
dialog | 弹窗输入、确认框 |
http / curl | 网络请求 |
canvas | 画布绘制 |
thread | 多线程控制 |
dex | DEX 操作 |
两层怎么配合
通常的用法是:Frida API 做注入和 Hook 本身,JsApi 做配套操作。
举个例子——Hook 一个游戏的金币,在金币变化时弹窗提示:
Java.perform(function () {
var GoldManager = Java.use('com.game.gold.GoldManager');
GoldManager.setGold.implementation = function (amount) {
var old = this.getGold();
this.setGold(amount); // 先调用原方法
console.log('[+] 金币从 ' + old + ' 变成 ' + amount);
// 用 JsApi 画悬浮窗
toast('金币变化: ' + old + ' → ' + amount);
};
});
注入和拦截用的是 Frida 的 Java.use() 和 implementation,弹窗提示用的是 JsApi 的 toast()。两层各干各的,互不干扰。
什么时候用哪层
- 需要精细控制 Hook 行为(拦截时机、参数修改、native 函数)→ 用 Frida API
- 需要 UI(悬浮窗、设置面板)、加密、文件、设备信息等配套操作 → 用 JsApi
- 不确定 → 先查 JsApi 有没有现成接口,有就直接用,没有再自己写 Frida 逻辑
更多细节:
- 注入框架怎么选 → fridamod / fridainject / fridagadget 对比
- 内核模式下哪些 API 不能用 → 内核模式可用/不可用 API