跳到正文
← 返回项目案例
CASE STUDY / VERIFIABLE WORK
Web 逆向 / 协议

淘宝 MTOP 纯算签名与分层验收

还原淘宝 H5 推荐接口:MD5 家族纯算签名、指纹头消融、会话令牌滚动,以及离线向量与服务端成功响应的双闸门。Node / Python 均可脱离浏览器完成。

MTOPMD5NodePythonAblation
黄铜印章压过数据带、一旁全息指纹帷幕被揭开的消融实验意象
视觉意象 · 不作为运行证据
EVIDENCE SNAPSHOT

先看事实状态,再读完整过程。

5 项公开结论,分别标注实现、测试、设计或未知。

IMPLEMENTED / 已经实现

纯算签名

对照抓包样本,把推荐接口签名收敛为 MD5 家族确定性纯算,Node / Python 均可脱离浏览器执行。

输入清单、归一化规则和输出形态与真实样本对齐。
TESTED / 测试 / 样本

双闸门验收

离线固定向量与服务端成功响应同时通过,推荐接口返回商品结果。

算法自检不接触网络;live 验收看业务成功与商品字段。
TESTED / 测试 / 样本

指纹消融

去掉可见指纹头后,该推荐接口仍返回成功业务结果,保护被收口到签名与会话两层。

消融证明指纹头不在这条成功路径上,算法实现保持最小闭包。
TESTED / 测试 / 样本

会话滚动

短期令牌过期后自动吸收新会话并重签,业务结果恢复。

签名算法与会话材料分开记账,失效可以在会话层修复。
UNKNOWN / 尚未证明

相邻接口

本案例覆盖推荐接口的纯算、消融、会话滚动与双闸门;登录与下单作为独立接口另开。

相邻接口沿用同一套分层方法,不并入这次完成证明。
仍缺:登录与下单接口的独立验收包

淘宝 H5 推荐接口同时带着签名、短期会话和一组指纹头。我把它们拆成可以单独完成的层:先锁定算法家族,再确认哪些字段真正进入成功路径,最后用离线向量和服务端结果一起验收。

背景与约束

如果把请求里出现的字段都当成硬门槛,分析会先掉进补环境和虚拟机。如果只看签名字节,又会把会话过期误判成算法错误。

本案例的完成标准是:

  • 推荐接口签名成为可重复的纯算;
  • 指纹头经过消融,成功路径被收口到签名与会话;
  • 会话可以滚动恢复;
  • 离线自检与服务端成功响应同时成立,并抽出商品结果。

我的工作

我先用抓包样本对齐签名的输出形态和输入清单,确认它属于确定性哈希。随后在 Node 与 Python 里实现同一套纯算,不再依赖浏览器运行时。

接着做消融:保留会话与签名,去掉可见指纹头。该推荐接口仍然返回成功,说明指纹头不在这条成功路径上。实现因此保持最小闭包,算法层可以独立维护。

算法冻结之后,会话滚动单独处理。令牌过期时吸收新会话,再重签重发,业务结果恢复。失败记在会话层,已经对齐的哈希不再被打开。

验收拆成两道闸门。离线固定向量核对签名字节;live 验收看服务端成功响应和商品字段。两道闸门同时通过,这条推荐接口才算交付。

关键链路

抓包样本
→ MD5 家族纯算
→ 指纹头消融
→ 会话令牌滚动
→ 离线向量自检
→ 服务端商品结果

哈希字节确认算法,消融确认最小闭包,会话滚动确认恢复路径,商品字段确认业务结果。

已经实现

  • 推荐接口签名收敛为 MD5 家族纯算;
  • Node 与 Python 均可脱离浏览器执行;
  • 固定向量自检与真实样本对齐;
  • 指纹头消融,成功路径收口到签名与会话;
  • 会话过期后重签恢复;
  • 离线向量与 live 成功响应双闸门;
  • live 验收抽出商品结果。

验证方式

算法层使用固定向量:同一组脱敏输入得到与样本一致的签名字节。这一步不接触网络,专门证明纯算稳定。

live 验收看服务端成功响应,以及结果里是否抽出商品。会话过期时先完成令牌滚动,再确认算法仍然成立。两道闸门分开执行,也要求同时通过。

消融实验保留会话与签名、去掉指纹头。该推荐接口仍返回成功,于是指纹头不再进入实现。最小闭包因此可维护、可回归。

从事实推出的设计判断

保护应当按成功路径拆,而不是按看起来最复杂的模块拆。不在路径上的层不进入实现,已经对齐的层用 fixtures 锁住。

签名、会话和指纹分开记账。会话失效时在会话层恢复,算法层继续使用同一套纯算。这样后续接口可以复用方法,而不必每次从补环境重新开始。

事实边界

本案例覆盖淘宝 H5 推荐接口的纯算签名、指纹消融、会话滚动和双闸门验收。登录与下单沿用同一套分层方法,作为独立接口交付。

封面为视觉意象。

相关博客