# XHR 请求解密浏览器插件 这是一个用于解密项目中加密的 XHR 请求/响应的浏览器插件。 ## 功能特性 - ✅ 自动拦截所有 XHR 请求 - ✅ 自动解密加密的请求数据和响应数据 - ✅ 在控制台输出解密后的数据 - ✅ 在插件弹窗中查看所有解密记录 - ✅ 支持导出解密记录为 JSON - ✅ 支持复制单个请求/响应数据 ## 安装方法 ### Chrome / Edge / Brave 1. 打开浏览器,访问扩展管理页面: - Chrome: `chrome://extensions/` - Edge: `edge://extensions/` - Brave: `brave://extensions/` 2. 开启"开发者模式"(右上角开关) 3. 点击"加载已解压的扩展程序" 4. 选择 `browser-extension` 文件夹 5. 插件安装完成! ## 使用方法 1. 安装插件后,访问目标网站 2. 插件会自动拦截并解密所有 XHR 请求 3. 在浏览器控制台可以看到解密后的数据输出: ``` 🔓 XHR 解密 [POST] /api/example 🔑 密钥: 1234567890123456 📤 请求: { ... } 📥 响应: { ... } ``` 4. 点击插件图标,打开弹窗查看所有解密记录 5. 在弹窗中可以: - 查看所有请求的详细信息 - 复制单个请求/响应数据 - 清空所有记录 - 导出为 JSON 文件 ## 工作原理 1. **拦截 XHR 请求**:通过重写 `XMLHttpRequest` 的原型方法来拦截所有请求 2. **获取密钥**: - 优先从页面的 `map` 对象获取(如果项目暴露了工具) - 或者从请求头计算:`(timestamp + TraceId).slice(0, 16)` 3. **解密数据**: - 请求数据格式:`{ data: "base64String" }` - 响应数据格式:`"encryptedString"` - 使用 AES-ECB 模式,Pkcs7 填充 4. **存储记录**:解密后的数据存储在插件的 storage 中 ## 注意事项 1. **依赖页面环境**:插件会尝试从页面获取解密函数,确保页面已加载完成 2. **跳过特定接口**:某些接口不需要解密(如 `v1/picture/upload`),会自动跳过 3. **性能影响**:只保留最近 100 条记录在内存中,避免影响性能 4. **安全提醒**:此插件仅用于开发和调试,请勿在生产环境中暴露敏感信息 ## 文件结构 ``` browser-extension/ ├── manifest.json # 插件配置 ├── content-script.js # 内容脚本(拦截 XHR) ├── popup.html # 弹窗界面 ├── popup.js # 弹窗逻辑 ├── background.js # 后台服务 ├── icon16.png # 图标 16x16 ├── icon48.png # 图标 48x48 ├── icon128.png # 图标 128x128 └── README.md # 说明文档 ``` ## 开发建议 如果需要从页面获取解密函数,可以考虑: 1. **修改项目代码**(不推荐):在 `request.ts` 中暴露工具到 `window` 2. **注入脚本**:插件可以注入脚本到页面,尝试访问模块系统 3. **独立实现**:在插件中直接实现 AES 解密(需要引入 CryptoJS) ## 更新日志 ### v1.0.0 - 初始版本 - 支持拦截和解密 XHR 请求/响应 - 提供弹窗界面查看记录 - 支持导出功能