TL;DR. 正式案件取证用 Eric Zimmerman 的 AppCompatCacheParser —— 操作系统覆盖最全、CSV 输出、经过充分检验。大规模在线分诊用 Velociraptor。需要一份简洁的 Python 参考实现时用 Mandiant 的 ShimCacheParser。需要零安装、零上传时用 本工具(浏览器内快速分诊)。结果不一致时请交叉验证:格式相当挑剔,两个解析器偶尔会得出不同结果。
真正重要的四款解析器
| 工具 | 语言 | 分发方式 | 最适合 |
|---|---|---|---|
| Mandiant ShimCacheParser | Python | GitHub 源码 | 学习格式、编写自定义分析脚本 |
| Eric Zimmerman AppCompatCacheParser | C# / .NET | 单一可执行文件 | 案件工作 —— 出报告时最可靠 |
Velociraptor Windows.Registry.AppCompatCache | VQL | Velociraptor 服务器 | 全网规模的在线采集 |
| Shimcache Parser(本工具) | Rust → WebAssembly | 仅浏览器、无需安装 | 无需 setup 的快速分诊;数据不离开本机 |
何时用哪个
Eric Zimmerman 的 AppCompatCacheParser(案件工作的默认选择)
EZ 的 C# 解析器是离线分析的事实标准。覆盖从 XP 到 Windows 11 的所有版本,自动重放 SYSTEM 事务日志,输出可直接喂给 Timeline Explorer 的 CSV。若结果要写进最终报告,这就是审稿人期望的工具。
AppCompatCacheParser.exe -f SYSTEM --csv .
限制:仅 Windows 二进制;需要 .NET Framework / Core;不适合浏览器内的临时分诊。
Velociraptor Windows.Registry.AppCompatCache(规模化采集)
当你需要从几十、几千台主机上拉取 ShimCache 时,Velociraptor 胜出。该工件直接从运行中端点读取内存中的缓存 —— 与 OS 在关机时本会落盘的视图一致,无需等待关机。详见从内存转储中提取 ShimCache。
限制:需要 Velociraptor 基础设施;对一次性分析过于重量级。
Mandiant 的 ShimCacheParser(格式参考实现)
最早的 Python proof-of-concept。不如 EZ 的工具精致,但当你想 读源码 弄清楚格式如何解码,或想围绕它写自定义 Python 分析时很有用。输出为纯文本;适合融入 Python 流水线。
python ShimCacheParser.py -t -h /path/to/SYSTEM
限制:需要 Python 2.x(或兼容分支);CSV / JSON 不如 EZ 精致。
本 Shimcache Parser(无需安装、无需上传)
本工具填补了其它工具不太擅长的两类场景:
- 零安装分诊:打开页面,拖入配置单元,立即查看条目。在没有 DFIR 工具的主机上、或在笔记本/借来的机器上分析时很方便。
- 对隐私敏感的分析:配置单元完全在浏览器内通过 WebAssembly 解析。文件不离开页面,不接触任何服务器,不出现在任何日志里。当配置单元属于客户/敏感案件、上传不可接受时尤其重要。
权衡:无命令行、无 CSV 导出(暂未),无自动化钩子。适合人工驱动的分诊,不适合流水线。流水线场景请用 EZ。
交叉验证:两个解析器结果不一致时
ShimCache 的二进制格式很挑剔 —— Windows 10/11 格式参考展示了一处偏移算错就会连锁崩塌。实战中各解析器多半一致,但真实配置单元偶有轻微离规,常见的分歧点:
- Win7 配置单元的位宽检测 —— 头部不显式表明「x86 vs x64」,各解析器靠启发式判断。两个工具在同一份配置单元上给出不同路径,就是信号。
- 路径规范化 —— 反斜杠转义、盘符大小写、
\??\前缀。各解析器规范化策略不同。 - 空白/占位条目 —— 有的输出空行,有的直接跳过。
紧要时跑两个解析器并 diff。常用组合:
- EZ + 本工具,做快速交叉检查
- EZ + Mandiant,做「Python vs C#」的可靠性检查
- EZ + Velociraptor,对比「内存 vs 磁盘」
常见陷阱
- 别忽略事务日志。
SYSTEM.LOG1/SYSTEM.LOG2携带挂起的写入;少了它们你读到的就是过期配置单元。EZ 会自动重放,其它工具未必。参见获取 SYSTEM 配置单元。 - 别直接对比磁盘和内存里的 ShimCache。 它们是不同的真相来源 —— 磁盘只反映上一次干净关机的状态,内存反映当前会话。互补,而非冗余。
- 别假设执行过。 没有解析器能解决这一点 —— 缓存记录的是「检查」,不是「执行」。
延伸阅读
- Eric Zimmerman 的 AppCompatCacheParser —— 参考解析器。
- Mandiant 的 ShimCacheParser —— 最早的 Python 实现。
- Velociraptor
Windows.Registry.AppCompatCache—— VQL 工件。 - Windows 10/11 AppCompatCache deep dive (Ø Security) —— 解释解析器为何偶尔不一致。