TL;DR. 案件工作用 Eric Zimmerman 的 AppCompatCacheParser。OS 覆盖面最广、有 CSV 输出、经过充分测试。舰队规模的活体分诊用 Velociraptor。需要一份简单的 Python 参考时用 Mandiant 的 Shim Cache Parser。想要零安装、零上传时用本工具。意见分歧时做交叉验证。这种格式挑剔到两个 parser 偶尔会看出不同结果。
对于 ShimCache 解析来说有四个值得关注的开源工具。它们各有自己的领域。我看到初级分析师常犯的错误是挑一个并把它当作所有案件的答案。正确答案取决于你是在做规模化、写脚本,还是凌晨两点盯着一份 hive。
真正重要的四个 parser
| 工具 | 语言 | 分发方式 | 最适用于 |
|---|---|---|---|
| Mandiant Shim Cache Parser | Python | GitHub 上的源码 | 读懂格式、编写定制化分析脚本 |
| Eric Zimmerman AppCompatCacheParser | C# / .NET | 单一二进制 | 案件工作。对生产环境报告最可靠。 |
Velociraptor Windows.Registry.AppCompatCache | VQL | Velociraptor 服务端 | 舰队规模的活体采集 |
| Shimcache Parser(本工具) | Rust → WebAssembly | 仅浏览器、无需安装 | 无须设置的快速分诊,数据不离开机器 |
何时该选哪一个
Eric Zimmerman 的 AppCompatCacheParser
离线分析的事实标准。覆盖从 XP 到 Windows 11 的每个 Windows 变体,自动重放 SYSTEM 事务日志,输出能干净地落进 Timeline Explorer 的 CSV。如果你的产出要进入最终报告,这就是评审人员期待你使用的工具。
AppCompatCacheParser.exe -f SYSTEM --csv .
注意点:仅 Windows 二进制,需要 .NET Framework 或 Core,不为临时的浏览器端分诊而设计。
Velociraptor
当你需要从数十或数千台主机上拉取 ShimCache 时,Velociraptor 胜出。该工件直接从运行中的端点读取内存中的缓存,这与 OS 在关机时会刷新的是同一份视图,但不必等到关机。理由见 从内存转储中提取 ShimCache。
注意点:需要 Velociraptor 基础设施。对一次性分析来说杀鸡用牛刀。
Mandiant Shim Cache Parser
原始的 Python proof-of-concept。不如 EZ 工具光鲜,但在你想阅读代码理解格式究竟如何被解码、或想围绕它做定制化分析脚本时很有用。输出是纯文本;与其他 Python 流水线集成。
python ShimCacheParser.py -t -h /path/to/SYSTEM
注意点:需要 Python 2.x 或兼容性分支。CSV / JSON 输出不如 EZ 精致。
本 Shimcache Parser
为其他工具没能很好覆盖的两种情况而存在:
- 零安装分诊。 打开网页,拖入 hive,看到条目。在没有安装 DFIR 工具的主机上、在笔记本或借用机器上分析时很有用。
- 对信任敏感的分析。 hive 完全通过 WebAssembly 在你的浏览器中被解析。文件不离开页面、不到达服务器、不在任何日志中出现。当 hive 属于客户或属于不允许上传的案件时这一点很重要。
权衡:没有命令行界面、没有自动化挂钩。把它用于人工驱动的分诊,不是流水线。对于流水线,EZ 的工具才是正解。
parser 分歧时的交叉验证
二进制格式不留情面。Windows 10/11 布局参考 解释了为什么单一偏移量算错就会一路波及 blob 其余部分。实际中 parser 通常意见一致,但现实里的 hive 偶尔会发布略偏规范的数据,parser 在以下方面会有分歧:
- Win7 hive 上的 bit 数检测。 头部并未明确说明 x86 还是 x64,因此 parser 会启发式地推断。两款工具在同一份 hive 上产出不同路径,就是给你的提示。
- 路径规范化。 反斜杠转义、盘符大小写、起首的
\??\标记。不同 parser 的规范化方式不同。 - 空条目或占位条目。 一些工具会为未使用的槽位输出空白行;另一些则跳过。
当结果重要时,跑两个 parser 然后做 diff。我常用的组合:
- EZ + 本工具,做快速交叉检查。
- EZ + Mandiant,做"Python vs C#"的合理性检查。
- EZ + Velociraptor,做"实时内存 vs 磁盘 hive"对比。
常见坑
- 不要忘了事务日志。
SYSTEM.LOG1和SYSTEM.LOG2携带待处理的写入;没有它们你读到的就是过时的 hive。EZ 的工具会自动重放它们。另一些工具不会。见 获取 SYSTEM hive。 - 不要直接比较磁盘和内存中的 ShimCache。 它们是不同的真值来源。磁盘的只反映上一次 clean shutdown 的状态。内存的反映当前会话。把它们当作互补而非可替代。
- 不要假定执行。 没有 parser 能解决这一点。该缓存记录的是检查,不是执行。
延伸阅读
- Eric Zimmerman 的 AppCompatCacheParser:参考 parser。
- Mandiant 的 Shim Cache Parser:原始 Python 实现。
- Velociraptor
Windows.Registry.AppCompatCache:VQL 工件。 - Ø Security 的 Windows 10/11 AppCompatCache deep dive:解释为何 parser 偶尔会有分歧。