飘易博客(作者:Flymorn)
订阅《飘易博客》RSS,第一时间查看最新文章!
飘易首页 | 留言本 | 关于我 | 订阅Feed

抖音创作者平台获取私信protobuf的方法探讨

Author:飘易 Source:飘易
Categories:网络技术 PostTime:2026/1/20 18:49:52
正 文:

抖音开放平台目前已逐渐转向封闭,不再“开放”了。2025年4月14日抖音开放平台通知:

”将于2025年4月14日起停止私信群聊能力权限申请和开放。对历史已开通私信能力的外部移动/网站应用,平台将分批回收以下私信能力权限(历史开通过的将无法继续使用):近90天无调用的,平台将于公告发布之日起,直接回收私信能力权限;近90天有调用的,平台将于2025年5月19日起,分批回收私信能力权限。“


然后,5月15日继续通知:“从2025年5月19日起,平台将对有调用的应用能力权限进行分批回收,于2025年5月30日回收完毕。检测到你所属的移动/网站应用有私信能力的调用(有授权/有Webhook调用/有OpenAPI调用),为避免应用报错,请充分自查,并及时完成调整和改造。”


此时,我们手里的私信并没有真正回收。直到2025年11月26日的通知:

“为维护平台良好生态,避免隐私安全风险,平台自2025年4月14日起,对移动应用、网站应用的私信群聊能力权限做调整,详情请参考:移动/网站应用的私信群聊能力下线/回收公告。此前,你所属的移动/网站应用通过内部业务方申请了服务私信能力延期回收 。现因业务调整,重新启动回收:平台将于2025年12月26日回收服务私信能力权限。为避免应用影响,请充分自查并及时完成调整改造。”


至此,私信能力真正回收掉了。不再能收发私信。


那目前,普通客户可以拿到私信的只有2种方式:1、手机里的抖音app里;2、网页端的抖音创作者平台。


手机端要拿到私信,如果是协议式的,手机需要root的。不是协议式的,可以利用无障碍开发者方式获取,也是需要大量适配工作的,每升级一个版本都要重新适配。


本文只探讨网页端的抖音创作者平台里如何获取私信。


打开:https://creator.douyin.com/creator-micro/data/following/chat 

可以看到抖音进行了特殊的处理,POST 

https://imapi.snssdk.com/v2/message/get_by_user_init ,并且使用了 

content-type :application/x-protobuf 的协议,protobuf是Google开发的新型网络协议,压缩率非常高,想破解这个,需要 .proto文件,如果没有这个.proto文件,工作量就会非常巨大。


常用的逆向破解方法

即使没有原始的 .proto 文件,开发者通常会通过以下手段进行破解:

1、静态分析(反汇编): 如果是安卓 App 或 PC 软件,可以通过反编译代码(如使用 jadx 逆向 Java,或使用 IDA Pro 逆向 C++)。Protobuf 的解析代码通常会包含字段编号与变量名的映射关系,逆向者可以据此手动还原出 .proto 文件。

2、动态抓包与猜测: 使用工具(如 Charles 或 Fiddler)配合插件,可以将二进制流自动解析为结构化数据。通过观察数据的变化(例如:修改用户名后,哪个字段变了),可以推断出每个编号代表的含义。

3、自动化工具(protoc --decode): Google 官方工具支持在不知道结构的情况下,强制以“原始 Wire Format”打印数据。


我们这里不去破解,使用巧劲。因为我们的目的只是拿到解密后的明文,完全不需要走这么复杂的方案。


通过跟踪js调用堆栈,我们找到加解密的函数:

sendRequest(e, t) {
    return (0,
    n.__awaiter)(this, void 0, void 0, (function*() {
        const r = yield this.send(e, "POST", this.encode(t));
        return this.decode(r)
    }
    ))
}
encode(e) {
    return (0,
    s.serialize)(e).buffer
}
decode(e) {
    return o.im_proto.Response.create((0,
    s.deserialize)(this.ctx, e))
}

我们只需要在 decode 函数里,把解码后的明文数据打印出来即可。


这里可以采用浏览器打断点的方式,输出调试信息,也可以打入 logprint,输出日志。还可以使用 Chrome 本地覆盖(Local Overrides)的方式覆盖js,具体的方法就不展开细述了。


经过调试,可以看出发出请求时,包的结构为:

{
    "t": {
        "headers": {
            "aid_new": 2906,
            "app_name": "douyin_creator"
        },
        "body": {
            "messages_per_user_init_v2_body": {
                "cursor": {
                    "low": 0,
                    "high": 0,
                    "unsigned": false
                }
            }
        },
        "cmd": 203,
        "sequence_id": {
            "low": 10001,
            "high": 0,
            "unsigned": false
        },
        "refer": 3,
        "token": "YSHGAwEBBwECBIEaKUQBZwFVqNYCl1B...",
        "device_id": 0,
        "sdk_version": "0.7.2-fix.1",
        "build_number": "2f4951d:fix/douyin-creator-fix",
        "inbox_type": 1,
        "device_platform": "douyin_creator",
        "auth_type": 3,
        "biz": "douyin_creator",
        "access": "web_sdk",
        "sdk_cert": "LS0tLS1CRUdJTiBDRVJU...",
        "ts_sign": "#KVBSUXpXvAQF1rk+r6db..."
    },
    "e": "https://imapi.snssdk.com/v2/message/get_by_user_init"
}

接收到的明文数据如下:

{
     "headers": {},
     "cmd": 203,
     "sequence_id": {
          "low": 10002,
          "high": 0,
          "unsigned": false
     },
     "status_code": 0,
     "error_desc": "OK",
     "inbox_type": 1,
     "body": {
          "messages_per_user_init_v2_body": {
               "messages": [
                    {
                         "ext": {
                              "awe:from:commerce": "1",
                              "s:visible": "111",
                              "chat_scene": "normal",
                              "s:refer": "4",
                              "s:high_priority_message": "commerce",
                              "s:saas_sdk": "false",
                              "a:msg_not_float": "receive",
                              "echat_forward_msg_info": "{\"ai\":337122,\"mi\":111,\"csi\":111,\"ci\":\"111\",\"ct\":2}",
                              "s:biz_aid": "1128",
                              "a:is_server": "true",
              
作者:飘易
来源:飘易
版权所有。转载时必须以链接形式注明作者和原始出处及本声明。
上一篇:小红书创作服务平台对CEF32位版本的兼容问题
下一篇:AWStats网站统计服务器/VPS部署流程介绍
0条评论 “抖音创作者平台获取私信protobuf的方法探讨”
No Comment .
发表评论
名称(*必填)
邮件(选填)
网站(选填)

记住我,下次回复时不用重新输入个人信息
© 2007-2019 飘易博客 Www.Piaoyi.Org 原创文章版权由飘易所有