怎么辨认protobuf的?

如果你有protobuf的数据,想得到.proto文件,怎么办?

最近向我提问的朋友,关注这两个问题比较多,我这里简单说下思路(细节部分自行百度)。

一、如何辨认protobuf数据

还是以抖音直播弹幕为例,通过抓包,我们能拿到wss发送来的数据大概长这个样子。

JAVA抖音WSS弹幕

java protobuf 解析文本 java protobuf动态解析_字段

 我们能看到,这个数据明文和乱码同时交替存在,我们就有理由怀疑,它大概率是protobuf数据(普通的数据加密或压缩,多数情况全文乱码,或者无意义的字符串,当然也可能有其他情况,比如部分加密压缩,暂不考虑)

那么我们就可以用protobuf的方式,尝试去解析试试。

解析主要分为两步

1)拿到数据的结构,如下图。

java protobuf 解析文本 java protobuf动态解析_java_02

 方法有很多种,

比如我前文JAVA的方法,你可以创建一个空的.proto文件,去解析数据,你可以拿到未识别的数据结构,得到上图结构。

或者你可以下载官方win版工具,通过protoc 命令将数据解码为以上结构。

2)手写.proto文件

你可以根据步骤1中的数据类型及编号,直接手写proto文件了。比如这个样子。

java protobuf 解析文本 java protobuf动态解析_开发语言_03

 到此你就能得到一份.proto文件。

最后根据解析出来的数据,与网页数据/可查看的源码对比,确认每个字段代表的含义。

(这里需要很大的耐心,因为protobuf的特点,你不必把所有字段都搞清楚,只定义你需要的字段即可)

 ————————————附录——————————————

怎么知道gzip压缩的是data?

java protobuf 解析文本 java protobuf动态解析_字段_04

 看图猜。

—————————————分割线———————————————————————

如果你需要的proto文件,已有朋友分享过,还是吃现成的香,最后我还是用了git上的python相关项目中的proto文件,如果你要解析的东西没人做过,也只能自食其力。

本质上proto以及gzip都属于一种压缩算法,不算加密,所以只能起到混淆以及压缩数据作用,大家在开发时,重要数据,还是要选择加密。不要靠这种方式。

———————————————————————————————————————