Web 接口的签名参数是怎么逆的

很多网站的接口带一个算不出来就 403 的参数——sign、_signature、X-Bogus、a_bogus,名字各异,原理类似。逆它的通用流程:

1. 确认参数确实是算出来的
同样的请求发两次,看这个参数变不变。变 → 含时间戳或随机数;不变 → 纯粹由其他参数派生。

2. 定位生成位置

  • XHR/fetch 断点最有效:DevTools → Sources → XHR breakpoints,填接口 URL 片段。请求发出前会断在调用栈上,往上翻就能找到拼参数的地方
  • 搜参数名。混淆过的话直接搜不到,但可以搜赋值的目标——比如 headers[ 或者 Object.assign
  • Hook XMLHttpRequest.prototype.setRequestHeader 和 fetch,打印调用栈

3. 抠出算法
找到之后有两条路:

  • 还原成本地实现:把逻辑翻译成 Python/Go。最干净,但混淆重的时候工作量大
  • 直接跑原 JS:把那段代码连同依赖抠出来,用 Node 或 PyExecJS 执行。快,但要处理浏览器环境依赖(window、document、navigator),通常要补环境

4. 补环境
纯 JS 跑不起来往往是因为代码里检测了浏览器特征。常见做法是 mock 一个最小的 window/navigator。有现成的 jsdom,但很多时候手动补几个属性更轻。

5. 验证
拿还原的算法算一遍,和浏览器里真实发出的对比。一致才算完——中间步骤看着对不代表结果对。

说明边界:这里讨论方法和原理。具体针对某个站点的绕过工具、可直接使用的破解成品不要发。

2 个赞