怎么辨认protobuf的?
如果你有protobuf的数据,想得到.proto文件,怎么办?
最近向我提问的朋友,关注这两个问题比较多,我这里简单说下思路(细节部分自行百度)。
一、如何辨认protobuf数据
还是以抖音直播弹幕为例,通过抓包,我们能拿到wss发送来的数据大概长这个样子。
JAVA抖音WSS弹幕
我们能看到,这个数据明文和乱码同时交替存在,我们就有理由怀疑,它大概率是protobuf数据(普通的数据加密或压缩,多数情况全文乱码,或者无意义的字符串,当然也可能有其他情况,比如部分加密压缩,暂不考虑)
那么我们就可以用protobuf的方式,尝试去解析试试。
解析主要分为两步
1)拿到数据的结构,如下图。
方法有很多种,
比如我前文JAVA的方法,你可以创建一个空的.proto文件,去解析数据,你可以拿到未识别的数据结构,得到上图结构。
或者你可以下载官方win版工具,通过protoc 命令将数据解码为以上结构。
2)手写.proto文件
你可以根据步骤1中的数据类型及编号,直接手写proto文件了。比如这个样子。
到此你就能得到一份.proto文件。
最后根据解析出来的数据,与网页数据/可查看的源码对比,确认每个字段代表的含义。
(这里需要很大的耐心,因为protobuf的特点,你不必把所有字段都搞清楚,只定义你需要的字段即可)
————————————附录——————————————
怎么知道gzip压缩的是data?
看图猜。
—————————————分割线———————————————————————
如果你需要的proto文件,已有朋友分享过,还是吃现成的香,最后我还是用了git上的python相关项目中的proto文件,如果你要解析的东西没人做过,也只能自食其力。
本质上proto以及gzip都属于一种压缩算法,不算加密,所以只能起到混淆以及压缩数据作用,大家在开发时,重要数据,还是要选择加密。不要靠这种方式。
———————————————————————————————————————