直播弹幕乱码,Protobuf 是一种二进制编码协议
content-type: application/x-protobuf 表示传输的数据采用 Google Protocol Buffers(简称 Protobuf) 二进制序列化协议。其乱码现象是正常表现,原因如下:
B站弹幕文件protobuf协议的逆向和还原目标是B站弹幕的数据还原,随便打开一个视频,直接三连 能看到真实文本,但也有 - 掘金 https://juejin.cn/post/7156985844971077662
🔍 一、协议本质:二进制高效传输
非文本格式
Protobuf 是一种二进制编码协议,数据经过压缩和结构化编码后呈现为不可读的字节流 。与人类可读的 JSON/XML 不同,直接打开或文本编辑器查看会显示乱码(如 \n\t\xe9\x99\x88...)。 设计目标
牺牲可读性以换取 更高性能:
体积比 JSON/XML 小 3-10 倍,解析速度快 5-100 倍 ;适用于高并发场景(如 B 站弹幕、实时游戏数据)。
️ 二、乱码产生的原因
编码冲突
文本工具(如浏览器、记事本)默认用 UTF-8/GBK 解码二进制数据,强行转换导致乱码 。示例:Protobuf 字节流:`\x0A\x04\xE4\xBD\xA0\xE5\xA5\xBD`
UTF-8 错误解析 → "你好" 变成 "����"
缺少协议定义
Protobuf 需预编译 .proto 文件定义数据结构,缺少该文件则无法还原原始内容 。
✅ 三、正确处理方式
开发工具解析
使用 Protobuf 官方库(如 Python 的 protobuf 包)配合 .proto 文件反序列化 :# Python 示例
from person_pb2 import Person # 导入编译后的协议类
data = b'\n\x03xxx\x10\x19' # 接收的二进制数据
person = Person()
person.ParseFromString(data) # 反序列化为对象
print(person.name) # 输出: "xxx"
网络调试工具
在 Burp Suite 或 Charles 中配置 Protobuf 插件,自动解析为结构化数据 。 避免文本编辑器
勿用记事本/VSCode 等直接打开,优先通过代码或专用工具解析 。
💡 四、典型应用场景
场景说明实时数据传输游戏状态同步、直播弹幕(如 B 站)微服务通信gRPC 框架默认采用 Protobuf 高效传输移动端 API减少流量消耗,提升 App 响应速度
总结:application/x-protobuf 的“乱码”实为优化的二进制数据,需专用工具还原。其设计权衡了可读性与性能,是高并发场景的首选协议 。
引用链接: 1.文字变天书?揭秘中文乱码背后的数字密码与自救指南 - 智能甄选 2.识别常见Content-Type的类型,助你快步如飞 - 亮哥数据实验室 3.firebug中POST 请求参数中乱码是什么鬼? - DCjanus 4.B站弹幕文件protobuf协议的逆向和还原 - 掘金开发者社区 5.JS逆向案例-万方的protobuf逆向解析 - CSDN下载 6.http协议的Content-Type类型 - CSDN博客 7.python爬虫之protobuf协议介绍 - 博客园 8.🚀四种方案解决浏览器地址栏预览txt文本乱码问题🚀Content-Type: text/plain;没有charset=utf-8 - 掘金开发者社区 9.Charles解析protobuf之初探 - www.cloud.tencent.com 10.某方protobuf闲谈 - 亮哥数据实验室 11.我用charles,手机普通抓包没有这个数据,但是走了全局代理抓包乱码,是抓到包了,但是乱码,而且还是二进制流文件,http的 - 博客 12.从浏览器到服务端的中文乱码深入分析 - 51CTO 13.通过JS逆向ProtoBuf 反反爬思路分享 - CSDN博客 14.Protobuffer java 中文序列化反序列化乱码 protobuf序列化的原理分析 - 51CTO博客 15.基于http协议使用protobuf进行前后端交互 - CSDN博客 16.浏览器参数传递中的乱码问题研究及解决策略探讨 - 开源中国 17.Steam新版登录分析,深入了解Protobuf - 看雪学苑 18.解决:乱码问题 - CSDN博客 19.简单聊聊http协议头参数之Content-Type和http状态码 415错误 - 掘金开发者社区 20.Vue Axios 返回数据出现中文乱码问题 - 51CTO博客