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

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

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

我使用Hex Fiend (picture of hex fiend here)对二进制文件进行了解码,并且获得了有关调用(picture of the calls here)外观的图片。

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

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

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

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

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

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

非常感谢!

wakal 回答:有关在C ++中解析二进制文件的问题

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

本文链接:https://www.f2er.com/3008271.html

大家都在问