这些文件都是7-Zip自解压缩文件(SFX)的默认模板。每个文件名后缀代表不同类型的操作系统和处理器架构

 

这些文件都是7-Zip自解压缩文件(SFX)的默认模板。每个文件名后缀代表不同类型的操作系统和处理器架构。

Default.SFX:这是用于32位Windows操作系统的默认SFX模板,其中包含了7-Zip解压程序。

Default64.SFX:这是用于64位Windows操作系统的默认SFX模板,其中包含了7-Zip解压程序。

WinCon.SFX:这是用于32位Windows控制台应用程序的SFX模板,其中包含了7-Zip解压程序和一个命令行窗口。

WinCon64.SFX:这是用于64位Windows控制台应用程序的SFX模板,它包含了7-Zip解压程序和一个命令行窗口。

Zip.SFX:这是用于任何操作系统的默认ZIP压缩文件的SFX模板,其中包含了7-Zip解压程序。

Zip64.SFX:这是用于任何操作系统的大文件ZIP压缩文件的SFX模板。与Zip.SFX一样,它也包含了7-Zip解压程序,但支持更大的文件。

这些SFX模板可以方便地用于创建自定义自解压缩文件,其中包含了指定的文件和7-Zip解压程序。开发者可以使用7-Zip提供的命令行界面(7z.exe)或其他工具来构建自定义SFX文件,以满足特定的分发需求。


更偏底层/原理级的技术拆解,不仅解释“是什么”,还讲清楚这些 .SFX 模板在内部是如何工作的,以及它们之间真正的差异点。


一、SFX 本质:不是“压缩包”,而是“可执行程序 + 压缩数据”

7-Zip 的 SFX 文件本质结构:

 
[SFX模块(EXE)] + [配置段(可选)] + [压缩数据(7z/zip)]

也就是说:

👉 它其实是一个 Windows 可执行文件(PE结构)
👉 后面“拼接”了一段压缩包数据

运行时流程:

  1. SFX EXE 启动(WinMain)
  2. 定位自身文件末尾的数据段
  3. 调用内置解压模块(LZMA / ZIP)
  4. 解压到临时目录
  5. 根据配置执行程序(可选)

二、6种 SFX 模板的真正区别(深入版)

你列的分类基本正确,但我们把它拆到实现层级来看:


1️⃣ Default.SFX(32位 GUI)

技术特征:

  • PE32(x86)
  • 子系统:Windows GUI
  • 使用 WinAPI(无控制台窗口)
  • 内置:
    • LZMA 解压器
    • 简单 UI(进度条)

运行行为:

  • 双击 → 无黑窗口
  • 显示进度条
  • 支持 config.txt 自动执行程序

适用: 👉 给普通用户发安装包


2️⃣ Default64.SFX(64位 GUI)

核心区别:

  • PE32+(x64)
  • 可调用 64 位 API
  • 更大地址空间

但注意:

👉 解压逻辑 ≈ 完全一样
👉 性能差异很小(除非超大文件)

存在意义:

  • 避免 WOW64(32位进程在64位系统运行)
  • 更“原生”

3️⃣ WinCon.SFX(32位 控制台)

关键点:

  • 子系统:Console
  • 启动时会出现 CMD 窗口

内部行为:

 
main() → 控制台输出 → 解压日志

特点:

  • 可以输出日志
  • 可重定向输出(> log.txt)
  • 更适合脚本调用

4️⃣ WinCon64.SFX(64位 控制台)

和上面一样,但:

  • x64 架构
  • 支持更大内存
  • 适合服务器/自动化部署

5️⃣ Zip.SFX(ZIP格式 SFX)

⚠️ 这是很多人误解的点:

它不是“通用操作系统”,而是:

👉 使用 ZIP 解压引擎,而不是 7z(LZMA)

区别:

特性 7z SFX Zip SFX
压缩算法 LZMA Deflate
压缩率 较低
兼容性 需7z模块 更通用

内部变化:

 
解压模块:
- 7zSFX → LZMA decoder
- ZipSFX → ZIP decoder

6️⃣ Zip64.SFX(大文件ZIP)

核心差异:

支持:

 
ZIP64 扩展格式

👉 解决 ZIP 的限制:

限制 传统 ZIP ZIP64
单文件 4GB
总大小 4GB
文件数 65535

技术实现:

  • 使用 ZIP64 Header
  • 解析 64-bit size 字段

三、SFX 的关键技术点(重点)

🔹 1. 文件拼接(核心机制)

构建 SFX:

bash
copy /b 7z.sfx + config.txt + archive.7z output.exe

👉 /b = 二进制拼接

最终结构:

 
[EXE stub][config][7z data]

🔹 2. 配置段(config.txt)

示例:

txt
;!@Install@!UTF-8!
Title="My App"
RunProgram="setup.exe"
;!@InstallEnd@!

解析方式:

  • SFX 启动后扫描标记:
     
    ;!@Install@!
  • 读取配置
  • 控制行为

🔹 3. 解压流程(底层)

伪代码:

c
open_self();
locate_archive_offset();
init_decoder();
extract_to_temp();
if (RunProgram)
    execute();

🔹 4. 临时目录机制

默认:

 
%TEMP%\7zSxxxx.tmp\

特点:

  • 自动清理(部分版本)
  • 防止污染系统

四、架构差异总结(核心对比)

模板 架构 UI 解压引擎 场景
Default x86 GUI LZMA 普通用户
Default64 x64 GUI LZMA 64位系统
WinCon x86 控制台 LZMA 脚本
WinCon64 x64 控制台 LZMA 自动化
Zip x86 GUI ZIP 兼容
Zip64 x64 GUI ZIP64 超大文件

五、关键结论(很多人不知道)

✅ 1. SFX ≠ 压缩格式

它只是“EXE壳 + 压缩数据”


✅ 2. 32/64 位差异不在压缩,而在“运行环境”


✅ 3. 真正决定行为的是:

  • SFX 模块
  • config.txt
  • 压缩格式

✅ 4. 可以魔改(高级玩法)

你可以:

  • 替换图标(Resource Hacker)
  • 修改标题
  • 注入安装逻辑
  • 做“伪安装器”

六、进阶(如果你要更深入)

我可以继续帮你拆:

👉 SFX 模块内部 PE 结构
👉 如何反编译 7zSFX
👉 如何做“静默安装 EXE”
👉 如何做企业级一键部署包


 

posted @ 2023-10-23 16:44  suv789  阅读(623)  评论(0)    收藏  举报