peli-rufus/IconCacheReader

GitHub: peli-rufus/IconCacheReader

一款跨平台 DFIR 工具,用于从 Windows IconCache.db 数据库中提取历史二进制路径并可选地通过 Amcache.hve 进行 SHA1 丰富化。

Stars: 0 | Forks: 0

# IconCacheReader [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/2ba036f33f183752.svg)](https://github.com/peli-rufus/IconCacheReader/actions/workflows/ci.yml) [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE) [![Platform](https://img.shields.io/badge/Platform-Windows%20%7C%20Linux%20%7C%20macOS-blue)](https://github.com/peli-rufus/IconCacheReader/releases) [![Python](https://img.shields.io/badge/Python-3.8%2B-blue?logo=python)](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取证, 取证工具, 取证镜像, 后门检测, 哈希分析, 安全运维, 库, 应急响应, 恶意软件分析, 批量测试, 数字取证, 无线安全, 漏洞挖掘, 痕迹分析, 网络安全审计, 自动化取证, 自动化脚本, 跨平台工具, 逆向工具