zip - 按偏移量在 ZIP 文件中定位 EOCD

标签 zip file-format yara

我正在尝试编写 yara 签名的集合,这些签名将根据其创建的工件来标记 zip 文件。

我知道 EOCD 有一个魔数(Magic Number) 0x06054b50,并且它位于存档结构的末尾。它有一个可变长度的注释字段,最大长度为 0xFFFF,因此 EOCD 最多可达 0xFFFF+ ~20 个字节。但是,zip 结构后面可能存在数据,这可能会导致任何与偏移相关的扫描失败。

有没有办法在不扫描整个文件中查找魔术字节的情况下找到该记录?如果 EOCD 之后可以有数据,如何验证魔术字节不是巧合出现的?

最佳答案

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

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

类似地,如果这是单个磁盘存档,则中央目录开始的偏移需要指向 zip 存档大小内的某个位置。如果您想跟踪该偏移量,您应该找到中央目录记录的签名。

等等。

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

关于zip - 按偏移量在 ZIP 文件中定位 EOCD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59203456/

相关文章:

algorithm - 如何确定 ZIP/RAR 文件的压缩方法

c# - 如何动态地将文件添加到存储在 Azure Blob 存储中的 zip 存档中?

PHP:在取消存档期间应用 Chmod

binary - 将文件打包成 ELF 可执行文件

data-structures - 音乐的语义(或符号)表示

json - 一个包含很多JSON的文件,这个文件的定义是什么?

ubuntu - 问题 : “OSError:/usr/lib/libyara.so: cannot open shared object file: No such file or directory” while running cuckoo. py

java - JVM 在 java.util.zip.ZipFile.getEntry 中崩溃

python-3.x - Go strings.Contains() 比 Python3 慢 2 倍?

linux - Bash 中的进程池