跨浏览器(Chrome / Firefox)的敏感信息与指纹扫描 · 动态/深度扫描 · JS 逆向 Hook 辅助浏览器扩展
HAPPY JS 是一款面向 Web 安全测试与 JS 逆向工程的综合型浏览器扩展,融合了 FindSomething(敏感信息扫描)、SnowEyes(指纹/资源发现)、AntiDebug_Breaker(反调试与 API Hook) 三类项目的核心能力,并重新设计了插件 UI 与扫描引擎。采用 Manifest V3,同时适配 Chrome / Edge / Brave(Chromium 内核)与 Firefox 128+。
v1.1.0 起内置 MCP(Model Context Protocol)服务:开启后可在 Codex / Claude / Trae / Cursor 等 AI 工具中通过 MCP 协议直连本插件,调用扫描结果、指纹、路由、抓包、JS Hook 注入、页面跳转等 13 个能力,让 AI 边看边调代码、边取证。具体见下方 ### 11. MCP 服务。
基于自研正则规则集,对页面 HTML 与已加载 JS 进行分类扫描,支持以下 29 类:
| 分类 | 说明 |
|---|---|
| 域名 / IP / URL / Iframe | 资源边界识别,区分资源串与裸域名 |
| API(绝对路径 / 相对路径) | 识别 RESTful 接口、模块路径 |
| 用户名密码 / Cookie / ID密钥 | 凭证键值对、Session、JWT、云平台 AK/SK |
| 私钥/证书 / 数据库连接 / 消息队列 / 对象存储 | 私钥泄露、MongoDB/MySQL/Redis 连接串、OSS endpoint |
| 手机号 / 邮箱 / 身份证 / 公司机构 | PII 个人信息识别 |
| Windows 路径 / Linux 路径 / SourceMap / GitHub 链接 | 信息泄露线索 |
| Vue文件 / JS文件 / JS库 / 图片音频 / 文档文件 | 资源文件归类 |
| 页面路由 / 页面指纹 | 内嵌路由与框架指纹 |
云密钥识别覆盖:微信开放平台/小程序、企业微信、AWS(全前缀)、阿里云、腾讯云、京东云、Google API、GitHub/GitLab Token、支付宝、Apple、Slack、Stripe、Twilio、钉钉、飞书等近 20 种。
扫描增强:直接抓取 DOM <script src> 与 <link rel="modulepreload">(比纯正则更可靠,覆盖动态注入);扩充噪声过滤词减少误报。点击扫描项右侧的 JS 源路径可直接在新标签打开该 JS 文件。
- HTTP 响应头指纹:Server / X-Powered-By / Via / Set-Cookie 等
- Cookie 指纹:基于 Cookie 名识别常见 CMS / 框架
- 流量统计指纹:基于同源 JS 资源特征识别
- 页面内嵌指纹:Webpack / Vite / Vue / React / Angular / jQuery / Element UI / ThinkPHP / Django 等
- CDN 识别:Cloudflare / jsDelivr / unpkg
开启后通过 MutationObserver 实时监听 DOM 变化,对动态渲染(SPA、AJAX 注入、懒加载)产生的新内容即时扫描,无需手动刷新。
开启后解析 JS 文本中嵌套引用的 JS 与 webpack chunk(webpackJsonp / __webpack_require__ / chunk 映射表),递归抓取并扫描,发现被深藏的接口与密钥。
| 脚本 | 作用 |
|---|---|
| Bypass Debugger | Hook eval/Function 移除 debugger 语句,绕过无限 Debugger |
| Hook Console | 防止 JS 重写 console 方法,禁止 console.clear |
| Hook Close | 重写 window.close 防止反调试关闭页面 |
| Hook History | 拦截 history.go/back 防止反调试跳转 |
| Fixed Window Size | 固定窗口尺寸绕过控制台检测 |
| Hook CryptoJS | 打印 AES/DES/Rabbit/MD5/SHA/HMAC 算法的密钥与明文密文 |
| Math.random / Date.now / performance.now | 固定返回值便于调试 |
| 脚本 | 作用 |
|---|---|
| document.cookie | 捕获 Cookie 写入,支持关键字过滤 |
| fetch | 捕获 fetch 请求参数 |
| XMLHttpRequest.open | 捕获 XHR 初始化配置 |
| XMLHttpRequest.setRequestHeader | 捕获 XHR 请求头 |
| Storage.setItem / getItem | 捕获 localStorage / sessionStorage 读写 |
| JSON.stringify/parse | 捕获 JSON 序列化/反序列化 |
所有 Hook 脚本支持 debugger 断点 与 调用栈打印 开关,支持 固定变量值 与 关键字检索 配置。
通过主世界注入脚本(inject/vue_router.js)提取 Vue2/Vue3 Router 与 React Router 的完整路由表:
- BFS 全 DOM 定位 Vue 根(
__vue_app__/__vue__/_vnode),不限#app挂载点 - Vue3 三条路径、Vue2 四条路径取 router 实例
- 路由表 4 级回退(
getRoutes→options.routes递归 →matcher→history.matched) - 清空
beforeHooks/beforeGuards等守卫容器 + 关闭meta.auth鉴权标记,绕过登录拿完整路由 - hash/history 模式自动识别 + base 路径
- 多档延时重试(300/800/1500/3000/6000ms)覆盖 SPA 异步挂载
- 支持路径/URL 批量复制、当前标签页直接打开路由
融合 Heimdallr 的反蜜罐、特征对抗、指纹规则识别三大能力,按子标题分三个区块:
- 蜜罐域名拦截:通过
declarativeNetRequest动态规则拦截已知蜜罐 JSONP 域名(QQ 音乐/腾讯视频/微博/贴吧/搜狐/网易/豆瓣/B 站等 8 个域名) - JSONP 告警通知:单页 JSONP 蜜罐特征命中超过 10 个时弹出系统通知
- 实时展示蜜罐命中结果(URL 拦截 / JSONP 拦截 / JS 特征告警)
- 禁用页面缓存:每次页面加载时清除浏览器缓存,避免缓存影响检测结果
- Canvas 指纹干扰(Hook 页 → API Hook):Hook Canvas
toBlob/toDataURL/getImageData,向像素数据注入随机扰动,使 Canvas 指纹每次不同
- 完整集成 Heimdallr 规则库(265 条规则),监听请求 URL / 请求头 / 请求体 / 响应头 / 响应体(五维全覆盖)
- 规则分布:指纹 89 条、关键字 24 条、蜜罐 URL 拦截 4 条、蜜罐 JSONP 域名拦截 138 条、蜜罐 JS 告警 10 条
- 拦截规则 142 条(138 个域名 + 4 个 URL 特征)
- position5(响应体 20 条)通过 主世界 hook fetch/XHR + content.js 页面 HTML 扫描 实现,无需 debugger 权限、无浏览器调试提示条
- 覆盖:Web 服务器(Tomcat/IIS/JBoss/Jetty/WebSphere/WebLogic)、Java 框架(Shiro/Spring/Struts2/Dubbo)、OA 系统(致远/泛微/用友/通达/心通达/新点/帆软/蓝凌/红帆/华天/万户/金蝶/协众/金和/海昌)、CMS(WordPress/DedeCMS/Jira/Confluence/ShowDoc/米拓)、PHP 框架(ThinkPHP/Laravel)、编辑器(Ueditor/KindEditor/FCKeditor/eWebEditor)、堡垒机(Teleport/齐治/帕拉迪/H3C)、安全设备(F5 BIG-IP/绿盟防火墙/安全狗Waf/宝塔Waf)、海康威视、博达站群、向日葵、Exchange/Coremail/亿邮邮件等
- 覆盖:敏感信息(内网 IP/手机号/邮箱/身份证号/JSON 格式数据)
- 蜜罐检测:HFish 特征资源、fingerprintjs、热点溯源 JSONP 脚本等
规则库定义在 data/heimdallr_rules.js,完整保留 Heimdallr 原始规则结构与
initPrinter()索引逻辑,可自行扩展。
自动识别主页面与 iframe,按 Frame 分组展示扫描结果,可切换查看不同 Frame 的扫描数据。
- 标准模式:Hook 脚本按域名独立配置
- 全局模式:Hook 脚本注入所有网站
- 白名单:按域名跳过扫描
- 顶部右上角主题切换按钮,一键在浅色(简约中性灰 + 靛蓝)与深色(深石板)间切换
- 主题偏好持久化存储,下次打开自动恢复
在 设置页 → MCP 服务 开启后,Codex / Claude / Trae / Cursor 等 AI 工具可通过 MCP 协议连接本插件,直接调用插件能力完成 信息搜集 与 JS 调试:
- 架构:AI 工具以 stdio 拉起本地桥接进程
mcp/server.js(纯 Node.js 零依赖),扩展后台作为 WebSocket 客户端主动连入ws://127.0.0.1:<端口>(默认 10086),令牌双向鉴权 - 多客户端并存:多个 AI 工具同时配置时,首个进程成为桥接,后续进程自动降级为中继转发
- 保活与自愈:桥端 20s 心跳保活 Service Worker,断线指数退避重连 + alarms 兜底
13 个 MCP 工具:
| 类别 | 工具 | 说明 |
|---|---|---|
| 信息搜集 | get_scan_results |
获取敏感信息扫描结果(29 类,支持全 frame) |
| 信息搜集 | get_fingerprints |
HTTP 头/Cookie/页面指纹 + Heimdallr 规则命中 |
| 信息搜集 | get_routes |
Vue/React 完整路由表 |
| 信息搜集 | fetch_js |
抓取任意 JS 文件源码 |
| 信息搜集 | get_page_html / get_cookies |
页面 HTML / 站点 Cookie |
| 信息搜集 | list_tabs |
列出浏览器标签页 |
| JS 调试 | execute_js |
在页面主世界执行任意 JS 并返回结果(可访问页面变量/函数) |
| JS 调试 | list_hooks / enable_hook / disable_hook |
Hook 脚本查询与启停(可自动刷新生效) |
| 联动控制 | navigate_tab / reload_tab |
标签页导航 / 刷新 |
接入步骤:
- 本机安装 Node.js(≥ 14,推荐 18+)
- 扩展 设置页 → MCP 服务 → 开启开关,复制生成的配置片段(JSON 适用于 Claude/Trae/Cursor,TOML 适用于 Codex)
- 将片段中
<扩展目录>替换为本扩展manifest.json所在目录,写入 AI 工具的 MCP 配置文件(如claude_desktop_config.json、~/.codex/config.toml、Trae MCP 设置)。注意:Windows 路径请统一用正斜杠/(如C:/Users/xxx/HAPPY JS/mcp/server.js),反斜杠\在 JSON 字符串中必须写成\\,容易出错 - 启动 AI 会话,状态变为「已连接桥接进程」即可使用
LatentEye/
├── manifest.json # MV3 清单(Chrome + Firefox 兼容)
├── background.js # 后台 Service Worker:徽章/指纹/JS抓取/Hook注册/webRequest/Heimdallr模块
├── content.js # 内容脚本:扫描引擎(正则/动态/深度/Hook配置同步)
├── hooks.json # Hook 脚本元数据(名称/描述/分类/配置项)
├── data/
│ └── heimdallr_rules.js # Heimdallr 规则库(40条精选规则 + 拦截域名)
├── hooks/ # 17 个主世界 Hook 脚本(含 Canvas 指纹干扰)
│ ├── bypass_debugger.js
│ ├── hook_console.js
│ ├── hook_cookie.js
│ ├── hook_crypto.js
│ ├── hook_fetch.js
│ ├── hook_xhr_open.js
│ ├── hook_xhr_header.js
│ ├── hook_storage_set.js
│ ├── hook_storage_get.js
│ ├── hook_json.js
│ └── ... (共 16 个)
├── inject/
│ └── vue_router.js # 主世界注入:Vue/React 路由提取
├── popup/
│ ├── popup.html # 弹窗 UI 结构(5 页面导航)
│ ├── popup.css # 暗色主题样式
│ └── popup.js # 弹窗逻辑(扫描结果/指纹/Hook/路由/设置)
├── icons/
│ ├── icon16.png # 工具栏图标
│ ├── icon32.png
│ ├── icon48.png
│ └── icon128.png
└── tools/
└── gen_icons.js # 图标生成脚本(纯 Node.js,无依赖)
- 打开
chrome://extensions/ - 右上角开启 「开发者模式」
- 点击 「加载已解压的扩展程序」
- 选择
LatentEye/目录(包含manifest.json的目录) - 工具栏出现「HAPPY JS」图标即安装成功
访问
file://协议或localhost时需在扩展详情中开启 「允许访问文件网址」。
- 打开
about:debugging#/runtime/this-firefox - 点击 「此 Firefox」 → 「临时载入附加组件」
- 选择
HAPPY JS/manifest.json文件 - 工具栏出现「HAPPY JS」图标即安装成功
临时载入的扩展在 Firefox 重启后会移除。如需长期安装,需通过 Mozilla 签名流程。
- 打开目标网站
- 点击工具栏「HAPPY JS」图标打开弹窗
- 扫描页自动展示敏感信息分类结果,徽章显示有结果的分类数
- 顶部进度条显示扫描进度,支持结果过滤与 JSON 导出
- 多 Frame 站点可在顶部切换不同 Frame 查看结果
- 进入 设置页
- 开启 「动态扫描」 实时捕获动态渲染内容
- 开启 「深度扫描」 递归解析嵌套 JS 与 webpack chunk
- 刷新目标页面生效
- 进入 Hook 页,切换「反调试 / API Hook」子页签
- 开启所需脚本(可配置固定值、关键字、debugger、stack)
- 设置页可切换 全局模式(注入所有站点)或 标准模式(仅当前域名)
- 刷新目标页面 使 Hook 生效
- Hook 信息打印在浏览器控制台(F12)
- 在 Hook 页开启相关脚本后刷新页面
- 进入 路由页,切换 Vue / React 子页签查看完整路由表
- 支持自定义基础路径、复制所有路径/URL
| 能力 | 实现 |
|---|---|
| 跨浏览器兼容 | Manifest V3 + browser/chrome 命名空间双适配 + browser_specific_settings.gecko |
| 主世界注入 | chrome.scripting.registerContentScripts({ world: 'MAIN' }) 动态注册 Hook |
| 隔离↔主世界通信 | window.postMessage 桥接(content 隔离世界 ↔ inject/hooks 主世界) |
| 动态扫描 | MutationObserver 监听 DOM childList/characterData 变化 |
| 深度扫描 | 自研 WebpackExtractor 解析 chunk 映射表,递归 fetch 嵌套 JS |
| Hook 配置同步 | content 将启用脚本列表写入 localStorage,主世界脚本读取后初始化 |
| 反无限 Debugger | Hook eval/Function/Function.prototype.constructor,正则移除 debugger |
| 路由提取 | 主世界遍历 __vue_app__/__vue__ 根节点与 React Router 实例 |
node tools/gen_icons.js脚本使用纯 Node.js(内置 zlib)实现 PNG 编码,无需任何外部依赖,输出 icons/icon16/32/48/128.png。
# 校验所有 JS 文件
node --check background.js
node --check content.js
node --check popup/popup.js
node --check inject/vue_router.js
# 批量校验 hooks
for /f %f in ('dir /b hooks\*.js') do node --check hooks\%f扫描正则定义在 content.js 的 PATTERNS 对象中,按分类追加规则即可扩展。
- 在
hooks/下新建hook_xxx.js(参考现有脚本结构) - 在 hooks.json 追加元数据(id / name / description / category / 配置项)
- 重新加载扩展
本工具仅供授权的安全测试、CTF 竞赛、安全研究与学习使用。使用者需遵守所在地区法律法规,未经授权对他人系统进行扫描与调试可能违法。作者不对任何滥用行为承担责任。
本项目在功能设计上参考了以下优秀开源项目的思路:
- FindSomething — 敏感信息扫描
- SnowEyes — 指纹与资源发现
- AntiDebug_Breaker — 反调试与 JS Hook
- Heimdallr — 反蜜罐与特征对抗
HAPPY JS 在此基础上重新设计了扫描引擎、UI 与 Hook 注入架构,代码为原创实现。
MIT