mirror of https://github.com/Xpl0itR/protodec.git
assemblycommon-intermediate-languagecsharpdotnetgoogle-protobufgoogle-protocol-buffersprotobufprotobuf3protocprotocol-buffersprotodec
Xpl0itR
d43deef033
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 |
||
---|---|---|
.github/workflows | ||
src | ||
.gitignore | ||
LICENSE | ||
README.md | ||
protodec.sln |
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 ofOriginalNameAttribute
is not dumped. In this case, the CIL enum field names are used after conforming them to protobuf conventions
- The
License
This project is subject to the terms of the Mozilla Public License, v. 2.0.