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

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