charles 怎么抓包不了了_抓包+逆向app分析protobuf

首先明确我们的目标。我们的最终目标是还原proto文件,有了这个文件,我们就能对数据做序列化和反序列化,最终用python请求和解析数据。

1.抓包分析

拿到一款app(前面的demo),首先抓包1f9c30bda030ba9c27cc527e4afcba09.png
如果协议头是application/x-protobuf,那么charles可以大致解析出来响应的文本。可以看到甚至连序号以及类型。注意这个前面的1,2,3不是charles自动标的序号,而是proto文件里面message中定义的字段编号。为了验证,我换了编号,请求响应如下:8cc9e80591a19ef3d752e2c79a8655dc.png
如果传输内容不多,比较简单的话,基本上我们根据抓包结果就可以编写proto配置文件了。编写proto文件的时候注意,字段编号和类型一定得对上,不然就会出现问题。
但是现在大多数app,一般用了protobuf协议,基本上都是配合gzip压缩或者结合一些加密算法一起使用,提高效率和增加安全性。由于是直接传输的二进制流,charles并不能正确解析协议。

比如这样:c524845dc13685e0e4d6a5a580e13dc1.png
这时候就需要根据url或者其它一些可以利用的信息去分析app。
根据url搜,由于demo比较简单,一下就能找到封装请求的地方。cf3ed4c8d2224c438b986931c91d1098.png找到 ProtobufHandle.Request声明的地方.d5478ba253c29291fefebae75099988d.png
这样就找到了它的编号。然后结合上下文分析它的类型等等。可能有嵌套关系。  

有些app封装的比较好,不需要怎么分析,直接照着它的写也能还原出proto文件。

比如携程app:  

90f300b8c86d3ba2bd507c000a34931f.png

这里它用的protocbuf2的版本,最后照着它的样子写出.proto文件即可。里面的变量名不需要与app中的一致(建议一致,方便校验)。但编号一定要对上。
还原了.proto文件之后,之后的操作就是用protoc转换,然后按照它的格式字段发包就行了(参考之前的文章: flask实现python后台,最后写了python客户端怎么发包)。 

还有种方式,就是如果你分析app知道它是protobuf传输且使用了什么加密方式。可以利用中间人攻击的方式,解密数据并显示在charles上也可以。就算没有字段说明,spider们根据页面数据展示,也能大概猜出这些编号对应什么意思。(或许这是没有必要的,毕竟你连别人的加密都分析出来了。)

github上还有相关分析protobuf协议的工具

  1. https://github.com/marin-m/pbtk

https://codeantenna.com/a/DLjQnXEu4J 

https://blog.csdn.net/m0_67696270/article/details/134331701

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章