{"id":16287763,"url":"https://github.com/sandermvanvliet/protobufdecoder","last_synced_at":"2025-03-16T13:31:29.241Z","repository":{"id":39622495,"uuid":"431809949","full_name":"sandermvanvliet/ProtobufDecoder","owner":"sandermvanvliet","description":"A Google Protocol Buffers (Protobuf) payload decoder/analyzer","archived":false,"fork":false,"pushed_at":"2024-03-28T15:07:52.000Z","size":4351,"stargazers_count":92,"open_issues_count":7,"forks_count":13,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-15T16:30:42.195Z","etag":null,"topics":["dotnet","dotnet-core","netcore","protobuf","protocol-buffers","reverse-engineering"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sandermvanvliet.png","metadata":{"files":{"readme":"README.md","changelog":"Changelog.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"sandermvanvliet"}},"created_at":"2021-11-25T10:51:27.000Z","updated_at":"2025-03-09T02:34:51.000Z","dependencies_parsed_at":"2023-11-23T13:45:55.684Z","dependency_job_id":"43d55953-ca43-462a-80cf-6c7139ae2102","html_url":"https://github.com/sandermvanvliet/ProtobufDecoder","commit_stats":null,"previous_names":[],"tags_count":16,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sandermvanvliet%2FProtobufDecoder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sandermvanvliet%2FProtobufDecoder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sandermvanvliet%2FProtobufDecoder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sandermvanvliet%2FProtobufDecoder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sandermvanvliet","download_url":"https://codeload.github.com/sandermvanvliet/ProtobufDecoder/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243817187,"owners_count":20352511,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dotnet","dotnet-core","netcore","protobuf","protocol-buffers","reverse-engineering"],"created_at":"2024-10-10T19:46:04.793Z","updated_at":"2025-03-16T13:31:28.756Z","avatar_url":"https://github.com/sandermvanvliet.png","language":"C#","funding_links":["https://github.com/sponsors/sandermvanvliet"],"categories":[],"sub_categories":[],"readme":"# ProtobufDecoder\n\nThis application helps with analyzing [Google Protocol Buffers](https://developers.google.com/protocol-buffers) payloads where you don't have a corresponding `.proto` file.\n\nScenarios where you might want to use this is to inspect the result of serialization or when you need to interoperate with a system talking Protobuf but which does not provide a `.proto` file. \nIt can be used for _reverse engineering_ but bear in mind that this may not be legal in your jurisdiction.\n\nProtobufDecoder will read and decode binary data that you capture from either a debugger or a tool like Wireshark and parses the tags from the data.\nYou can then analyze the payload to see which tags are present, what their types are (number, strings etc) and if there are embedded messages.\n\nA changelog can be found [here](Changelog.md)\n\n## Features\n\n- List fields in the captured payload and display information on:\n  - Tag index\n  - Wire type\n  - Contents (raw bytes, values) \n- Display the location and size of a specific tag in the binary payload (select a tag in the tree view and it highlights the bytes)\n- Generate a Protobuf spec from the decoded payload (work in progress)\n- Save the generated Protobuf spec to a `.proto` file\n- Copy the value of a tag as a C# byte array\n\n![animated application demo](./app-demo.gif)\n\n## Usage\n\nDownload the latest installer from the [Releases page](https://github.com/sandermvanvliet/ProtobufDecoder/releases).\n\nWhen the application starts, open a file that contains a Protobuf payload either via File -\u003e Open or using the keyboard shortcut \u003ckbd\u003eCtrl\u003c/kbd\u003e + \u003ckbd\u003eO\u003c/kbd\u003e.\n\nPlease note that at this time the ProtobufDecoder only supports the a file that contains _only_ a single raw Protobuf message. If the file contains a length prefix it will be automatically stripped (since version 0.4.0).\n\nFor the keyboard warriors: shortcut keys are available throughout the app and they are hinted in the menu items.\n\n### Integrating with other tools\n\nProtobufDecoder supports opening a file directly by passing in a command line argument:\n\n```PowerShell\nC:\\users\\johndoe\u003e ProtobufDecoder.Application.Wpf.exe \u003cpath to binary\u003e\n```\n\nThis will start ProtobufDecoder and immediately opens the specified file. If the file does not exist or can't be opened the error will be displayed in the status bar.\n\n## Building\n\nCurrently there is no packaged release of the application which means you will need to compile the application yourself.\n\n1. Clone this repository\n2. `cd` into the cloned directory\n3. `cd src/ProtobufDecoder.Application.Wpf`\n4. `dotnet run -c Release`\n\nThat will restore the necessary packages, build the application and start it.\n\nTo make running the application easier after step 3 run:\n\n4. `dotnet publish -c Release`\n5. Double-click the executable `ProtobufDecoder.Application.Wpf.exe` in the `src/ProtobufDecoder.Application.Wpf/bin/Release/net5.0-windows/publish` folder\n\nYou can create a shortcut to that executable in the Start Menu or wherever you wish.\n\n## Todo\n\n- [X] ~~Decode length-delimited tag values that could be strings, packed repeated values or embedded messages~~\n- [ ] Generate `.proto` file from decoded payload\n  - [x] ~~Single tags~~\n  - [x] ~~Optional vs required tags~~\n  - [ ] Nested messages **(work in progress)**\n  - [ ] Length-delimited tag type hinting (is it a string or a message?) **(work in progress)**\n  - [x] ~~Repeated value tags~~\n- [x] ~~Package application for download~~\n- [x] ~~Set up release build for git tags~~\n- [ ] Load a `.proto` file and apply it to the decoded payload (to verify the `.proto` file and payload match)\n- [ ] Decode groups\n\n## License\n\nSee [LICENSE](./LICENSE).\n\n## Acknowledgements\n\nThis application uses:\n\n- [topas/VarintBitConverter/](https://github.com/topas/VarintBitConverter/) for Varint decoding from the Protobuf payloads. (See [VarintValue](./src/ProtobufDecoder/VarintValue.cs))\n- [WPF:HexEditor](https://github.com/abbaye/WPFHexEditorControl) to display the raw payload and tag highlighting\n- String detection tricks from [mildsunrise/protobuf-inspector](https://github.com/mildsunrise/protobuf-inspector)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsandermvanvliet%2Fprotobufdecoder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsandermvanvliet%2Fprotobufdecoder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsandermvanvliet%2Fprotobufdecoder/lists"}