我可以访问几千个二进制文件,但我没有生成它们的程序。文件已被解析,我也可以访问存储解析字段的数据库。鉴于此信息,我如何对文件的格式进行逆向工程?
鉴于文件及其解析的内容,我如何对文件格式进行逆向工程?
逆向工程
文件格式
2021-06-27 10:04:59
2个回答
简短的回答:你不能。
文件可能被加密。如果加密很强,实现者没有犯任何愚蠢的错误,并且密钥隐藏在原始二进制文件中,那么就无法将您的文件与可读内容进行匹配。
更长的答案:它可能没有那么糟糕。
首先,尝试找出有关文件的一些一般信息。
它们都具有相同的尺寸,还是尺寸不同?如果大小不同,是否可以通过文件内容来解释,或者您是否希望所有大小都相同?
文件是否有可能被压缩?尝试制作一个 .zip 文件。如果 zip 无法压缩它们,它们可能已经是;在这种情况下,尝试找出对它们使用了哪种算法。Binwalk 可能对此有所帮助(该网站说固件分析,但它可以很好地识别许多压缩文件格式)。如果它们被压缩,并且您无法找出算法/解压缩它们,那么您就被卡住了。
在十六进制编辑器中打开一些文件,和/或对它们运行字符串实用程序。文件中是否有看起来可读的部分?
尝试将文件名或您确定的文件内容与数据库行进行匹配。了解文件中的内容有助于识别特定内容。
如果所有文件的大小相同或几乎相同,请尝试找出它们之间哪些部分相等,哪些部分不同。我在这里的回答中对同一文件的不同块做了类似的事情,这可能会让你开始。
如果您认为文件中有一些数字,请将它们转换为整数/长/浮点/双精度表示,然后在十六进制编辑器中搜索这些字节。重复几个不同的文件。幸运的是,在少数情况下,您会在相同的文件偏移处或可识别的文件部分中找到相同的信息。
如果可以(版权问题等)告诉我们软件的名称,并上传一些示例文件及其解码内容。论坛成员可能知道该软件或识别文件格式。还有一些使用就像这种挑战一样。
首先,这个问题太宽泛了。例子会很有帮助。
这是我在没有关于文件的具体知识的情况下开始的算法。
- 首先,我会尝试回答这个问题是否是标准格式。在文件上使用 linux文件实用程序可能会有所帮助。如果此文件似乎是标准文件,我会尝试查找有关该格式的文档和/或对使用它的工具进行逆向工程。
- 如果格式不标准,我会尝试检查文件的结构。所有的二进制文件都有相似的标题吗?如果是,它们有什么不同?它是否与文件大小、其中的实体数量、创建日期、修改日期等有关?
- 之后,我将开始将此文件剖析为基本类型。搜索与数据相关的字符串可能有助于理解很多。搜索已知值(例如很少出现的整数常量)可能有助于连接这些常量及其在文件中的位置。
- 之后我会尝试找到几乎相似的文件。差异在哪里?这与数据的差异有什么关系?如果您的文件有少量已知差异,您可以制作二进制差异并查看这些差异的确切存储位置。
执行完所有这些操作后,您可能会获得足够的信息来提出更具体的问题。
祝你好运。
其它你可能感兴趣的问题