关于在C ++中解析二进制文件的问题

问题描述 投票:-2回答:1

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

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

[我使用Hex Fiend (picture of hex fiend here)解码了二进制文件,并且得到了有关调用应为(picture of the calls here)的样子的图片。

我的任务是用C ++编写的,我设法提取了诸如电话号码和“ TO”标签之类的信息,但是所有其他数据似乎都无法作为字符读取。是否将其编码为ascii消息(如标头说明),标签应该在其中,还是应该损坏/不可读?

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

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

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

例如,01020304可能是一个标头,上面写着这是一个日志,并且有数据。

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

非常感谢!

c++ binaryfiles binary-data extraction
1个回答
0
投票

此文件看起来包含固定长度的记录,还可以选择包含标头。我用了两个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/)之类的东西编写与语言无关的二进制格式定义,从中可以生成各种语言的解析器。

© www.soinside.com 2019 - 2024. All rights reserved.