【问题标题】:Identifying repeating sequences of data in byte array识别字节数组中的重复数据序列
【发布时间】:2015-09-28 09:15:15
【问题描述】:

给定一个十六进制数据样本,我想识别在整个样本中重复的 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# 项目中需要它,但我对任何和所有工具都持开放态度。

【问题讨论】:

  • 维基百科 -> 字符串算法?
  • 你不应该把自己限制在c#。您还应该在与主题相关的不同 StackExchanges 上提出这个问题,例如。 Reverse EngeneeringData Science

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


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-19
    • 1970-01-01
    • 2018-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多