解读 Windows 事件日志的二进制格式
一份关于 .evtx 文件内部结构、64 KB 分块与 XML 模板机制、单条事件包含哪些信息,以及为什么这种二进制格式在 Windows 事件响应与数字取证中至关重要的简短入门。
发布于 1 约 {n} 分钟阅读
Windows 事件日志 — .evtx — 是微软在 Windows Vista 中引入的二进制格式,用来取代更老的 .evt。它几乎是每一次 Windows 应急响应的脊柱:登录、服务启动、PowerShell 命令行、Sysmon 进程创建,以及一长串与提供程序相关的通道,几乎都会被序列化进来。
初次接触 .evtx?先看什么是 .evtx 文件和如何打开一个。本文后面的部分,是写给已经熟悉该格式的分析师的通道与 Event ID 速览。
文件结构
每个 .evtx 文件都以一个 4 KB 的文件头开始(魔数 ElfFile\0、校验和、块数量),后面是一连串 64 KB 的块。每个块都有自己的块头(ElfChnk)、本块用到的 XML 模板表,以及一串通过模板 ID 引用这些模板的二进制记录流。解析器通过把模板的占位符与记录自身的值绑定,来重建每条事件。
一条记录长什么样
解码后,每条记录是一个包含两大部分的 XML 文档:
<System>— 提供程序名、通道、Event ID、级别(1 严重 → 5 详细)、计算机名、安全上下文,以及写入时的 UTC 时间戳。<EventData>— 提供程序自定义的参数:登录事件中的目标账号、进程创建中的镜像路径,等等。
仅凭 Event ID 通常不足以做分诊,真正的取证信号藏在 <EventData> 载荷里。
这个工具是怎么读的
解析器是 Rust crate omerbenamram/evtx,被编译为 WebAssembly 后加载到 Web Worker 中运行。当你拖入一个文件,Worker 会把它读入内存,遍历每一个块,并重建每条记录的 XML。整个过程不走网络 — 你可以拔掉 wifi 来验证。