一款面向前端逆向与调试场景的 Chrome 扩展,提供 Hook 注入、日志追踪、AST 分析、代理切换等能力,覆盖常见的 JS 调试工作流。
- 打开 Chrome,地址栏输入
chrome://extensions/ - 右上角开启 开发者模式
- 点击 加载已解压的扩展程序,选择本项目根目录
- 工具栏出现扩展图标即安装成功
点击工具栏图标打开 高级控制台,所有开关实时生效,无需刷新扩展。
注意:部分功能(Hook、注入)需要先刷新目标页面才能在页面上下文中生效。
| 开关 | 作用 |
|---|---|
| 总开关 | 全局启用/禁用所有 Hook 能力。关闭后其余开关不生效 |
| 输出日志 | 实时开关调试日志输出,无需刷新页面 |
| 注入代码 | 将配置页中编写的自定义脚本注入到当前页面 |
| 替换返回值 | 启用返回值替换逻辑(在配置页中配置规则) |
| PAC 代理 | 一键启停 PAC 代理配置,快速切换网络环境 |
点击控制台中的 打开配置页面 按钮,进入详细配置界面。配置页包含六个模块:
对常见 JS API 进行 Hook,拦截并记录调用。
| 配置项 | 说明 |
|---|---|
hook-Function |
Hook Function 构造函数,拦截动态函数创建 |
hook-eval |
Hook eval,记录动态执行的代码(注意:eval 使用闭包上下文时可能报错) |
remove-dyn-debugger |
自动移除动态插入的 debugger 语句(需先启用 hook-Function 或 hook-eval) |
hook-settimeout |
Hook setTimeout,拦截定时器 |
hook-setinterval |
Hook setInterval,拦截轮询定时器 |
hook-random |
启用随机性固定系列功能 |
└ random-freeze |
让 Math.random() 固定返回 0.5 |
└ random-fake |
让 Math.random() 变成可预测的伪随机(覆盖 freeze 配置) |
└ time-freeze |
固定时间函数返回值(填入时间戳,避免影响 Cookie 建议用当前时间戳) |
└ time-performance |
固定 performance.now() 返回值 |
日志过滤选项(影响全部 Hook 输出):
- URL 正则过滤:只对匹配正则的 JS 文件输出日志,聚焦目标文件
- 请求数量限制:每个接口最多输出 N 条日志,防止刷屏(默认 30)
在编辑器中编写 JS 脚本,开启控制台 注入代码 开关后,每次页面加载时自动注入执行。
适用场景:
- 提前绑定调试代码
- 覆盖页面全局变量
- 注入辅助工具函数
- PAC 代理配置:填写 PAC 脚本内容,配合控制台 PAC 代理开关使用
- 返回值替换:编写替换函数,拦截并修改指定接口的返回结果
内置 Babel 解析能力,可对混淆 JS 进行 AST 层面的分析与还原。
提供常用调试模板,包括 RPC 远程调用桩等,可直接复制使用。
对 JS 代码进行混淆处理,用于测试 Hook 效果或输出保护代码。
| 按钮 | 功能 |
|---|---|
| AST 工具 | 打开 AST 资源管理器,可视化分析 JS 语法树 |
| 文本对比 | 打开 Diff 工具,对比两段代码的差异 |
| 生成临时环境 | 自动开启 DOM Hook 相关配置,生成可供调试的临时沙盒环境 |
| 生成高级环境 | 注入高级环境构建脚本(功能开发中) |
在任意页面右键,可使用以下快捷功能:
| 菜单项 | 说明 |
|---|---|
| 打开 AST 动态挂钩 | 附加调试器,动态拦截 AST 相关操作 |
| 挂钩并记录事件 | 记录页面所有事件操作,按 ESC 停止并将结果保存到剪贴板 |
| 拷贝当前页面资源 | 将页面已加载的 JS/CSS/HTML 资源导出为 clone_cache.js |
| 拷贝当前页面 | 导出当前页面完整 HTML 结构为文件 |
| 修改发送请求 | 拦截并修改页面发出的 XHR/Fetch 请求 |
拷贝页面资源使用步骤:
- 右键 → 拷贝当前页面资源(首次会开启调试模式)
- 刷新目标页面,等待资源加载完毕
- 再次右键 → 拷贝当前页面资源,下载
clone_cache.js
- 配置页开启
hook-eval+hook-Function - 开启 总开关,刷新目标页面
- 打开 DevTools Console,查看 Hook 日志定位混淆入口
- 使用 AST 工具 进行语法树分析
- 配置页开启
hook-random→random-freeze - 刷新页面,
Math.random()固定返回0.5 - 多次执行相同操作,输出结果一致,便于 diff 对比
- 配置页「注入代码」模块编写调试函数
- 控制台开启 注入代码 开关
- 刷新目标页面,脚本自动执行
- 配置页填写 PAC 代理脚本
- 控制台一键开关 PAC 代理,无需进系统代理设置
v-jstools/
├── manifest.json # 扩展配置(MV3)
├── background.js # Service Worker,处理右键菜单与调试器附加
├── popup.html / popup.js # 控制台弹窗
├── options.html # 详细配置页
├── inject.js # 内容脚本,注入到所有页面
├── devtools.html # DevTools 面板
└── tools/ # 工具库
├── _config_hook_list.js # Hook 配置列表
├── common.js # 公共工具函数
├── astexplorer_babel.js # AST 解析工具
├── diff_text.html # 文本对比页面
├── env_maker.js # 高级环境构建脚本
├── window_hooker.js # Window 对象 Hook
├── replacer.js # 返回值替换逻辑
└── redirect.js # 请求重定向工具
| 权限 | 用途 |
|---|---|
storage |
持久化配置项 |
activeTab / tabs |
获取当前标签页信息,注入脚本 |
debugger |
附加 Chrome 调试器,支持动态 Hook |
contextMenus |
注册右键菜单 |
scripting |
向页面注入脚本 |
host_permissions: * |
对所有网站生效 |
- 扩展使用 Manifest V3,部分旧版 API 行为可能不同
- 附加调试器(
debugger权限)后,DevTools 会显示"正在调试"提示,属正常现象 - 固定时间戳功能可能影响 Cookie 有效期,建议使用当前时间戳而非过去时间
hook-eval对依赖闭包上下文的 eval 代码可能产生报错,视情况关闭