如果没有任何加密,收件人有序列化的Protobuf文件但没有生成的Protobuf类(他们没有访问定义其结构的.proto文件),是否可能从二进制文件中获取Protobuf文件中的任何数据?
如果他们可以访问部分.proto文件(例如,仅文件中一个相关的),他们是否可以从整个文件中得到该数据的一部分,同时跳过其他未知部分?
如果没有任何加密,收件人有序列化的Protobuf文件但没有生成的Protobuf类(他们没有访问定义其结构的.proto文件),是否可能从二进制文件中获取Protobuf文件中的任何数据?
如果他们可以访问部分.proto文件(例如,仅文件中一个相关的),他们是否可以从整个文件中得到该数据的一部分,同时跳过其他未知部分?
protoc
工具可以帮助实现这一点(请参见:--decode_raw
),https://protogen.marcgravell.com/decode也可以。因此,不应将其视为“安全”。protobuf不是安全设备;对于拥有正确工具的人来说,它与xml或json一样可读,稍微有点问题的是可能不确定如何解释某些值;但是:您可以推断、猜测和反向工程。
好的,我找到了这个页面https://developers.google.com/protocol-buffers/docs/encoding
消息丢弃所有名称,只是一对键号和值。生成的类可能会提供一些保护措施,以安全地读取这些数据,并且无法读取未知数据。(当然,因为生成的类是从已知结构的.proto
文件生成的)
但如果我是攻击者,我可以引用该编码页面并尝试找出二进制文件中哪个区域对应于哪个数据。例如,在更改一些数据后,可变长度整数可能很容易被发现。然后继续编写自己的.proto
文件来攻击这些未知数据,甚至是一个可以选择性地读取二进制文件部分的自定义二进制读取器。