使用protobuf-decoder轻松解析二进制数据

使用protobuf-decoder轻松解析二进制数据

【免费下载链接】protobuf_decoder 【免费下载链接】protobuf_decoder 项目地址: https://gitcode.com/gh_mirrors/pr/protobuf_decoder

protobuf-decoder是一个强大的Python库,能够在没有.proto文件的情况下解码protobuf二进制文件。它不仅支持将二进制数据转换为可读的JSON格式,还支持编辑后重新编码为二进制文件,并且可以作为Burp Suite插件集成到网络安全测试流程中。

项目特点

protobuf-decoder具有以下突出特点:

  • 无需.proto文件:在缺少协议定义文件的情况下仍能准确解析protobuf二进制数据
  • 可视化编辑:以JSON格式展示数据,直观易懂,支持直接编辑修改
  • Burp插件集成:无缝集成到Burp Suite,实时查看和修改protobuf网络流量
  • 模块化设计:可作为Python库导入到各种项目中灵活使用

快速开始

环境准备

首先需要安装protobuf编译器:

pip install protobuf

生成测试数据

项目提供了完整的示例,首先生成测试用的protobuf二进制文件:

protoc -I=. --python_out=. addressbook.proto
python write_msg.py ADDRESS_BOOK_FILE

解析二进制文件

使用parse.py脚本解析生成的二进制文件:

python parse.py ADDRESS_BOOK_FILE

解析结果将以JSON格式展示,包含字段编号、类型和值信息:

{
    "01:00:embedded message": {
        "01:00:string": "わたし", 
        "02:01:Varint": 1234, 
        "04:02:bytes": "0x5a:0x64:0x3b:0xdf:0x4f:0x8d:0xf3:0x3f:0x2d:0xb2:0x9d:0xef:0xa7:0xc6:0x9:0x40", 
        "05:03:embedded message": {
            "01:00:Varint": 1, 
            "02:01:string": "0800000", 
            "03:02:embedded message": {
                "01:00:32-bit": 666.7769775390625
            }
        }
    }
}

Burp插件使用

protobuf-decoder可以作为Burp Suite插件,方便在网络安全测试中分析protobuf流量:

  1. parse.py复制到Burp Suite的jar目录
  2. 在Burp中加载protobuf_decoder.py作为扩展
  3. 完成后即可在Burp中查看protobuf二进制数据的JSON格式表示

插件会自动识别protobuf流量,并在消息编辑器中提供"Protobuf Plain Text"标签页,支持实时查看和修改数据。

Python模块集成

除了命令行工具和Burp插件,protobuf-decoder还可以作为Python模块集成到项目中:

import protobuf_decoder.parse as pbparser

# 解码protobuf二进制数据
data = b'\n\x07\x08\xd2\t\x12\x03\xe3\x82\x8f'
messages = pbparser.Decode(data)

# 重新编码修改后的数据
output = list()
bytes_written = pbparser.ReEncode(messages, output)
encoded_data = bytes(bytearray(output))

技术解析

协议定义示例

项目使用addressbook.proto作为示例协议:

syntax="proto3";
package tutorial;

message Person {
  string name = 1;
  int32 id = 2;
  string email = 3;
  repeated double num = 4 [packed=true];
  
  enum PhoneType {
    MOBILE = 0;
    HOME = 1;
    WORK = 2;
  }
  
  message PhoneNumber {
    PhoneType type = 1;
    string number = 2;
    message Account {
        float fnum = 1;
    }
    Account account = 3;
  }
  
  repeated PhoneNumber phone = 5;
}

message AddressBook {
  repeated Person person = 1;
  float fnum = 2;
}

解析算法原理

protobuf-decoder通过分析二进制流中的varints、嵌入消息、字符串和固定数值等元素,能够识别字段类型和顺序。关键算法包括:

  • 动态wire格式解析:识别字段编号和数据类型
  • 变长整数解析:处理protobuf的varint编码
  • 类型推断:根据wire类型推断具体的数据类型
  • 递归解析:处理嵌套的嵌入消息结构

JSON格式说明

解析后的JSON键名采用field_number:id:type格式:

  • field_number:对应.proto文件中的字段编号
  • id:用于去重的标识符
  • type:数据类型(Varint、32-bit、64-bit、embedded message等)

应用场景

协议开发与调试

在协议开发过程中,无需等待.proto文件即可快速验证和调试protobuf协议,大大提高开发效率。

网络安全审计

在渗透测试和安全监控中,利用Burp插件实时解码protobuf流量,深入理解数据交换细节,发现潜在安全漏洞。

数据分析

对于不透明的protobuf数据源,如日志文件或其他服务通信,可以使用protobuf-decoder进行数据提取和分析,无需依赖协议定义文件。

项目优势

相比传统的protobuf解析方式,protobuf-decoder提供了更大的灵活性:

  1. 降低依赖:不依赖.proto文件,适用于逆向工程和未知协议分析
  2. 可视化操作:JSON格式便于人工阅读和修改
  3. 集成便捷:多种使用方式满足不同场景需求
  4. 开源免费:基于GPLv2许可证,可自由使用和修改

protobuf-decoder为protobuf数据处理提供了全新的解决方案,无论是开发调试、安全测试还是数据分析,都能提供强大的支持。

【免费下载链接】protobuf_decoder 【免费下载链接】protobuf_decoder 项目地址: https://gitcode.com/gh_mirrors/pr/protobuf_decoder

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值