在抓一个app的包的时候发现http的Content-type竟然是application/x-protobuf,第一次遇到这种。网上也有不少问关于这方面的,或许有人已经研究出来了,但是不肯放干货啊。只能自己探索了。
首先我用的抓包工具是Charles,抓包是能看到内容的。Charles本身是用java写的,所以很容易看到源代码。在com.xk72.charles.gui.transaction.viewers.protobuf包下面确实有一个ProtocolBuffersTreeBodyViewer$1的视图,因为jd-gui搜索代码功能有缺陷,导出jar也一直卡着,哪里开始解析的没有找到。只能从protobuf编码开始研究了。然后发现有个命令‘protoc.exe --decode_raw ’直接可以解析任意字节流了。
能看到包的内容算是解决了,但是怎么伪造protobuf包呢?答案就是保持字节流的长度不变,直接替换byte的内容。然后直接发包就可以了。
比如我在分析一个protobuf字节流的时候,拿到的二进制保存到文件里查看是这样的:
86177897654321267"006006* b8e6683bd8cf4f5997f9ff55d04da8910ÿÿÿB`
$ffffffff-c978-5f17-ffff-ffffc2e834d93.8.5.1*$手机型å·ï¼šMuMu版本å·ï¼š6.0.1BaJæ¸ é“
然后另外一个protobuf字节流拿到的二进制保存到文件里查看是这样的:
kOKc182****1121 b8e6683bd8cf4f5997f9ff55d04da891 ¤ç‹®¼©ÎÐ×Ìë2019/9/6 11:26:19
在使用‘protoc.exe --decode_raw ’查看包内容的时候,有一个int