【逆向实战】深入剖析盼之代售:decode__1174 参数与 Sign 签名逆向全流程
📝 前言
在爬虫与逆向工程的学习道路上,遇到带有强反调试机制和复杂混淆代码的网站是家常便饭。本文将以盼之代售网站为例,详细复盘如何突破无限 debugger 反调试,定位并还原关键的请求头 sign 参数及载荷中的 decode__1174 加密参数。
通过本次实战,你将学习到:
- 如何绕过浏览器无限 debugger 陷阱
- 利用 XHR 断点与调用栈定位关键加密函数
- 分析控制流平坦化(Control Flow Flattening)混淆代码
- 还原核心加密逻辑并实现参数生成
⚠️ 免责声明:本文仅供技术交流与学习使用,请勿将相关技术用于非法用途或侵犯他人权益。
🎯 逆向目标
- 目标网址:aHR0cHM6Ly93d3cucHpkcy5jb20vZ29vZHNMaXN0LzcvNg==
- 核心参数:
- 请求头:sign,random,pztimestamp
- 请求载荷:decode__1174 (长串加密参数)
第一阶段:环境准备与反调试绕过
1. 抓包分析
打开浏览器开发者工具(F12),进入 Network 面板,点击商品列表的“下一页”。此时观察到请求被拦截,控制台频繁触发 debugger,导致无法正常抓包分析。

2. 绕过策略
面对无限 debugger,通常有两种解决方案:
- 魔改浏览器:使用去除了 debugger 限制的定制版浏览器。
- Hook 注入:编写 Hook 代码重写 debugger 相关函数。
本次实战采用 Hook 方案,通过注入代码跳过断点
绕过成功后,页面正常加载,我们可以继续对接口进行深入分析。
第二阶段:请求头参数分析 (Sign, Random, Timestamp)
绕过反调试后,重新发起请求,观察 Header 中的动态参数:

- sign: 签名值
- random: 随机数
- pztimestamp: 时间戳
1. 定位 Sign 生成逻辑
在 Sources 面板中使用 全局搜索 (Ctrl+Shift+F) 关键字 sign。

定位到关键代码段后,通过单步调试分析发现:
- Random: 由
Math.random()生成的随机字符串。 - Timestamp: 当前 Unix 时间戳。
- Sign 算法: 由三部分拼接加上固定字符串,然后对字符串进行处理,最后对处理后的字符串进行标准 MD5 加密。
结论:头部参数逻辑相对简单,可直接在代码中复现。
第三阶段:核心难点 decode__1174 参数逆向
请求载荷中的 decode__1174 是一串长长的密文,这是本次逆向的核心难点。
1. 定位参数生成入口
由于该参数出现在 POST 请求体中,我们使用 XHR 断点 功能:
- 在 Sources 面板右侧找到 “XHR Breakpoints”。
- 添加包含 goodsList 或特定 URL 特征的断点。
- 触发请求,程序中断在发送前。

2. 栈回溯分析
查看 Call Stack (调用栈),向上追溯找到参数赋值的源头。
我们发现参数是在执行完某行代码后生成的:


执行完 QH 方法后,decode__1174 就被拼接到 url 后面了,那么 decode__1174 就是在 QH 内部所生成的
3. 深入加密函数 (QH -> W2)
进入 QH 方法,发现它调用了 W2 函数。W2 内部包含了大量的控制流平坦化混淆代码(即大量的 switch-case 和无意义的跳转)。
我们需要耐心跟进,剥离混淆逻辑,最终定位到核心拼接处:



4. 参数组成拆解
经过分析,decode__1174 是由多个子参数拼接后,传入最终的 c 函数生成的。各子参数来源如下:
| 片段 | 来源/算法 | 说明 |
|---|---|---|
| WG | SHA1 加密 | 由控制流拼接的参数计算得出 |
| WC | SHA1 加密 | 另一组参数的 SHA1 值 |
| Q | Math.random | 重写了 Math.random 后的固定值(最新版需要本地重写 random) |
| Timestamp | 时间戳 | (new Date()).getTime() |
| _waf_xxx | HTML 页面 | 请求失败或首次访问返回的 HTML 中的隐藏字段 (如 _waf_bd8ce2ce37) |
| _waf_time | 时间戳 | 生成上述 waf 字段的时间 |
| Fixed | 硬编码 | 代码中固定的常量值 |
5. 还原核心加密函数 (c 函数)
所有参数拼接完成后,进入最后的 c 函数。这是一大段高度混淆的代码,负责最终的加密输出。

c 函数内部代码:

处理技巧:
- 使用 AST(抽象语法树)工具进行去混淆。
- 或者在浏览器中直接扣取该函数,补充缺失的依赖变量,在 Node.js 环境中运行测试
第四阶段:测试与验证
逆向出的逻辑封装成 Python 或 Node.js 脚本,构造请求进行测试。
测试结果:

💡 重要提示:
除了 decode__1174 和 sign 参数外,Cookie 也是动态生成的。如果 Cookie 不正确或缺失,服务器会返回阿里滑块验证码。因此,完整的自动化方案还需要模拟 Cookie 的生成逻辑。
📚 总结
本次逆向分析涵盖了从反调试绕过到复杂混淆代码还原的全过程:
- 反调试:Hook 是应对无限 debugger 的利器。
- 定位:XHR 断点 + 调用栈是寻找参数生成位置的黄金组合。
- 混淆对抗:面对控制流平坦化,需要耐心跟踪数据流向,识别关键变量(如 SHA1、时间戳、随机数)。
- 整体观:加密参数往往不是孤立存在的,需结合 HTML 源码、Cookie、请求头等多维度信息。
作者:[青竹]
日期:2025.12.21
更多推荐

所有评论(0)