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

时间:2015-07-09 19:49:29

标签: c# network-programming reverse-engineering data-analysis

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

(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#项目,但我对所有工具都开放。

1 个答案:

答案 0 :(得分:0)

如果您不知道自己在寻找什么,可以通过对相当大的对话样本执行negative entropy分析来了解数据的布局,以查看记录的长度/子记录。

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

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

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

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