Keniver's Blog

使用 protobuf inspector 分析未知結構緩衝資料

前言

Protocol Buffers ( protobuf ) 是由 Google 所推出的一種序列化資料結構的協議,可以想成 XML 或者 JSON,而 protobuf 更為快速簡潔,在需要頻繁傳輸資料的場合(例如: Pokemon Go),可以使用 protobuf 來加快傳輸速率與降低封包尺寸。

由於 protobuf 將結構與資料分開處理,不像 XML 與 JSON 將結構與資料放在一起,因此在沒有結構描述資訊的狀況下是無法讀取資料的,這對於逆向工程來說是一個麻煩。

雖然軟體本身一定有結構描述檔,但這不代表我們一定要對描述檔進行逆向(這很累耶),由於 protobuf 的緩衝資料本身有一些儲存結構,因此可以通過分析儲存結構來找出資料本身的結構,接著再去猜測每一個欄位的用途,當然我們不用親自下去處理這個結構,Github 上有一個專案 protobuf-inspector,只要給它緩衝資料,它就會幫你把結構拆出來,之後只需要重建結構即可操作緩衝資料(然後開始寫外掛)

使用方法

Clone 專案

git clone https://github.com/jmendeth/protobuf-inspector.git
cd protobuf-inspector

進行分析

./main.py < my-protobuf-blob

指令中的 my-protobuf-blob 是我們要分析的 protobuf 緩衝資料

分析結果

my-protobuf-blob 是一個合法的 protobuf 緩衝資料,就可以看到分析結果(如下圖)

分析結果格式如下:

id <型別> = <內容>

若型別為 chunk 內容又是 message: 開頭,代表這是一個內嵌資訊,像是 struct in struct