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

C# 识别字节数组中重复的数据序列,c#,network-programming,reverse-engineering,data-analysis,C#,Network Programming,Reverse Engineering,Data Analysis,给定一个十六进制数据样本,我想确定在整个样本中重复的未知字节序列。我没有搜索已知的字符串或值,而是试图对网络协议进行反向工程,并致力于确定数据包中的数据结构。作为一个例子,我正在尝试做什么,尽管规模较小: (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 及 显然,这些很容易被肉眼发现,但在数据中包含数

给定一个十六进制数据样本,我想确定在整个样本中重复的未知字节序列。我没有搜索已知的字符串或值,而是试图对网络协议进行反向工程,并致力于确定数据包中的数据结构。作为一个例子,我正在尝试做什么,尽管规模较小:

(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

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


我目前需要一个C项目,但我对任何工具都持开放态度。

如果你不知道你在寻找什么,你可以通过对足够大的对话样本进行分析来了解记录/子记录的长度,从而了解数据的布局

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

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

您可以执行字节发生扫描,以查看哪些字节值可能是分隔符


在Crypto/Find Pattern菜单中,有一个免费的十六进制编辑器,其源代码可以为您实现这一点。您可能需要通过选项将默认字体更改为UI中的实际字体。

Wikipedia->string algorithms?您不应该将自己限制为c。你也应该在与主题相关的不同堆栈交换上问这个问题,例如,等等。
(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