如果没有任何加密,如果收件人具有序列化的Protobuf文件但没有生成的Protobuf类(他们无法访问定义其结构的.proto文件),是否可以他们从二进制文件中获取Protobuf文件中的任何数据?
如果他们有权访问.proto文件的一部分(例如,文件中只有一个相关的message
),他们可以从整个文件中获取部分数据,同时跳过其他文件未知的部分?
答案 0 :(得分:3)
protoc
工具可以为此提供帮助(请参阅:--decode_raw
),https://protogen.marcgravell.com/decode也是如此 - 因此不应将其视为"安全"在所有protobuf不是安全设备;对于拥有正确工具的人来说,它就像xml或json一样可读,但有一个小问题是如何来解释某些值;但是:你可以推断,猜测和逆向工程
答案 1 :(得分:0)
好的,我找到了这个页面https://developers.google.com/protocol-buffers/docs/encoding
该消息丢弃所有名称,只是一对键号和值。生成的类可能会为安全读取这些数据提供一些保护,并且无法读取未知数据。 (果然因为生成的类是从已知结构生成的,/**
* @Assert\Expression(
* "this not in this.getRelatedProducts().toArray()",
* message="Product cannot be in relation with itself"
* )
*/
protected $relatedProducts;
/**
* @Assert\Expression(
* "this not in this.getProductsInRelation().toArray()",
* message="Product cannot be in relation with itself"
* )
*/
protected $productsInRelation;
文件)
但如果我是攻击者,我可以引用Encoding页面并尝试找出二进制文件中的哪个区域对应于哪些数据。例如,在更改某些数据后,很容易发现varint。然后继续编写我自己的.proto
文件来攻击这个未知数据,甚至是可以选择性地读取部分二进制文件的自定义二进制阅读器。