抖音web私信列表协议分析

抖音web私信列表协议分析

知识中心 启元科技 2026-06-22 9 次阅读

抖音私信怎么拿到明文数据?一次完整的协议分析实录

在所有自媒体平台里,私信这块的协议是最难啃的,抖音也不例外。它的私信互动走的是 WebSocket,而私信列表是直接用 HTTPS 拉的,但不管哪一条,拿回来的数据都被编码过,得自己转码才能看懂。这篇就把我一步步抠出抖音私信明文的全过程记录下来,做矩阵、做自动化的朋友可以照着捋一遍思路。

先看清楚抖音私信的传输方式

动手之前先把底摸清楚:私信的发送和互动是 WebSocket 协议,实时性强;私信列表则是普通的 HTTPS 接口直接返回。两条路返回的数据都不是明文,而是经过一层编码,所以核心问题只有一个——找到那个负责编码、解码的入口函数。

第一步:从创作者后台的私信管理进去

直接登录抖音创作者后台,进互动管理里的私信管理。这里是私信数据的源头,调试也从这个页面开始。

抖音创作者后台互动管理中的私信管理页面

第二步:盯住 get_by_user_init 这个接口

按 F12 打开调试,切到 Network。翻接口的时候很快就注意到了 get_by_user_init——它返回的数据体明显比别的接口大,而且内容是加密过的一长串,一看就很可疑,私信列表大概率就藏在这里。

Network 面板中抖音私信接口 get_by_user_init 的加密返回数据

第三步:顺着调用栈找到 GetMessagesByUserInitV2

光看返回值没用,得知道这串编码是谁生成、谁解析的。点开这个请求的 Initiator 看调用栈,往上翻就找到了 GetMessagesByUserInitV2 这个方法,私信初始化的逻辑就在它这一条线上。

通过 Initiator 调用栈定位到 GetMessagesByUserInitV2 接口
继续跟踪 GetMessagesByUserInitV2 的调用链路

第四步:跳进去找到 decode 解码函数

顺着调用链一层层往里跳,最后落到了真正处理请求数据的地方。这里有个名字直白的 decode 函数,编码、解码十有八九就是它干的。跳进函数实现一看,运气不错——抖音这段代码没做混淆,逻辑清清楚楚摆在眼前。

在调用链中定位到处理私信数据的请求接口和 decode 函数
未做混淆的抖音 decode 解码函数源码实现

第五步:验证编码后的内容就是 Uint8Array

读 decode 的实现,发现它接收的参数是 Uint8Array。为了确认 get_by_user_init 返回的那串编码字符就是这个 Uint8Array,我顺手写了个小脚本,把返回的 base64 转成 Uint8Array,再跟接口里的数据对一对。

自己编写的 base64 转 Uint8Array 验证脚本
base64 转换结果与接口返回数据的逐字节比对

把前面 9 个字符仔仔细细核对了一遍,果然和我猜的一样,完全对得上。到这一步,核心的编码入口就算彻底锁定了。说白了抖音在这里并没搞什么花哨的加密,本质上就是做了一层字符编码转义,接下来只要把 decode 这套 JS 环境抠出来,就能在外面复现解码。

最后:明文私信数据到手

环境抠干净之后跑一遍,私信内容就完整地以明文呈现出来了,效果如下图。整条链路走下来其实并不玄乎,难点不在加密强度,而在于有没有耐心顺着调用栈一层层找到那个 decode 入口。

成功解码后得到的抖音私信明文数据效果

抖音私信这块就分析到这里。思路通了之后,剩下的就是工程化的事情——把解码逻辑沉淀进自己的矩阵工具里,私信的采集、同步、消息管理就都能串起来了。

返回资讯列表