百趣云 百趣云的博客

抓包分析心法:从一条陌生流量到完整协议文档

抓包分析的本质是"提问-验证"循环

面对一条陌生的加密流量,新手盯着 hex 发呆,老手在做假设-验证的循环:猜一个结构,找证据,错了换下一个假设。本文把这套心法拆成可执行的步骤。

第一步:建立流量的"地图"

抓到包先别急着看单条,先看全貌:

  1. 会话结构:这次操作产生了几个请求?顺序是什么?(Charles 的 Sequence 视图)
  2. 域名分布:api 域名、cdn 域名、埋点域名各是什么?(分清业务流量和噪音)
  3. 协议类型:HTTP/1.1 还是 H2?明文 json 还是加密体?

全貌看完,心里要有张图:哪个请求是核心(业务数据),哪些是配套(鉴权、埋点、心跳)

第二步:找"锚点"——已知信息

分析加密流量的起点永远是已知明文锚点

  • 你输入的手机号、搜索关键词——明文里一定有
  • 响应里展示的昵称、商品名——解密后一定有
  • 时间戳——格式特征明显(10/13 位数字)
# 例:你搜索了"手机",在请求体里搜它的各种编码
手机 → UTF-8: E6 89 8B E6 9C BA
手机 → URL编码: %E6%89%8B%E6%9C%BA
手机 → Unicode: \u624b\u673a

锚点找到了,加密层的位置就确定了(锚点明文出现 = 未加密段,锚点消失处 = 加密起点)。

第三步:结构假设与验证

对加密体做结构假设,逐个验证:

假设 1:base64 系? 字符集检查 + 长度是 4 的倍数 → 试解码 → 解出乱码则考虑换表

假设 2:标准加密? 长度是 16 的倍数 → 疑似 AES/SM4 分组加密 → 去代码里搜算法常量

假设 3:自定义? 长度无规律、字符分布异常 → 准备硬读代码

每个假设都有明确的验证动作和证伪条件——这是和"盯着看"的本质区别

第四步:动静结合

纯抓包(动态)能看清"发了什么",纯逆向(静态)能看清"怎么生成的",但单独用都慢。心法是在两者之间快速切换

  • 抓包发现 sign 参数 → 静态搜 "sign" 找生成点
  • 静态看到加密函数 → 动态 hook 验证输入输出
  • 动态发现请求有 token → 静态追 token 的来源接口

卡在一个方向超过 30 分钟没有进展,就换到另一个方向找新线索。

第五步:沉淀协议文档

分析完成必须沉淀文档,否则两周后自己都看不懂:

## 接口:搜索
- URL: POST /api/v2/search
- 鉴权: header token(来自 /login 响应,有效期 2h)
- 签名: sign = md5(body + salt),salt 硬编码在 libsec.so +0x1234
- body: json,{"keyword": "...", "page": n}
- 响应: AES-CBC 加密,key=xxx iv=yyy,解出为 json
- 风控: 频率 > 30/min 触发滑块

每个字段注明"来源"和"验证方法"——这是协议文档和抓包记录的区别。

精髓:三个效率认知

  1. 30 分钟切换原则:动态/静态任一方向卡 30 分钟就切换,两个方向的线索会互相启发
  2. 锚点先行:没有已知明文锚点就不开始分析加密体——先制造锚点(自己输入特征字符串)
  3. 文档即资产:协议文档是逆向的真正产出,代码会过时,文档里的"字段来源和验证方法"是长期资产

总结

  1. 抓包分析 = 假设-验证循环,不是盯着 hex 看
  2. 五步走:建地图 → 找锚点 → 结构假设 → 动静结合 → 沉淀文档
  3. 锚点是分析的起点,没有就先制造
  4. 文档注明每个字段的来源和验证方法

交流微信:run1255

By 百趣云 阅读量:5 On