解释 DBus 消息
Interpret DBus Messages
我试图解释 https://dbus.freedesktop.org/doc/dbus-specification.html 中指定的 DBus 消息中的字节。这是在使用 Frida 工具时从 pcap 中获取的。
字节是
0000 6c 01 00 01 08 00 00 00 01 00 00 00 70 00 00 00
0010 01 01 6f 00 15 00 00 00 2f 72 65 2f 66 72 69 64
0020 61 2f 48 6f 73 74 53 65 73 73 69 6f 6e 00 00 00
0030 02 01 73 00 16 00 00 00 72 65 2e 66 72 69 64 61
0040 2e 48 6f 73 74 53 65 73 73 69 6f 6e 31 35 00 00
0050 08 01 67 00 05 61 7b 73 76 7d 00 00 00 00 00 00
0060 03 01 73 00 17 00 00 00 47 65 74 46 72 6f 6e 74
0070 6d 6f 73 74 41 70 70 6c 69 63 61 74 69 6f 6e 00
0080 00 00 00 00 00 00 00 00
有些字段我不确定它们是什么意思。如果有人可以提供一些指导,我们将不胜感激。
- 0x6C:指小端
- 0x01:消息类型(方法调用)
- 0x00:或标志的位
- 0x01:主要协议版本
- 0x08000000:消息体的长度(Little Endian),从消息头的末尾开始。 这应该是指末尾的八个空字节?
- 0x01000000:此消息的序列号(小端)
- 0x70000000: (Little Endian) 不确定这代表什么? 这个值确实对应于结构数组的长度,不包括从 0x0010 开始的尾随空字节,并且结束于 0x007F。
- 0x01:对象路径的十进制代码
- 0x01: 不确定这代表什么?
- 0x6F:对象路径的 DBus 类型 'o'
- 0x15:对象路径字符串的长度
您想查看规范中告诉您 message format is 内容的部分。
但是要回答你的问题:
0x08000000: Length of Message Body (Little Endian), starting from end of Header. This should be referring to the eight null bytes at the end?
正确。
0x70000000: (Little Endian) Not sure what this represents? This value does correspond to the length of the array of struct, excluding trailing null bytes, that starts from 0x0010 and ends at 0x007F.
这是header中数组的长度。 DBus header 是可变大小的——在前几个字节之后,它是一个 struct(byte,variant) 数组。根据文档,如果您将其表示为 DBus 类型签名,则看起来像 a(yv)
。
0x01: Decimal Code for Object Path
0x01: Not sure what this represents?
这是解析变得有趣的地方:在我们的结构中,签名是 yv
,所以第一个 0x01
告诉我们这个结构条目是 header 字段Object路径,如你所见。但是,我们现在需要解析变体中包含的内容。要封送一个变体,您首先要封送一个签名,在本例中为 1 个字节长:01 6f 00
。请注意,签名的最大长度为 255 个字节,因此与其他字符串不同,它们的前面只有 1 个字节的长度。作为一个字符串,即 o
,它告诉我们这个变体内部包含一个 object 路径。由于 object 路径是字符串,因此我们将下一个字节解码为字符串(注意前 4 个字节是字符串长度):15 00 00 00 2f 72 65 2f 66 72 69 64 61 2f 48 6f 73 74 53 65 73 73 69 6f 6e 00
如果我已经正确完成转换,那就是 /re/frida/HostSession
This is taken from a pcap
如果它是标准的 pcap(或 pcapng)D-Bus 捕获文件,使用 LINKTYPE_DBUS
link 层类型,那么 Wireshark 应该能够读取它,至少对某些人来说度,解释消息(即,它具有理解消息格式的代码,如 the specification to which @rm5248 referred (and to which the LINKTYPE_DBUS
entry in the list of link-layer header types 所定义),因此您可能不必自己解释所有字节。
我试图解释 https://dbus.freedesktop.org/doc/dbus-specification.html 中指定的 DBus 消息中的字节。这是在使用 Frida 工具时从 pcap 中获取的。
字节是
0000 6c 01 00 01 08 00 00 00 01 00 00 00 70 00 00 00
0010 01 01 6f 00 15 00 00 00 2f 72 65 2f 66 72 69 64
0020 61 2f 48 6f 73 74 53 65 73 73 69 6f 6e 00 00 00
0030 02 01 73 00 16 00 00 00 72 65 2e 66 72 69 64 61
0040 2e 48 6f 73 74 53 65 73 73 69 6f 6e 31 35 00 00
0050 08 01 67 00 05 61 7b 73 76 7d 00 00 00 00 00 00
0060 03 01 73 00 17 00 00 00 47 65 74 46 72 6f 6e 74
0070 6d 6f 73 74 41 70 70 6c 69 63 61 74 69 6f 6e 00
0080 00 00 00 00 00 00 00 00
有些字段我不确定它们是什么意思。如果有人可以提供一些指导,我们将不胜感激。
- 0x6C:指小端
- 0x01:消息类型(方法调用)
- 0x00:或标志的位
- 0x01:主要协议版本
- 0x08000000:消息体的长度(Little Endian),从消息头的末尾开始。 这应该是指末尾的八个空字节?
- 0x01000000:此消息的序列号(小端)
- 0x70000000: (Little Endian) 不确定这代表什么? 这个值确实对应于结构数组的长度,不包括从 0x0010 开始的尾随空字节,并且结束于 0x007F。
- 0x01:对象路径的十进制代码
- 0x01: 不确定这代表什么?
- 0x6F:对象路径的 DBus 类型 'o'
- 0x15:对象路径字符串的长度
您想查看规范中告诉您 message format is 内容的部分。
但是要回答你的问题:
0x08000000: Length of Message Body (Little Endian), starting from end of Header. This should be referring to the eight null bytes at the end?
正确。
0x70000000: (Little Endian) Not sure what this represents? This value does correspond to the length of the array of struct, excluding trailing null bytes, that starts from 0x0010 and ends at 0x007F.
这是header中数组的长度。 DBus header 是可变大小的——在前几个字节之后,它是一个 struct(byte,variant) 数组。根据文档,如果您将其表示为 DBus 类型签名,则看起来像 a(yv)
。
0x01: Decimal Code for Object Path 0x01: Not sure what this represents?
这是解析变得有趣的地方:在我们的结构中,签名是 yv
,所以第一个 0x01
告诉我们这个结构条目是 header 字段Object路径,如你所见。但是,我们现在需要解析变体中包含的内容。要封送一个变体,您首先要封送一个签名,在本例中为 1 个字节长:01 6f 00
。请注意,签名的最大长度为 255 个字节,因此与其他字符串不同,它们的前面只有 1 个字节的长度。作为一个字符串,即 o
,它告诉我们这个变体内部包含一个 object 路径。由于 object 路径是字符串,因此我们将下一个字节解码为字符串(注意前 4 个字节是字符串长度):15 00 00 00 2f 72 65 2f 66 72 69 64 61 2f 48 6f 73 74 53 65 73 73 69 6f 6e 00
如果我已经正确完成转换,那就是 /re/frida/HostSession
This is taken from a pcap
如果它是标准的 pcap(或 pcapng)D-Bus 捕获文件,使用 LINKTYPE_DBUS
link 层类型,那么 Wireshark 应该能够读取它,至少对某些人来说度,解释消息(即,它具有理解消息格式的代码,如 the specification to which @rm5248 referred (and to which the LINKTYPE_DBUS
entry in the list of link-layer header types 所定义),因此您可能不必自己解释所有字节。