对protobuf不熟悉的看看上一篇文章。
最近碰巧遇到某音,抓取弹幕的时候发现,都是乱码。
查看header头
瞬间明白,response用了protobuf格式。然后就想到protobuf数据反解析
将response数据保存成文件形式,用protoc工具进行反编译。
protoc --decode_raw < input.txt
更烦了,这么些1,2,3都不知道啥意思。
那么怎么解析成很好看的json格式呢
上面通过protoc解析出了个大概,那么里面的数据究竟是什么意思呢? 1 2 3, 1: 2:这些都是什么呢? 网上所搜一番得知:解析出来的数据中开头的1 2 3..或 1: 2: 3:的均为protobuf的tag, 是解析数据的关键值,带":"号的是字段,没":"号的是 repeated 集合.
了解知道了这些,那就可以开始还原了。逆向中是没有原始.proto文件的,对于protobuf的解析就需要依靠分析源码,自己生成一份.proto文件,以上图为例,在源码中定位到解析代码:
接下来就是对proto文件的编写
经过好长时间的编写,终于写完整。最终用python调用。