遗留 ShimCache 格式:Windows XP、2003、Vista、7 和 8

约 2 分钟阅读

TL;DR. 每一代 Windows 都重写了 AppCompatCache 结构。XP 使用 0xDEADBEEF magic 和固定 552 字节记录。Server 2003、Vista/2008、Windows 7/2008 R2 以及 Windows 8/8.1 各自有自己的头部和条目布局。parser 必须根据头部 magic 分支。没有单一格式。

大多数 ShimCache 文档讨论的是 Windows 10/11 布局,因为这是调查员在工作站上常见到的。然后你被递来一份 Windows 7 域控、Server 2008 R2 应用机,或者偶尔出现的仍在跑业务代码的 XP 设备的 SYSTEM hive,现代 parser 礼貌地拒绝。本文就是为这些情况准备的参考。

为什么没有单一格式

ShimCache 是一个没有公开规范的 Windows 内部结构。微软随着 shim 基础设施的演进,在各版本之间重新塑造它。注册表 value 名称和路径也变过。健壮的 parser 在读取任何条目之前,先从头部识别版本。Eric Zimmerman 的 AppCompatCacheParser 能处理每一个版本。Mandiant 的 Shim Cache Parser 处理大多数版本。没有版本检测步骤就自己造,正是产出静默错乱的方式。

按版本速查

Windows注册表 value头部 magic条目形状
XP(32 位)…\AppCompatibility\AppCompatCache0xDEADBEEF固定 552 字节记录,最多 96
Server 2003…\AppCompatCache\AppCompatCache0xBADC0FFE24 字节(x86)/ 32 字节(x64)条目
Vista / 2008…\AppCompatCache\AppCompatCache0xBADC0FFE与 2003 类似,flag 不同
Windows 7 / 2008 R2…\AppCompatCache\AppCompatCache0xBADC0FEE32 字节头部;条目带有插入 flag
Windows 8 / 2012…\AppCompatCache\AppCompatCache0x00000080可变长度 00ts 条目签名
Windows 8.1 / 2012 R2…\AppCompatCache\AppCompatCache0x0000008010ts 条目签名

Windows 10/11 的 10ts 现代布局在 另文 中详述。

XP,特立独行

Windows XP 与之后的一切都不同。0xDEADBEEF magic、定宽 552 字节记录、96 条条目的硬上限、对齐到固定长度的 UTF-16 路径。它还存储了一个最后更新时间戳和一个文件大小字段,这两者在后来版本被丢弃。如果你看到 0xDEADBEEF,那就是 XP 的领地,任何现代解析逻辑都不适用。注册表路径也变了:XP 把该 value 放在 AppCompatibility 而不是 AppCompatCache 下。

Windows 7,你最常遇到的那种

Windows 7 和 Server 2008 R2 在 IR 中仍然常见。Magic 0xBADC0FEE、32 字节头部,每条记录包含路径、文件的最后修改时间,以及(独具用处的)一个在 Windows 8 及以后被移除的执行 flag。在 Windows 7 上一个置位的执行 flag 是对执行的合理佐证,但并非绝对。不要把它外推到更新的系统上,参见 ShimCache 能证明执行吗。

Windows 7 hive 还和 AmCache 的前身 RecentFileCache.bcf 成对出现。如果你手头是 Win7 SYSTEM,那么旁边很可能有一份有用的 RecentFileCache.bcf。

8 / 8.1 过渡

Windows 8 引入了带有逐条签名(00ts)的可变长度条目,8.1 把它升级为 10ts。这是 Windows 10/11 格式的结构上的祖先,所以一个能处理 8.1 的 parser 已经走完了通向 10 的大部分路。头部 magic 改到 0x00000080(第一条条目的偏移),这一约定一直保留到现代 hive 中。

Server 2003 与 Vista

Magic 0xBADC0FFE。条目更小(x86 上 24 字节,x64 上 32 字节)。Vista 增加了一个 2003 没有的 flag 字。两者在现代事件响应中并不常见,但在遗留基础设施的 lift-and-shift 迁移中会出现。

不靠工具链就能解析

Shimcache Parser 会自动检测头部 magic,并分支到针对 XP、2003、Vista、7、8、8.1 和 10/11 的正确解码器。你可以在浏览器中读取一份遗留 SYSTEM hive,而无需准备旧工具。这些较旧系统的采集指导见 获取 SYSTEM hive。在遗留主机上做更广泛的注册表分诊时,registry parser 能处理较旧 hive 格式的怪癖。

延伸阅读

相关文章