Windows 图元文件 (.wmf)
[MS-WMF]:Windows 标准Windows 图元文件(WMF)是微软传统的 16 位矢量和栅格容器格式,在 Windows 3.0 时代设计,用于在 Windows 应用程序之间共享可缩放的剪贴画和图形。
将 WMF 转换为 SVG
免费的浏览器端 WMF 转 SVG 转换器。在您的设备上即时转换文件。
检查与元数据
操作系统和文件分析器通过检查开头的二进制字节序列来识别 WMF 文件:
字节级文件头签名 (魔数)
操作系统和文件分析器通过检查开头的二进制字节序列来识别 WMF 文件:
十六进制签名 (偏移量 0):
D7 CD C6 9A / 01 00 09 00ASCII 表示形式: ×ÍÆš / ....
标准化: [MS-WMF]:Windows 图元文件格式规范
技术规格
| 容器架构 | 16 位 GDI 图元文件记录,可选带有 22 字节的 Aldus 可放置文件头 |
| 压缩方式 | 未压缩的 16 位矢量和光栅绘图命令记录 |
| 字节序 | 小端序(Intel x86) |
| 色彩空间 | 设备相关 RGB |
| 通道与结构 | 矢量路径、多边形、文本字符串,以及内嵌的 16 位/24 位 DIB 位图 |
| 最大尺寸 | 16 位整数坐标空间(-32,768 至 +32,767 个单位) |
| 透明度 | 二元光栅操作(ROP2)透明度蒙版 |
| 流式传输与渐进式加载 | 按顺序将记录直接重放至 16 位 Windows GDI |
技术对比矩阵:WMF 对比同类产品
| 技术属性 | WMF (当前) | EMF | SVG | EPS |
|---|---|---|---|---|
| 坐标空间 | 16 位整数(-32768 到 32767) | 32 位整数坐标 | IEEE 双精度浮点数 | 1/72 英寸 PostScript 点 |
| 操作系统 | 传统 16 位 Windows GDI | 32 位 Windows GDI+ | 软件支持情况因程序而异。 | PostScript 印前标准 |
| 现代浏览器支持 | 浏览器均不原生支持 | 浏览器均不原生支持 | 兼容性因浏览器和应用而异。 | 浏览器均不原生支持 |
| 安全态势 | 传统原生解析器中的高风险 | 原生 GDI 中的中等风险 | 安全的声明性 XML(经过消毒) | 高风险(可执行语言) |
常见损坏模式与十六进制恢复指南
图形显示严重扭曲或收缩成微小的点。
根本原因: 缺少或损坏的 Aldus 可放置头部(缺少 0xD7CDC69A 魔术标记和边界框)。
恢复方法: 重新注入标准可放置边界框,或使用 File2File.app 图元文件转换器转码为 SVG。
安全分析与解析器攻击向量
由于存在 GDI 回调执行记录(SETABORTPROC),WMF 是计算史上最容易受到攻击的格式之一。
已知攻击向量
- 通过传统 Windows GDI 中的 SETABORTPROC 记录调用执行任意代码。
- 处理损坏的 16 位多边形点数组时发生缓冲区溢出。
- 在嵌入式 DIB 位图解压期间发生越界堆读取。
防御性最佳实践: 绝不要使用原生操作系统 GDI API 解析 WMF 文件;请严格在隔离的 WebAssembly 环境中进行转码。
历史渊源与里程碑
2006微软针对严重的 Windows 图元文件漏洞(CVE-2005-4560)发布紧急补丁。
1993随着 Windows NT 的发布,被 32 位的增强图元文件(EMF)格式所取代。
1990随 Windows 3.0 一同推出,迅速成为桌面出版剪贴画的标准格式。
核心优势与特点
- 紧凑的矢量存储:传统的 1990 年代剪贴画文件通常只有几千字节大小。
- 可缩放的矢量形状和字体能够平滑缩放到早期桌面打印机的分辨率。
- 嵌入在数百万个旧版 Microsoft Office 文档和档案中的历史标准。
技术局限与劣势
- 严重过时:与现代矢量格式相比,16 位整数坐标限制了绘制精度。
- 恶劣的安全历史:传统的 WMF 记录执行功能允许关键的远程代码执行。
- 不支持渐变、不透明度遮罩或 CSS 样式等现代矢量特性。
趣味技术冷知识
- 可放置的 WMF 头部以魔数 0xD7 0xCD 0xC6 0x9A 开头,这是由 Aldus Corporation 为 PageMaker 发明的。
- 2005 年的"SETABORTPROC"记录漏洞允许攻击者只需让用户在 Windows 资源管理器中查看图片,就能执行任意汇编代码。
- 1990 年代的数百万张软盘剪贴画收藏完全以 .WMF 格式分发。
常见技术问题
什么是 WMF 文件?
WMF (Windows Metafile) 是微软于 1990 年创建的传统 Windows 矢量格式,用于在 Windows 3.0 和早期微软 Office 版本中存储剪贴画和插图。
如何将 WMF 转换为 SVG 或 PNG?
您可以直接在网页浏览器中使用 File2File.app,安全地将 WMF 文件转换为现代、可缩放的 SVG 矢量图或 PNG 图像。
为什么过去 WMF 被认为具有危险性?
在 2005 年,人们发现了一个严重漏洞:WMF 文件能够触发可执行的打印机回调,导致恶意文件只需被查看就能感染计算机。