【问题标题】:Question about parsing a binary file in C++ [closed]关于在 C++ 中解析二进制文件的问题 [关闭]
【发布时间】:2019-11-29 10:30:59
【问题描述】:

所以我得到了这个面试任务,这似乎有点令人困惑。

我的工作是,我得到了几个二进制文件(例如联系人、电话等),我需要尽可能多地提取信息。

我使用 Hex Fiend(picture of hex fiend here) 对二进制文件进行了解码,我得到了调用应该是什么样子(picture of the calls here) 的图片。

我的任务是用 C++ 编写的,我设法提取了诸如电话号码和“TO”标签之类的信息,但所有其他数据似乎都无法读取为字符。它是否被编码为类似标题描述的 ascii 消息,标签应该在哪里,或者它应该被损坏/不可读?

我也应该能够提取日期和持续时间。

到目前为止,我已经解析了文件,因此当字符小于或等于 31 且大于或等于 127 时将其替换为空格,以便我可以看到与电话号码等实际数据相对应的字母/数字.

我解决这类问题的主要想法是弄清楚二进制文件的结构。

例如 01020304 可能是一个标头,表明这是一个日志并且有数据。

关于如何解决其余问题的任何想法?

提前感谢!

【问题讨论】:

标签: c++ binaryfiles binary-data extraction


【解决方案1】:

这个文件看起来包含固定长度的记录,可以选择带有标题。 我计算了其中两个 EFCD 标记(0x34e 和 0x3b8)之间的距离,得出了 106(或 0x6a)。尝试调整十六进制查看器的大小,使 106 是准确的行数。

6360 是 106 的整数倍,所以看起来没有页眉或页脚。

让我们详细看一下记录。我选择了从 0x1a8 开始的那个,因为它有一些我们可以查看的文本。

  • 偏移量 0x00:某种序列号对于其中一些标记似乎不同。我们不知道它有多大,所以我们现在猜测 4 个字节。
  • 偏移 0x04:对于大多数记录,这是 FF00 或 FF02。 2 个字节。
  • 偏移量 0x06:几乎总是 FFFF,但并非总是如此。还有 2 个字节?
  • 偏移量 0x0C:这隐约看起来像一个时间戳? 4 个字节
  • 偏移 0x10:最后,我们识别出一些文本!看起来它在 UCS-2 中,中间有所有这些 00 字节。由于记录的大小是固定的,因此为 0x1e2-0x1b8=42 字节。
  • 偏移量 0x58:所拨号码的位数。这可能也是固定大小。

还有更多的东西要找出来,但我会把它留给你。 最后的提示是,使用 Kaitai struct (http://kaitai.io/) 之类的东西来编写与语言无关的二进制格式定义,您可以从中生成各种语言的解析器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多