抓包+逆向app分析protobuf

萬事俱備,只欠東風。
前面的實驗環境已經搭好了。下面來抓包分析下,看看protobuf協議在抓包軟件上長什麼樣子。

首先明確我們的目標。我們的最終目標是還原proto文件,有了這個文件,我們就能對數據做序列化和反序列化,最終用python請求和解析數據。

1.抓包分析

拿到一款app(前面的demo),首先抓包

如果協議頭是application/x-protobuf,那麼charles可以大致解析出來響應的文本,甚至可以看到序號以及類型。注意這個前面的1,2,3不是charles自動標的序號,而是proto文件裏面message中定義的字段編號。爲了驗證,我換了編號,請求響應如下:
在這裏插入圖片描述
如果傳輸內容不多,比較簡單的話,基本上我們根據抓包結果就可以編寫proto配置文件了。編寫proto文件的時候注意,字段編號和類型一定得對上,不然就會出現問題。
但是現在大多數app,一般用了protobuf協議,基本上都是配合gzip壓縮或者結合一些加密算法一起使用,提高效率和增加安全性。由於是直接傳輸的二進制流,charles並不能正確解析協議。
比如這樣:
在這裏插入圖片描述
這時候就需要根據url或者其它一些可以利用的信息去分析app。
根據url搜,由於demo比較簡單,一下就能找到封裝請求的地方。
在這裏插入圖片描述
一下就能找到封裝請求的地方。找到 ProtobufHandle.Request聲明的地方.
在這裏插入圖片描述
這樣就找到了它的編號。然後結合上下文分析它的類型等等。可能有嵌套關係。
有些app封裝的比較好,不需要怎麼分析,直接照着它的寫也能還原出proto文件。
比如攜程app:
在這裏插入圖片描述
這裏它用的protocbuf2的版本,最後照着它的樣子寫出.proto文件即可。裏面的變量名不需要與app中的一致(建議一致,方便校驗)。但編號一定要對上。
還原了.proto文件之後,之後的操作就是用protoc轉換,然後按照它的格式字段發包就行了(參考之前的文章: flask實現python後臺,最後寫了python客戶端怎麼發包)。
還有種方式,就是如果你分析app知道它是protobuf傳輸且使用了什麼加密方式。可以利用中間人攻擊的方式,解密數據並顯示在charles上也可以。就算沒有字段說明,spider們根據頁面數據展示,也能大概猜出這些編號對應什麼意思。(或許這是沒有必要的,畢竟你連別人的加密都分析出來了。)
github上還有相關分析protobuf協議的工具

  1. https://github.com/marin-m/pbtk
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章