网页 JS 加密/混淆算法还原 Skill(xbs-js-reverse-skill)
针对网页前端中承担加密、签名、Token 生成、风控参数计算等职责的 JavaScript 逻辑执行逆向,定位核心算法并输出可在 Node.js 中独立重放的等价实现。
能力范围
| 场景 | 方法 |
|---|---|
| 请求参数加密(AES/RSA/自定义) | 抓包定位 → 回溯加密函数 |
| 签名 / sign / token 生成 | 定位签名入口 → 还原拼接/哈希逻辑 |
| Webpack/UMD 打包 | 定位业务模块 → 提取目标函数 |
| 混淆 JS(变量乱序/字符串加密) | 先反混淆,再提取算法 |
| Source Map 泄露 | 直接还原原始源码 |
工作流程(6 阶段)
Stage 1:流量与目标定位
| 步骤 | 操作 |
|---|---|
| 1.1 | 用 DevTools Network / Charles / Fiddler 抓包 |
| 1.2 | 比对正常/异常请求,定位加密字段(如 sign、x-token、_signature) |
| 1.3 | 记录触发时机(点击/定时/登录后) |
Stage 2:JS 提取与预处理
| 步骤 | 操作 | 工具 |
|---|---|---|
| 2.1 | 保存目标 JS 文件 / 内存断点导出 | DevTools Save as |
| 2.2 | 查找 Source Map(.map)直接还原 |
判定 //# sourceMappingURL |
| 2.3 | 格式化 / 反混淆 | js-beautify / webcrack |
Stage 3:算法定位
| 步骤 | 操作 |
|---|---|
| 3.1 | 在 JS 中搜索加密字段名、关键字(encrypt、sign、md5、hmac) |
| 3.2 | 跟踪调用栈,定位参数生成函数 |
| 3.3 | Hook/will-evaluate 验证定位准确性 |
Stage 4:算法还原
| 步骤 | 操作 | 产出 |
|---|---|---|
| 4.1 | 抽取算法片段,去除 UI/网络依赖 | extracted/ |
| 4.2 | 补齐依赖的辅助函数(如内置 hash) | crypto_impl.js |
| 4.3 | 用 Node 重写等价实现 | replay.js |
Stage 5:重放验证
| 步骤 | 操作 |
|---|---|
| 5.1 | 用 replay.js 对历史请求重算签名 |
| 5.2 | 比对服务端响应是否接受 |
| 5.3 | 修正偏差(时间戳、 nonce、随机盐) |
Stage 6:交付
| 产出 | 说明 |
|---|---|
replay.js |
可独立运行的等价实现 |
REVERSE_REPORT.md |
算法说明、依赖、复现步骤 |
extracted/ |
抽取的关键函数与辅助实现 |
常用命令速查
# 格式化 / 反混淆
npx js-beautify bundle.js -o pretty.js
npx webcrack bundle.js --output deobf
# Node 重放验证
node replay.js
# 本地代理抓包
mitmproxy -p 8080
注意事项
- 合法性:仅用于自有站点调试、授权安全测试、理解合规接口。
- 反调试/风控:部分站点有参数校验、心跳、环境指纹,重放需一并还原。
- 动态值:时间戳、随机盐、设备指纹常参与签名,需完整捕获。
- 混淆前置:强混淆先走反混淆,否则难以定位入口。
- 输出隔离:还原代码剥离业务 UI 依赖,确保可在纯 Node 环境运行。