解释 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

有些字段我不确定它们是什么意思。如果有人可以提供一些指导,我们将不胜感激。

您想查看规范中告诉您 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 所定义),因此您可能不必自己解释所有字节。