所以我得到了这次面试的任务,这似乎有点令人困惑。
我的工作是,给我几个二进制文件(例如联系人,电话等),我需要提取尽可能多的信息。
[我使用Hex Fiend (picture of hex fiend here)解码了二进制文件,并且得到了有关调用应为(picture of the calls here)的样子的图片。
我的任务是用C ++编写的,我设法提取了诸如电话号码和“ TO”标签之类的信息,但是所有其他数据似乎都无法作为字符读取。是否将其编码为ascii消息(如标头说明),标签应该在其中,还是应该损坏/不可读?
我也应该能够提取日期和持续时间。
到目前为止,我已经解析了文件,因此当一个字符小于或等于31且大于或等于127时,将其替换为空格,这样我就可以看到与实际数据相对应的字母/数字,例如电话号码。
我解决此类问题的主要思想是弄清楚二进制文件的结构。
例如,01020304可能是一个标头,上面写着这是一个日志,并且有数据。
关于如何解决其余问题的任何想法?
非常感谢!
此文件看起来包含固定长度的记录,还可以选择包含标头。我用了两个EFCD标记(0x34e和0x3b8)之间的距离,得出了106(或0x6a)。尝试调整十六进制查看器的大小,以使106是准确的行数。
6360是106的精确倍数,因此似乎没有页眉或页脚。
让我们详细查看记录。我选择了一个从0x1a8开始的版本,因为它包含一些我们可以看的文字。
还有更多东西可以找到,但是我会留给你。最后,使用Kaitai struct(http://kaitai.io/)之类的东西编写与语言无关的二进制格式定义,从中可以生成各种语言的解析器。