全部文章

我们为什么做 DevPeek(一):HTTPS 解密了,Body 还是天书

2026年7月9日

21:40,群里又 @ 我

版本日前最后一晚,测试丢过来一句:

「预发登录不了,线上也有用户反馈,帮忙看下?」

不是排期里的联调。群已经在催进度了。

代理开着,HTTPS 也解得开。列表里那条 POST /api/user/login200——链路看着没问题。点开 Request,Body 却是这样:

{
  "payload": "U2FsdGVkX1+8K3v…(后面还有长长一串)",
  "sign": "a8f3c2…"
}

TLS 没挂,payload 还是一截 Base64。这类接口我们项目里跑了好几年:网关包一层 body,字段再 AES,外面再拼个 sign。平时联调也会撞上,只是那晚特别赶,容不得慢慢磨。

平时能忍,一赶就崩

说白了,我的日常差不多是这样:

复制密文,打开某个在线解密页——书签栏里这类页面我存了三个。贴进去,解出明文。后端说「把某个字段改成 X 试一下」,我就改完再加密回去,丢进 Postman 或脚本里重放。

Charles 把 HTTPS 剥干净没问题,业务层加解密却还得换工具。平时不忙,切几个窗口也就算了;一赶时间,抓包、浏览器、终端来回跳,人很容易烦。

那一晚

Request 里的 payload 解不开,我根本看不出登录卡在哪。截了屏丢进后端群:「帮看下 body 明文?」

消息发出去了,回复还没来,终端里的解密脚本已经跑起来了——干太多遍,几乎是手自己动的。

同事回了一句:

「预发用的是 B 组 key,别按生产的解。」

接口其实没挂。时间先耗在密钥和环境对错了。明文都没对齐,后面没法往下查。

然后后端提了个很小的验证:「把请求里的 userId 改成 0 再走一遍,看鉴权是不是误判。」

这就要动 Login 发出去的那条 Request。Body 同样是密的,流程还是老样子:解出来,改字段,再加密,让 App 发出一条服务端能认的包。

我在 Charles 里开了 Breakpoint,想拦下来改。打开一看,Body 全是乱码,根本动不了。只能去翻 scripts/debug/ 下那份 Python,上次动还是三个月前。Postman 也能 Send 一版,可 Header、Cookie、签名顺序跟 App 真实链路对不齐,结论始终不踏实。

测试还在群里催:「所以预发到底能不能登?」

我在这套手工流程里磨了将近一小时。回过头想,要验证的无非一两个字段。

早会前产品又丢过来:「注册流程也帮看下,加密规则和登录一样。」换个 URL,脚本复制改改——再来一轮。

组里新来的后端问:「哪个接口用哪组 key?」文档在 Confluence 里。抓包工具的界面上,当然看不到。

卡住的从来不是 TLS

Charles、Fiddler 把 HTTPS 剥干净,这件事本身很有价值。真正耗人的是再往上一层:请求 Body 仍是密文,每一次改请求、每一次重放,都还得人手完成加解密。

证书配好了,接口也是 200,群里还在催——可复制密文、对预发/生产 key、解密改字段再加密重放,这些步骤一环都省不掉。

那晚之后

早会前我脑子还停在昨晚那条 login 请求上。

代理已经坐在链路了,TLS 也剥干净了,可业务层加解密还在代理外面——站外工具、终端脚本、Postman,各干各的。改一个 userId,要验证的明明就一两个字段,却要整套手工流程再走一遍。

那晚磨完,一个很直白的念头冒出来了:能不能做一款工具,把抓包和业务加解密收进同一个地方? 代理既然已经在链路上,解密脚本、环境密钥、改参重放,就别再让人在三四个窗口之间来回切了。

大概就是这么个出发点,后来才有了 DevPeek。

头一个想收进来的,就是那晚最绕不开的一截——发出去的请求。Charles 管 TLS,我们管业务层:在代理里看懂密文、改明文、再加密回去,而且只处理请求侧,先把联调里最耗时的那块啃下来。

这就是现在的 参数转换。做法跟那晚的手工活一一对应,只是不用再离开抓包界面:

加解密配置 管「怎么解、怎么再加密回去」。预发 B 组 key、生产 A 组 key,跟抓包上下文放在一起,不必再去 Confluence 翻表;scripts/debug/ 里那套 Python 可以搬进脚本转换,常见 AES 也能用内置算法填密钥。

参数转换规则 管「哪条请求、哪个参数要转换」。对 POST /api/user/login 右键拾取 URL 和 payload,绑上加解密配置,保存一次,后面同类请求自动命中。

配好之后,日常就跟明文打交道了:详情里直接看解密后的字段;后端再说「把 userId 改成 0」,在 Mock 篡改或「调试 API」里改字、点发送,DevPeek 自动加密写回,Header、Cookie、签名顺序仍走 App 真实链路。注册接口?换条 URL 匹配,加解密配置复用就行。

列表里记的仍是客户端发出的原始报文;明文单独展示在详情里,方便对照。Postman 和三个月没动过的 Python,可以退居二线。

那晚一小时,其实就为改一两个字段。DevPeek 从这儿长出来,参数转换则是它落地的第一块——把这类验证从「手工流程」收成「改个字、点一下发送」。

下一篇预告

《我们为什么做 DevPeek(二):App 里那页 H5,在电脑上也能对着查》——手机经代理打开的内嵌网页,镜像到调试 Tab,用自研面板查 DOM、Console 和网络,不必只靠真机里硬啃。


若你也在联调里一遍遍手工处理请求体,欢迎 下载 DevPeek 试用,或到 GitHub Discussions 聊聊——参数转换教程见 官网