Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google chrome 查找Profobuf消息的类型(Google Chrome Sync)_Google Chrome_Sync_Protocol Buffers - Fatal编程技术网

Google chrome 查找Profobuf消息的类型(Google Chrome Sync)

Google chrome 查找Profobuf消息的类型(Google Chrome Sync),google-chrome,sync,protocol-buffers,Google Chrome,Sync,Protocol Buffers,我正在尝试连接到Google Chrome sync(同步您的Chrome设置和当前打开的选项卡)。 现在我集中精力在标签同步上。我连接到Google Talk服务器,每当我在Chrome中导航到一个新网页时,我都会收到来自tango bot的消息 但我很难解码这些消息,因为它们是以谷歌的protobuf格式编码的——因为Chrome Sync有大量不同的protobuf类,我认为无法确定二进制protobuf消息的类型 典型的邮件如下所示(base64编码,XXXX不显示我的邮件地址): 我试

我正在尝试连接到Google Chrome sync(同步您的Chrome设置和当前打开的选项卡)。 现在我集中精力在标签同步上。我连接到Google Talk服务器,每当我在Chrome中导航到一个新网页时,我都会收到来自tango bot的消息

但我很难解码这些消息,因为它们是以谷歌的protobuf格式编码的——因为Chrome Sync有大量不同的protobuf类,我认为无法确定二进制protobuf消息的类型

典型的邮件如下所示(base64编码,XXXX不显示我的邮件地址):

我试着用一些protobuf类(我为Java编译的)对其进行解码,但没有任何一个类可以得到任何有用的数据

有人有关于这个话题的更多信息吗?了解如何找到正确的protobuf类来解码某个二进制消息将非常有用。它甚至可以在某种程度上帮助我破译我上面给出的一个例子中的确切信息。 很少有铬源代码真的很难看槽如果你不是一个C++家伙…
(如果有必要的话,我正在用Java开发)

是的,这是完全可能的;但是,无法使用您发布的数据,因为您在试图删除您的电子邮件地址时已将其损坏到无法恢复的程度。Protobuf对此非常敏感;我试着用base-64替换XXXXXXXX作为一个6个字母的电子邮件地址,但是前面的字节是199,而199在那里是不合法的(字符串内容之前的数据是编码为varint的字符串的长度,varint不能以最后一个字节集的最高有效位结尾,因为MSB是一个延续标志)

如果您有原始protobuf二进制文件,您可以尝试通过
protoc运行它——解码\u raw
,看看它说了什么;这可能会给您足够的时间开始重建布局。或者,您可以尝试使用首选实现的“reader”API手动解析它(如果有)。例如,使用protobuf net和
ProtoReader
,我能够拼凑在一起(括号中的数字是读取每个字段标题后的偏移量):

问题是由于腐败(因为你的替代),不可能说得比字段4远得多;到那个时候,由于长度变短,一切都可能完全乱七八糟。因此,我对超过该点没有多少信心。上面的要点只是为了说明:是的,您可以在不事先知道模式的情况下解析protobuf数据,对模式进行反向工程-但我t要求:

  • 耐心和一些猜测来解释每个字段(每种导线类型可能意味着多种事情)
    • 如果您知道存储的值是什么,而不一定知道每个值如何映射到字段,那么您就有了一个headstart;例如,如果您知道正在发送的值是22、1325、“hello world”和123.45F;那么您应该能够很容易地计算出映射
  • 完整的数据(很遗憾,在本例中丢失了)

是的,这在很大程度上是可能的;但是,这不能用你发布的数据来完成,因为你在试图删除你的电子邮件地址时,无法修复地破坏了它。Protobuf对这一点非常敏感;我尝试用6个字母的电子邮件地址的base-64替换XXXXXXXX,但紧接着之前的字节是199和199在那里是不合法的(字符串内容之前的数据是编码为varint的字符串的长度,varint永远不能以最后一个字节集的最高有效位结尾,因为MSB是连续标志)

如果您有原始protobuf二进制文件,您可以尝试通过
protoc运行它——解码\u raw
,看看它说了什么;这可能会给您足够的时间开始重建布局。或者,您可以尝试使用首选实现的“reader”API手动解析它(如果有)。例如,使用protobuf net和
ProtoReader
,我能够拼凑在一起(括号中的数字是读取每个字段标题后的偏移量):

问题是由于腐败(因为你的替代),不可能说得比字段4远得多;到那个时候,由于长度变短,一切都可能完全乱七八糟。因此,我对超过该点没有多少信心。上面的要点只是为了说明:是的,您可以在不事先知道模式的情况下解析protobuf数据,对模式进行反向工程-但我t要求:

  • 耐心和一些猜测来解释每个字段(每种导线类型可能意味着多种事情)
    • 如果您知道存储的值是什么,而不一定知道每个值如何映射到字段,那么您就有了一个headstart;例如,如果您知道正在发送的值是22、1325、“hello world”和123.45F;那么您应该能够很容易地计算出映射
  • 完整的数据(很遗憾,在本例中丢失了)

谢谢你的回复,这对我帮助很大!我很抱歉破坏了数据,我意识到这有点太晚了。但我能够使用--decode_raw标志对其进行解码,这与你的解释非常接近!现在我只需找到解决子消息噩梦的方法……当protoc无法解码时,你知道会出什么问题吗编写一条消息?因为我有一些其他的示例,我无法运行它- 但我还必须尝试使用偏移量,以防出现一些自定义的头…@Florian不使用模式解码是一门艺术,也是一门科学;我可能需要看看它们,但首先想到的是:“一些自定义长度前缀格式,用于在
CAAilQEKQAoGCgQIAxACEiUKBgoECAMQARISCZwF6dZYmkeFEXZLABNN3/yMGgcIhSwQAxgBINP80ri/JyoIMTgxOTgxMjYaUQpPCgwI7AcSB1NFU1NJT04QARiw64/I0se0AiIyVzpDaGZDeU9JWUZXdXFuUmRXaGtJWk94VkRSM1lmTGU1M0FoRGVxT2EwOHVQUHcyOD0wASoGCgQIAxACMAI4AUIrCG8SJxAEGAIiFGRlbHXXXXXXXXdAZ21haWwuY29tQgl0YW5nb19yYXdIAQ==
{
    (1) field 1: varint, value 0 if int
    (3) field 4: string, looks like sub-message
    // everything after this point is really really suspect
        (6) field 1, string, looks like sub-message
            (8) field 1, string, looks like sub-message
            (16) field 2, string, looks like sub-message
            (55) field 4, varint, 1357060030035 assuming int64
            (62) field 5, string; "18198126"
        (72) field 3, string, looks like sub-message
            (64) field 1, string, looks like some encoded session data
    (155) field 5: string, looks like sub-message
        (157) field 1: string, looks like sub-message
    (163) field 6: varint, value 2 if int
    (165) field 7: varint, value 1 if int
    (167) field 8: string, looks like sub-message
        (169) field 1: varint, value 111 if int
        (171) field 2: string, looks like sub-message
}