京东电商数据批量采集 h5st 逆向实战
实战案例网址:https://www.jd.com/
概述
h5st 是京东网页端(PC/H5通用基础框架生成的变体,本案例以 PC 为主)保护核心 API 的核心「签名通行证」,主要通过动态混淆 JS、多算法组合(如哈希、签名)、环境指纹绑定等技术,屏蔽无真实浏览器上下文的机器请求。
本实战通过分析京东首页无限滚动 Feed 流接口的 h5st 生成链路,快速定位关键代码与实现思路。
网页分析
首先打开京东首页,按下 F12 切换到开发者工具,找到「网络」面板:
- 刷新页面,下滑触发无限滚动
- 在过滤栏输入
functionId=pc_home_feed(从多个接口观察,functionId 是固定接口标识) - 找到返回 Feed 内容的接口,查看请求参数
关键请求参数截图:

核心技术要点
反调试与混淆
- 变量/函数名混淆:全部替换为
_$开头的无意义标识符 - 控制流平坦化:打乱原本的顺序/分支逻辑,大幅增加阅读难度
- 代码强压缩:移除所有空格、换行、注释
- 反动态调试:通过检测
debugger、开发者工具打开状态干扰断点(本次 PC Feed 接口反调试较弱)
关键加密参数(从请求中提取)
环境补全与关键定位
3.1 基础环境快速补全
逆向这类 JS 混淆库时,第一步必须补全浏览器核心全局对象(否则直接运行会报错),但不用完全补全所有属性——后续可以用「代理监控」定位缺失的关键属性:
3.2 代理监控系统(必用工具!)
代理监控可以帮我们快速定位混淆代码访问了哪些环境对象/属性,避免盲目补全。本次监控最核心的 window 和后续可能用到的 canvas(环境指纹生成常用):
注意!原代码误标记为 Python,实际为 JavaScript
关键代码定位与分析
定位思路
- 关键词全局搜索:在开发者工具「Sources」面板搜索
h5st、ParamsSign(观察到的全局对象关键字) - XHR/fetch 断点:在「网络」面板右键点击接口,选择「在 Fetch/XHR 中断点」,下滑触发断点后查看调用栈
- Hook 关键对象:如果全局搜索直接找到暴露的对象,直接 Hook 即可
核心参数与调用
本次实战通过关键词搜索直接找到了全局暴露的 ParamsSign 构造函数:
其他补全思路
如果混淆代码未暴露全局构造函数,或者环境指纹绑定过深,还可以使用浏览器插件一键补全(需要插件可私):

常见问题解决
环境补全不完整
现象:Node.js 运行混淆代码时报错 Cannot read properties of undefined (reading 'xxx')
解决步骤:
- 把报错对象/属性加入
proxyArray重新运行 - 查看控制台打印的
[GET]记录,找到缺失属性 - 在基础环境配置中添加模拟值(通常不需要完全真实的指纹,只要能通过混淆库的「弱校验」即可)
总结
本次实战通过「请求参数观察→基础环境补全→代理监控定位→关键词搜索/Hook 关键对象」的标准流程,快速定位了京东 PC Feed 流接口的 h5st 生成入口。对于更深层的算法还原(如 AES 密钥提取、SHA256 组合规则),需要进一步分析混淆后的 sign() 方法内部逻辑,后续再更新相关内容。

