识别字节数组中重复的数据序列

Identifying repeating sequences of data in byte array

给定一个十六进制数据样本,我想识别在整个样本中重复的未知字节序列。 (不是搜索已知的字符串或值)我正在尝试对网络协议进行逆向工程,并且我正在努力确定数据包中的数据结构。作为我正在尝试做的事情的一个例子(尽管规模较小):

(af:b6:ea:3d:83:02:00:00):{21:03:00:00}:[b3:49:96:23:01]

{21:03:00:00}:(af:b6:ea:3d:83:02:00:00):01:42:00:00:00:00:01:57

(38:64:88:6e:83:02:00:00):{26:03:00:00}:[b3:49:96:23:01]

{26:03:00:00}:(38:64:88:6e:83:02:00:00):01:42:00:00:00:00:00:01

显然,这些很容易用肉眼发现,但数据中包含数百个字符的模式则不然。我不期待解决方案的灵丹妙药,只是朝着正确的方向轻推,或者更好的是,预制工具。

我目前需要这个用于 C# 项目,但我愿意使用任何和所有工具。

如果您不知道要查找什么,可以通过对足够大的对话样本执行 negative entropy 分析来了解数据的布局,以查看对话的长度records/sub-records.

如果数据由长度和内容类型大致相同的重复序列构成,您应该会看到围绕记录和子记录的长度具有几乎相同负熵的值簇。

例如,如果您将包含大量相同数据的基本文件放入其中,您应该会看到具有可比负熵的平均记录长度附近的值(例如:如果您使用的 CSV 文件的平均行长度为117 个字节,您可能会看到负熵最高的 115、116、117 和 119),以及具有相同负熵的最常见字段长度周围的值。

您可以进行字节出现扫描,以查看哪些字节值可能是分隔符。

有一个免费的十六进制编辑器,其中包含源代码,可以为您执行此操作(hexplorer,在 Crypto/Find 模式菜单中)。您可能必须通过选项将默认字体更改为 UI.

中的实际字体