提取未知存档文件格式的内容

逆向工程 文件格式 解压 二元诊断
2021-07-11 09:30:34

我在这里需要一些帮助和建议。我正在私下学习如何对我们的教师自定义文件存档文件进行逆向工程,其中存储了其他文件。为学校项目。

但是,我有点迷失在我需要从文件开始的地方。加载到ida-pro后我在文件中寻找什么,能够为我的项目创建我自己的自解压工具。

文件格式是 .crackme,里面的文件从我们学校的老师那里被压缩了,但是当我双击文件时,它说该文件“存档未知格式或已损坏”。

所以,是的,他给我们的文件扩展名在网络上并不为人所知,他为我们创建了自己的扩展名来破解它并制作一个提取工具来从档案中获取所有数据,他的扩展名是“.crackme”,所以是的。

任何建议,这里的任何帮助都非常感谢我。

2个回答

我希望你会发现你在 RE.SE 中的经历是愉快的和有教育意义的 :) 逆向工程通常是作为一种爱好来研究的,所以你们相处得很好!

IDA pro 是一个反汇编器,专注于逆向工程/读取汇编/机器代码。即 - CPU 实际执行的代码。由于看起来您只获得了一个格式文件,而没有任何用于操作/处理文件的可执行代码,因此 IDA 将被证明不太有用。

相反,假设格式确实是专有的,执行此类任务所需的唯一工具是十六进制编辑器/阅读器。010 Editor是一个很棒的编辑器,它有一个试用版。

为了消除已知格式的可能性,尝试运行了几个文件识别工具,如Linux的file命令,论坛报binwalk等,这些会尝试识别常见的文件格式(binwalk是专门针对压缩格式),而如果提供任何洞察力应该为您指明正确的方向。

要仅基于单个文件内容对文件格式进行逆向工程,您需要绘制文件的表观结构,而且您没有太多可参考的内容。排除文本和非常简单的文件格式,如果没有任何额外的资源(更多文件,以任何方式处理格式的程序等),这应该有点困难。

以下是一些提示/提示列表,但您可能会在网上找到更多信息:

  1. 由于大多数文件以标头开头,因此您应该首先映射标头结构的不同成员。
  2. 魔术值、字符串、偏移量和大小的东西很容易识别。大多数体面的十六进制编辑器会显示每隔几个字节的不同表示,因此很容易识别。
  3. 在尝试理解它们的含义之前,首先将字节划分为不同的成员。例如,给定以下十六进制流:00 05 00 00 00 01 BE F1 CA D7很容易注意到成员是一个字(2 个字节)、一个双字(4 个字节)和另一个双字。也有可能前两个是整数,而第三个是魔术值或 CRC。
  4. 如果文件有任何重复的分隔符值,这些值也应该很容易识别(尽管不太可能出现在活动文件格式中)。
  5. 如果您设法识别任何其他文件头(可能使用它们自己的魔法值),那么这些是确定实际文件内容放置位置的好方法。这也意味着存档文件不会压缩包含的文件,例如 linux 的 tar 可以做到这一点。或者,如果您遇到长流的平滑或随机的二进制流,它们可能是实际的压缩数据。我倾向于相信你的老师没有发明​​他自己的压缩算法,所以你需要找到与其他压缩算法的相似之处,也许在 TrID 和文件下再次运行这些流会有所帮助。
  6. 例如,常见的外观模式可能是发现重复结构的一种有用方法(您将有多个参考点,是的!)。例如,如果您识别出每个文件名字符串后跟具有相似结构的字节序列,则它们可能是同一结构的两个实例。

许多存档格式都包含标题。例如,gzip 标头以1f 8b. 首先使用十六进制编辑器检查标题中的已知幻数。