protodec is a tool to decompile protobuf parser/serializer classes compiled by protoc, from dotnet assemblies back into .proto definitions
Go to file
Xpl0itR d43deef033
Even more improvements
including but not limited to:
- detect protobuf well-known types
- detect NonUserCodeAttribute
- detect ObsoleteAttribute to mark protobufs/fields as deprecated
- parse generated client/server types for gRPC services
- fix "optional" parsing
- fix obfuscated name translation
- fix foreign nested protobufs
- support protobuf editions and corresponding options
- rewrite protobuf models to better reflect the specification, including decoupling toplevels and files
- rewrite a bunch of things to make more sense
2024-06-07 16:02:59 +01:00
.github/workflows More improvements 2024-01-22 03:06:56 +00:00
src Even more improvements 2024-06-07 16:02:59 +01:00
.gitignore Initial commit 2023-04-20 23:01:53 +01:00
LICENSE Initial commit 2023-04-20 23:01:53 +01:00
README.md Even more improvements 2024-06-07 16:02:59 +01:00
protodec.sln Even more improvements 2024-06-07 16:02:59 +01:00

README.md

protodec

A tool to decompile protobuf classes compiled by protoc, from CIL assemblies back into .proto definitions.

Usage

Usage: protodec(.exe) <target_assembly_path> <out_path> [options]
Arguments:
  target_assembly_path  Either the path to the target assembly or a directory of assemblies, all of which be parsed.
  out_path              An existing directory to output into individual files, otherwise output to a single file.
Options:
  --parse_service_servers                                     Parses gRPC service definitions from server classes.
  --parse_service_clients                                     Parses gRPC service definitions from client classes.
  --skip_enums                                                Skip parsing enums and replace references to them with int32.
  --include_properties_without_non_user_code_attribute        Includes properties that aren't decorated with `DebuggerNonUserCode` when parsing.
  --include_service_methods_without_generated_code_attribute  Includes methods that aren't decorated with `GeneratedCode("grpc_csharp_plugin")` when parsing gRPC services.

Limitations

  • Integers are assumed to be (u)int32/64 as CIL doesn't differentiate between them and sint32/64 and (s)fixed32/64.
  • Package names are not preserved in protobuf compilation so naturally we cannot recover them during decompilation, which may result in naming conflicts.
  • When decompiling from Il2CppDumper DummyDLLs
    • The Name parameter of OriginalNameAttribute is not dumped. In this case, the CIL enum field names are used after conforming them to protobuf conventions

License

This project is subject to the terms of the Mozilla Public License, v. 2.0.