peli-rufus/IconCacheReader
GitHub: peli-rufus/IconCacheReader
一款跨平台 DFIR 工具,用于从 Windows IconCache.db 数据库中提取历史二进制路径并可选地通过 Amcache.hve 进行 SHA1 丰富化。
Stars: 0 | Forks: 0
# IconCacheReader
[](https://github.com/peli-rufus/IconCacheReader/actions/workflows/ci.yml)
[](LICENSE)
[](https://github.com/peli-rufus/IconCacheReader/releases)
[](https://www.python.org/)
一个跨平台的 DFIR 工具,用于从 Windows **IconCache.db** 数据库中提取历史二进制路径,并可选地使用 **Amcache.hve** 进行 SHA1 enrichment。
为事件响应工作流程构建——可直接从挂载的取证镜像运行,生成表格/JSON/CSV 输出,无需外部依赖。
## 目录
- [什么是 IconCache.db?](#what-is-iconcachedb)
- [取证价值](#forensic-value)
- [功能](#features)
- [下载](#download)
- [快速开始](#quick-start)
- [使用方法](#usage)
- [输出](#output)
- [从源代码构建/EXE](#building-from-source--exe)
- [文件夹结构](#folder-structure)
- [研究致谢](#research-credit)
- [贡献指南](#contributing)
- [许可证](#license)
## 什么是 IconCache.db?
Windows 维护一个图标缓存,以便在每次渲染文件图标时无需重新读取源二进制文件。**路径数据库**位于:
```
%LOCALAPPDATA%\IconCache.db
→ C:\Users\\AppData\Local\IconCache.db
```
它存储了 Explorer 请求图标的**完整文件路径**,以及将每个路径与单独存储在 `iconcache_*.db` 图像存储中的图标像素数据关联的 CRC 哈希。
数据库在**关机或重启时**写入。它在文件删除后仍然存在——即使二进制文件已从系统中移除,路径仍可能出现。
格式研究:Phill Moore & Yogesh Khatri — [Examining the IconCache database](https://thinkdfir.com/2025/12/28/examining-the-iconcache-database/) (ThinkDFIR, 2025-12-28)。
## 取证价值
| 问题 | IconCache 答案 |
|----------|-----------------|
| 该二进制文件是否存在于系统上? | ✅ 强有力的证据 |
| 它是否被执行过? | ❌ 不能单独确定——需与 Prefetch / Shimcache 关联 |
| 用户在 Explorer 中浏览后它是否存在? | ✅ 是 |
| 它在文件删除后是否仍然存在? | ✅ 是 |
| 数据是否实时刷新? | ❌ 仅在关机/重启时写入 |
结合 **Prefetch**(执行)、**Shimcache**(存在性 + 加载顺序)和 **Amcache**(SHA1、首次运行)以获得完整信息。
## 功能
- 正确解析 IconCache.db v0x0507(Win10/11)和 v0x0506(旧版)
- UTF-16LE 回退扫描器,用于损坏或部分损坏的文件
- 设备路径规范化(`\Device\HarddiskVolumeN\...` → `C:\...`)
- 正确的用户名推断,即使镜像挂载在分析师自己的配置文件中
- 可选的 **Amcache.hve** enrichment(SHA1、文件大小、首次运行、产品名称)
- 同时支持现代 `InventoryApplicationFile` 和传统 `File\{VolumeGUID}` 布局
- FULL_PATH → BASENAME → NONE 联接,带置信度标记
- 去重,优先匹配类型
- ASCII 表格、JSON 和 CSV(UTF-8 BOM 用于 Excel)输出
- Windows 控制台 UnicodeEncodeError 保护
- **零外部依赖** — 纯 Python stdlib;单个 `.py` 文件或独立 `.exe`
- 51 个单元和集成测试
## 下载
### 预构建的 Windows EXE(推荐)
从 [Releases](https://github.com/peli-rufus/IconCacheReader/releases) 页面下载 `IconCacheReader.exe`。
无需安装 Python — 复制即可运行。
```
# 验证完整性(与发布版本中的 .sha256 文件比较)
Get-FileHash .\IconCacheReader.exe -Algorithm SHA256
```
### Python 脚本(任何操作系统)
```
# 克隆或直接下载 IconCacheReader.py
git clone https://github.com/peli-rufus/IconCacheReader.git
cd IconCacheReader
# 无需 pip 安装 — 纯标准库
python IconCacheReader.py --help
```
## 快速开始
```
REM Single user profile
IconCacheReader.exe -user-profile "E:\Image\C\Users\Admin"
REM All users, export CSV
IconCacheReader.exe -users-dir "E:\Image\C\Users" -csv results.csv
REM With Amcache SHA1 enrichment
IconCacheReader.exe -users-dir "E:\Image\C\Users" ^
-amcache "E:\Image\C\Windows\AppCompat\Programs\Amcache.hve" ^
-csv results.csv -json results.json
REM Include all file types (not just executables)
IconCacheReader.exe -users-dir "E:\Image\C\Users" -include-non-exe -csv results.csv
```
## 使用方法
```
IconCacheReader.exe [SOURCE] [OPTIONS]
```
### 源(必须选择一个)
| 标志 | 描述 |
|------|-------------|
| `-user-profile PATH` | 单个用户配置文件目录 |
| `-users-dir PATH` | 用户目录 — 处理所有子配置文件 |
### 选项
| 标志 | 描述 |
|------|-------------|
| `-amcache PATH` | Amcache.hve 路径,用于 SHA1 enrichment |
| `-json FILE` | 将 JSON 输出写入 FILE |
| `-csv FILE` | 将 CSV 输出写入 FILE(UTF-8 BOM,可在 Excel 中打开)|
| `-include-non-exe` | 包含所有文件类型(默认:`.exe .dll .sys .com .scr .cpl .ocx .drv .mui .ax`)|
| `-recursive` | 在非标准位置递归搜索 IconCache.db |
| `-no-dedupe` | 禁用去重(默认:开启)|
| `-verbose` / `-v` | 详细日志 |
| `-debug` | 调试日志(非常详细)|
### 示例
```
REM --- Offline forensic image mounted at E:\ ---
REM All users, default filter (.exe/.dll/.sys etc.)
IconCacheReader.exe -users-dir "E:\Image\C\Users" -csv results.csv
REM With Amcache — adds SHA1, first-run, product name columns
IconCacheReader.exe -users-dir "E:\Image\C\Users" ^
-amcache "E:\Image\C\Windows\AppCompat\Programs\Amcache.hve" ^
-csv results.csv -json results.json
REM Single user, all file types (reveals shortcuts, images, etc.)
IconCacheReader.exe -user-profile "E:\Image\C\Users\Admin" ^
-include-non-exe -csv admin_full.csv
REM Verbose — shows which DB version was parsed (0x0507/0x0506/fallback-scan)
IconCacheReader.exe -users-dir "E:\Image\C\Users" -verbose
REM Non-standard image path (analyst profile in the path — user is still inferred correctly)
IconCacheReader.exe -users-dir ^
"C:\Cases\2026-04-ACME\evidence\1771235791-HOST1\C\Users" ^
-csv results.csv
```
## 输出
### 控制台表格(默认)
```
+-------+----------------+----------------------------------------------+-----------+------------+
| USER | ICONCACHE_FILE | BINARY_PATH | EXTENSION | DB_VERSION |
+-------+----------------+----------------------------------------------+-----------+------------+
| Admin | IconCache.db | C:\Windows\System32\cmd.exe | .exe | 0x0507 |
| Admin | IconCache.db | C:\forensic_program_files\pestudio\pest... | .exe | 0x0507 |
| Admin | IconCache.db | \\vmware-host\shared folders\tools\psex... | .exe | 0x0507 |
+-------+----------------+----------------------------------------------+-----------+------------+
```
使用 `-amcache`:
```
+-------+----------------+----------------------------------+-----------+------------+------------------------------------------+------------+
| USER | ICONCACHE_FILE | BINARY_PATH | EXTENSION | DB_VERSION | SHA1 | MATCH_TYPE |
+-------+----------------+----------------------------------+-----------+------------+------------------------------------------+------------+
| Admin | IconCache.db | C:\Windows\System32\cmd.exe | .exe | 0x0507 | AABBCCDD... | FULL_PATH |
| Admin | IconCache.db | C:\tools\mimikatz\mimikatz.exe | .exe | 0x0507 | | NONE |
+-------+----------------+----------------------------------+-----------+------------+------------------------------------------+------------+
```
### CSV 列
`user`、`iconcache_file`、`binary_path`、`raw_path`、`extension`、`db_version`、`sha1`、`match_type`、`size`、`first_run`、`product_name`、`notes`
CSV 以 UTF-8 BOM(`utf-8-sig`)写入,因此 Excel 在所有语言环境下打开时无需导入向导。
### 退出码
| 代码 | 含义 |
|------|---------|
| 0 | 成功 |
| 1 | 部分成功(某些文件解析失败)|
| 2 | 无效参数 |
## 从源代码构建/EXE
### 作为 Python 脚本运行(无需构建)
```
python IconCacheReader.py -users-dir /mnt/image/Users
```
### 本地构建 Windows EXE
需要 Python 3.8+ 和 Windows(或 Windows 交叉编译工具链)。
```
pip install pyinstaller
pyinstaller IconCacheReader.spec
REM Output: dist\IconCacheReader.exe
```
或使用辅助脚本:
```
scripts\build_exe.bat
```
### 自动化发布构建
每次将 `v*.*.*` 标签推送到 GitHub 时,[release.yml](.github/workflows/release.yml) 工作流程:
1. 在 Linux 上运行完整测试套件。
2. 在 Windows 运行器上使用 PyInstaller 构建 `IconCacheReader.exe`。
3. 生成 SHA256 校验和。
4. 创建 GitHub Release 并附加两个文件。
要发布新版本:
```
git tag v2.1.0
git push origin v2.1.0
```
## 研究致谢
此工具的二进制格式解析器基于:
- **Jan Collie** — [The windows IconCache.db: A resource for forensic artifacts from USB connectable devices](https://www.sciencedirect.com/science/article/abs/pii/S1742287613000078)
- **Phill Moore & Yogesh Khatri** — [Examining the IconCache database](https://thinkdfir.com/2025/12/28/examining-the-iconcache-database/) (ThinkDFIR, 2025-12-28)
- **010 Editor 模板 `IconCache.bt`** — Moore & Khatri, v1.0, 2025-11-07
([下载](https://www.sweetscape.com/010editor/repository/templates/file_info.php?file=IconCache.bt))
- **DFIR Artifact Museum** — 真实样本文件
([Windows/IconCache](https://github.com/AndrewRathbun/DFIRArtifactMuseum/tree/main/Windows/IconCache))
## 贡献指南
参见 [CONTRIBUTING.md](CONTRIBUTING.md)。带有真实 `db_version` 值和样本文件的错误报告尤其有价值。
## 许可证
[MIT](LICENSE) — 可免费用于商业和非商业 DFIR 工作。
标签:Amcache, DAST, HTTPS请求, HTTP工具, IconCache.db, PB级数据处理, Python安全工具, SHA1, Windows取证, 取证工具, 取证镜像, 后门检测, 哈希分析, 安全运维, 库, 应急响应, 恶意软件分析, 批量测试, 数字取证, 无线安全, 漏洞挖掘, 痕迹分析, 网络安全审计, 自动化取证, 自动化脚本, 跨平台工具, 逆向工具