通过偏移量

时间:2019-12-05 21:22:57

标签: zip file-format yara

我正在尝试编写yara签名集合,这些签名将基于zip文件的创建工件对其进行标记。

我知道EOCD的魔幻数字为0x06054b50,它位于档案结构的末尾。它具有可变长度的注释字段,最大长度为0xFFFF,因此EOCD最多可以为0xFFFF +〜20个字节。但是,在zip结构之后可能会有数据,这可能会使依赖于任何偏移量的扫描无效。

有什么方法可以在不扫描整个文件的魔术字节的情况下找到记录吗?如果在EOCD之后可以有数据,您如何验证魔术字节是否不存在?

1 个答案:

答案 0 :(得分:0)

通常通过从文件末尾向后扫描直到找到EOCD签名来完成此操作。是的,可以在注释中找到相同的签名,因此您需要检查EOCD记录的其他部分,以查看它们是否与您正在读取的文件一致。

例如,如果EOCD记录不在文件末尾,则EOCD中的comment length字段不能为零。它应该与文件中剩余的字节数匹配。

类似地,如果这是单个磁盘存档,则offset of start of central directory必须指向zip存档大小范围内的某个位置。如果要遵循该偏移量,则应该找到中央目录记录的签名。

以此类推。

请注意,我忽略了Zip64记录和加密记录的复杂性,但是原理是相同的。您需要检查记录中的字段与正在读取的文件是否一致。