DevToys Web Pro iconDevToys Web Pro部落格
為我們評分:
試用瀏覽器擴充功能:

Protobuf 解碼器 / 編碼器

已解碼
格式:

Base64 編碼的 protobuf

  • 已解碼欄位(2)

  • 欄位 #線路類型
    1Varint(0)150
    2Length-delimited(2)testing
    技術細節

    Protobuf 解碼器的運作方式

    工具功能說明

    Protobuf 解碼器可在不需要 .proto 結構描述檔的情況下,解析原始 Protocol Buffer 二進位資料,並顯示線路格式(wire format)的欄位編號、型別與值。當你提供 .proto 定義時,它也支援將 JSON 編碼回 protobuf 二進位。這使得你能在無法取得原始結構描述的情況下,檢視從網路流量擷取或儲存在資料庫中的不透明 protobuf 負載。

    常見的開發者使用情境

    後端開發者會使用無結構描述的 protobuf 解碼來逆向未文件化的 gRPC API、除錯 Kafka topic 中序列化的訊息,或檢視資料庫欄位中的二進位負載。資安研究人員會在滲透測試期間分析以 protobuf 編碼的網路流量。編碼模式可協助開發者在將結構描述變更部署到正式服務之前,驗證其 .proto 定義是否產生預期的二進位輸出。

    資料格式、型別或變體

    Protocol Buffers 使用精簡的線路格式,包含五種 wire type:varint(int32、int64、bool、enum)、64 位元固定(double、fixed64)、長度分隔(string、bytes、內嵌訊息、packed repeated 欄位)、32 位元固定(float、fixed32),以及已棄用的 start/end group 型別。在沒有結構描述時,解碼器無法區分字串與內嵌訊息(兩者皆為長度分隔),因此會嘗試兩種解讀並顯示最可能的解析結果。

    常見陷阱與邊界情況

    無結構描述(schema-less)的解碼本質上具有歧義——varint 可能是有號 int32(zigzag)、無號 uint32,或是布林值;而長度分隔(length-delimited)欄位可能是字串、位元組,或巢狀訊息。欄位名稱在二進位編碼中會遺失,只會以數字欄位標籤呈現。若沒有結構描述的上下文,打包(packed)的重複欄位看起來會與單一 bytes 欄位完全相同。務必將解碼輸出與任何可取得的文件交叉比對,以釐清這些歧義。

    何時使用此工具 vs 程式碼

    當你缺少 .proto 檔案,或想在不建立建置工具鏈的情況下驗證編碼時,可使用這個瀏覽器工具快速檢視擷取到的 protobuf 負載。對於正式環境系統,請使用 protoc 搭配正確的結構描述檔案、各語言的產生程式碼,以及提供完整型別安全、向前相容性,並可與應用程式建置系統整合的 gRPC 反射服務。