我有点困惑,zip 和 unzip 软件如何识别它打开的文件是否是 zip 文件。
据我所知,程序可以识别带有扩展名的文件.zip
是 zip 文件,而没有扩展名的文件则有一些魔术位或 MIME 类型可用于确定文件类型。
问题是:如果我.exe
使用 7-zip 打开自解压可执行文件(如 AMD 的驱动程序安装程序),它仍然可以打开文件并且内容显示正确。但是“可执行”部分不见了。7-zip 如何确定此文件类型?文件在 Windows 上不应该.exe
有 PE 标头吗?
更令人困惑的是:我发现 ISO 文件可以使用 7-zip 解压,但 7-zip 说它可以处理该文件类型,所以没问题。但如果我打开VirtualBox 安装程序使用7-zip,文件内容如下:
.rsrc/
.data
.rdata
.reloc
.rsrc_1
.text
CERTIFICATE
这些文件是 exe 中的资源文件,7-zip 报告文件类型为PE
,所以我猜它像资源黑客一样显示资源文件?但不是所有的 exe 文件都可以用这种方式打开,为什么?当我打开打开 VPN 安装程序,文件内容如下:
$PLUGINSDIR
$TEMP
bin
doc
easy-rsa
sample-config
icon.ico
Uninstall.exe.nsis
除了那些文件夹之外,安装后我基本上会得到这些$
。文件类型是Nsis
,与自解压可执行文件相同.exe
。所以我假设它们使用相同的机制,对吗?但为什么这个文件不是PE
类型?或者 7-zip 只是一个可以处理任何文件类型的瑞士军刀软件?但 7-zip 如何识别它?
我已经思考这个问题很久了,任何帮助都将不胜感激!
答案1
您遇到了两个可以通过 7-Zip 打开的可执行文件,但背后的机制完全不同:
7-Zip 显示可执行文件的内部结构
.rsrc/
.data
.rdata
.reloc
.rsrc_1
.text
CERTIFICATE
此列表是 7zip 的一个特殊功能。可执行文件无法解压,但它们具有内部结构,7Zip 知道此结构并向您呈现一个看起来像 ZIP 存档的视图,但显示的是可执行文件的内部结构。
带有“附加” ZIP 文件的可执行文件
您的第二个示例 - 安装程序文件是可执行文件 + 附加到可执行文件的 ZIP 文件的组合。
$PLUGINSDIR
$TEMP
bin
doc
easy-rsa
sample-config
icon.ico
Uninstall.exe.nsis
安装程序运行时,只执行可执行文件前端部分。然后,此代码部分通过在其自己的可执行文件中搜索 ZIP 文件的开头来执行自解压。然后,安装程序将解压并处理此 ZIP 文件。
当打开此类文件时,7zip 和其他存档提取工具会搜索 ZIP 文件的开头,而忽略可执行文件的开头部分。因此,您可以打开此类可执行文件并查看内容,而无需执行安装程序。
请注意,并非所有安装程序都使用这种方式或使用 7-zip 无法查看的专有存档格式。因此,如果您打开这样的安装程序,您只能看到可执行结构。
答案2
您实际上是在问程序如何打开任何类型的文件。简短的回答是:它读取文件头;“是的”7-zip 是一个可以识别多种文件类型的程序。
较长的回答是,大多数文件(几乎所有)都有一个结构化部分,称为标头,用于标识文件本身以及所有部分的存储方式和位置。
文件扩展名通常是第一个指标,但许多程序并不将其视为“安全数据”,而是通过检查标头来验证。因此,扩展名是缩小预期潜在标头集的最佳方法。至于扩展名“不可信”,我的意思是说它是可人工编辑的,不会影响文件内容。简单的例子:将 Word“.docx”文件重命名为“.zip”,使用 Windows 资源管理器解压时不会出现任何问题。
文件的前几个字节通常带有某种类型的标签来标识它们。程序检查完这些标签后,就会决定下一步该做什么,并希望文件的结构正确,以便可以使用;如果不符合预期,就会发出警告(抛出错误)。
的前两个字节TIFF 文件以“II”或“MM”(intel 或 motorola 字节顺序)开头,后跟 2 个字节的版本信息(始终为 42,很重要);然后是 4 个字节,告诉软件跳转到哪里以获取文件信息“标签”。一旦跳转到标签,每个标签 12 个字节;等等。无需借助文件扩展名即可读取和理解 TIFF,尽管 Photoshop 等软件可能会犹豫不决,因为它需要 .TIF 扩展名提供的提示。
该 TIFF 中的一些信息是可变的或非标准的,因此软件使用标头来决定在哪里找到可以使用的信息。请注意,TIFF 图像数据可以使用 LZW 压缩进行压缩,这可能被认为是 zip 中使用的压缩(最初?)的后代。
Scitex 图像文件 (SCT) 和 jpeg 图像文件 (JFIF) 的标头与 TIFF 标头截然不同,但如果想要编写软件来处理这三种文件类型并按长宽比对图像进行排序,则需要对标头信息进行比较以识别文件类型,然后运行单独的程序来读取每种类型的宽度和高度。
所有文件存储方案(包括 EXE 和自提取器)都使用标题概念,但实际使用的模式有所不同。
并且“是的” 7-zip 是一个具有大量可识别的标头定义的程序。
答案3
自解压档案由一个简短的“存根”程序组成,该程序可定位同一文件中的 ZIP 内容并将其提取出来。Zip 实用程序通常还能够识别 EXE 是否为自解压档案,并将其视为 zip 文件。
答案4
您的计算机使用扩展名识别文件,它识别出 .zip 文件是一种存档文件格式。扩展名为 .exe 的文件是可执行文件,由 Windows 操作系统使用。您可以将它们想象为可执行存档,其中包含带有代码的文件。文件还包含有关其类型的标头。PE 类型代表可移植可执行格式。存档管理器是非常通用的工具,因为许多文件只是存档,扩展名仅表示文件的使用方式。例如,您可以尝试在存档管理器 (7-zip) 中打开 .pptx。