Reverse Engineering Protobuf Definitions from Compiled Binaries

This page summarizes the projects mentioned and recommended in the original post on news.ycombinator.com

Stream - Scalable APIs for Chat, Feeds, Moderation, & Video.
Stream helps developers build engaging apps that scale to millions with performant and flexible Chat, Feeds, Moderation, and Video APIs and SDKs powered by a global edge network and enterprise-grade infrastructure.
getstream.io
featured
InfluxDB – Built for High-Performance Time Series Workloads
InfluxDB 3 OSS is now GA. Transform, enrich, and act on time series data directly in the database. Automate critical tasks and eliminate the need to move data externally. Download now.
www.influxdata.com
featured
  1. grpc-go

    The Go language implementation of gRPC. HTTP/2 based RPC

    The reflection service is open-sourced (at least for some sdks):

    * https://github.com/grpc/grpc-go/blob/master/Documentation/se...

    * https://chromium.googlesource.com/external/github.com/grpc/g...

  2. Stream

    Stream - Scalable APIs for Chat, Feeds, Moderation, & Video. Stream helps developers build engaging apps that scale to millions with performant and flexible Chat, Feeds, Moderation, and Video APIs and SDKs powered by a global edge network and enterprise-grade infrastructure.

    Stream logo
  3. Protobuf

    Protocol Buffers - Google's data interchange format

    For at least 4 years protobuf has had decent support for self-describing messages (very similar to avro) as well as reflection

    https://github.com/protocolbuffers/protobuf/blob/main/src/go...

    Xgooglers trying to make do on the cheap will just create a Union of all their messages and include the message def in a self-describing message pattern. Super-sensitive network I/O can elide the message def (empty buffer) and any for RecordIO clone well file compression takes care of the definition.

    Definitely useful to be able to dig out old defs but protobuf maintainers have surprisingly added useful features so you don’t have to.

    Bonus points tho for extracting the protobuf defs that e.g. Apple bakes into their binaries.

  4. ProtobufDecoder

    A Google Protocol Buffers (Protobuf) payload decoder/analyzer

    Decoding protobuf (and message formats in general) can be such a pain and fun at the same time.

    I’ve written ProtobufDecoder which takes a different approach: analyze the structure of the actual messages to help you figure out the protobuf structure of a message.

    https://github.com/sandermvanvliet/ProtobufDecoder

  5. protobuf-inspector

    🕵️ Tool to reverse-engineer Protocol Buffers with unknown definition

    I have used this other tool to good effect to reverse engineer a file format based on Protobuf: https://github.com/mildsunrise/protobuf-inspector

  6. gRPC

    C++ based gRPC (C++, Python, Ruby, Objective-C, PHP, C#)

    Yes, grpc_cli tool uses essentially the same mechanism except implemented as a grpc service rather than as a stubby service. The basic principle of both is implementing the C++ proto library's DescriptorDatabase interface with cached recursive queries of (usually) the server's compiled in FileDescriptorProtos.

    See also https://github.com/grpc/grpc/blob/master/doc/server-reflecti...

    The primary difference between what grpc does and what stubby does is that grpc uses a stream to ensure that the reflection requests all go to the same server to avoid incompatible version skew and duplicate proto transmissions. With that said, in practice version skew is rarely a problem for grpc_cli style "issue a single RPC" usecases: even if requests do go to two or more different versions of a binary that might have incompatible proto graphs, it is very common for the request and response and RPC to all be in the same proto file so you only need to make one RPC in the first place unless you're using an extension mechanism like proto2 extensions or google.protobuf.Any.

  7. InfluxDB

    InfluxDB – Built for High-Performance Time Series Workloads. InfluxDB 3 OSS is now GA. Transform, enrich, and act on time series data directly in the database. Automate critical tasks and eliminate the need to move data externally. Download now.

    InfluxDB logo
NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts

  • Consistent Hashing: An Overview and Implementation in Golang

    3 projects | dev.to | 7 May 2024
  • [Beginner] How can I uninstall and properly install gRPC for Golang?

    2 projects | /r/grpc | 12 Feb 2021
  • Log level 'error' should mean that something needs to be fixed

    2 projects | news.ycombinator.com | 20 Dec 2025
  • Better Than JSON

    15 projects | news.ycombinator.com | 1 Dec 2025
  • Continuous Contribution for Hiero SDK Python - Release 0.3

    2 projects | dev.to | 21 Nov 2025

Did you know that C++ is
the 7th most popular programming language
based on number of references?