Skip to content

lzx1128/JS-Tools

Repository files navigation

JS-Tools — Chrome 调试扩展

一款面向前端逆向与调试场景的 Chrome 扩展,提供 Hook 注入、日志追踪、AST 分析、代理切换等能力,覆盖常见的 JS 调试工作流。


安装

  1. 打开 Chrome,地址栏输入 chrome://extensions/
  2. 右上角开启 开发者模式
  3. 点击 加载已解压的扩展程序,选择本项目根目录
  4. 工具栏出现扩展图标即安装成功

快速上手

点击工具栏图标打开 高级控制台,所有开关实时生效,无需刷新扩展。

注意:部分功能(Hook、注入)需要先刷新目标页面才能在页面上下文中生效。


控制台开关说明

开关 作用
总开关 全局启用/禁用所有 Hook 能力。关闭后其余开关不生效
输出日志 实时开关调试日志输出,无需刷新页面
注入代码 将配置页中编写的自定义脚本注入到当前页面
替换返回值 启用返回值替换逻辑(在配置页中配置规则)
PAC 代理 一键启停 PAC 代理配置,快速切换网络环境

配置页面

点击控制台中的 打开配置页面 按钮,进入详细配置界面。配置页包含六个模块:

1. DOM 对象 Hook 配置

对常见 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)

2. 注入代码

在编辑器中编写 JS 脚本,开启控制台 注入代码 开关后,每次页面加载时自动注入执行。

适用场景:

  • 提前绑定调试代码
  • 覆盖页面全局变量
  • 注入辅助工具函数

3. 修改代理 / 返回值

  • PAC 代理配置:填写 PAC 脚本内容,配合控制台 PAC 代理开关使用
  • 返回值替换:编写替换函数,拦截并修改指定接口的返回结果

4. AST 混淆解密

内置 Babel 解析能力,可对混淆 JS 进行 AST 层面的分析与还原。


5. 代码模板(RPC 等)

提供常用调试模板,包括 RPC 远程调用桩等,可直接复制使用。


6. 混淆器

对 JS 代码进行混淆处理,用于测试 Hook 效果或输出保护代码。


快捷工具

按钮 功能
AST 工具 打开 AST 资源管理器,可视化分析 JS 语法树
文本对比 打开 Diff 工具,对比两段代码的差异
生成临时环境 自动开启 DOM Hook 相关配置,生成可供调试的临时沙盒环境
生成高级环境 注入高级环境构建脚本(功能开发中)

右键菜单

在任意页面右键,可使用以下快捷功能:

菜单项 说明
打开 AST 动态挂钩 附加调试器,动态拦截 AST 相关操作
挂钩并记录事件 记录页面所有事件操作,按 ESC 停止并将结果保存到剪贴板
拷贝当前页面资源 将页面已加载的 JS/CSS/HTML 资源导出为 clone_cache.js
拷贝当前页面 导出当前页面完整 HTML 结构为文件
修改发送请求 拦截并修改页面发出的 XHR/Fetch 请求

拷贝页面资源使用步骤:

  1. 右键 → 拷贝当前页面资源(首次会开启调试模式)
  2. 刷新目标页面,等待资源加载完毕
  3. 再次右键 → 拷贝当前页面资源,下载 clone_cache.js

典型使用场景

场景一:拦截并调试混淆 JS

  1. 配置页开启 hook-eval + hook-Function
  2. 开启 总开关,刷新目标页面
  3. 打开 DevTools Console,查看 Hook 日志定位混淆入口
  4. 使用 AST 工具 进行语法树分析

场景二:固定随机值辅助对比调试

  1. 配置页开启 hook-randomrandom-freeze
  2. 刷新页面,Math.random() 固定返回 0.5
  3. 多次执行相同操作,输出结果一致,便于 diff 对比

场景三:注入自定义调试脚本

  1. 配置页「注入代码」模块编写调试函数
  2. 控制台开启 注入代码 开关
  3. 刷新目标页面,脚本自动执行

场景四:快速切换代理环境

  1. 配置页填写 PAC 代理脚本
  2. 控制台一键开关 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 代码可能产生报错,视情况关闭

About

一款面向前端逆向与调试场景的 Chrome 扩展,提供 Hook 注入、日志追踪、AST 分析、代理切换等能力,覆盖常见的 JS 调试工作流

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors