Windows 7 RecentFileCache 执行痕迹分析
用于解析 Windows 7 / Server 2008 R2 的 RecentFileCache.bcf。该文件属于旧版应用兼容性机制,会保存自最近一次 AppCompat 刷新后执行过的程序完整路径,因此在适用系统上属于直接的执行痕迹,可补充 Prefetch 和 Amcache。Skill 使用 RecentFileCacheParser 输出结构化结果,提取 ExecutablePath、SourceFile 等信息,并明确 Windows 8 及之后该机制已被 Amcache.hve 取代:找不到 RecentFileCache.bcf 时应视为版本不适用的正常跳过,而不是解析失败,避免在新系统上产生错误结论。
在 AI 中使用此 Skill将本页链接复制给 AI,即可让 AI 获取完整 Skill 内容并按此执行
安全提示: 本站 Skill 均经 ChatGPT 最新模型扫描,未发现恶意脚本及危险指令、未检出已知恶意行为特征,但不保证绝对安全,使用即表示接受此风险
Skill 文件
版本 20260601 · 70cffff96cd6a327ba820d21c59cd403
SKILL.md
--- name: dfir-recentfilecache description: Parse and interpret Windows 7 RecentFileCache.bcf. Use to recover the full paths of executables that ran since the last AppCompat flush on a Windows 7 asset — a third execution-evidence source alongside Prefetch and Amcache. --- ## XingLo Standalone Package Notes This package includes the SIFT tool-path map at `references/tools.env` for the variables used below. In the original full suite the parse-phase marker is owned by `/case-parse`; when this Skill is used independently outside that suite, the parsing commands themselves remain read-only on source evidence and write only their derived output directory. # dfir-recentfilecache — Parse RecentFileCache.bcf ## Preconditions — runs inside the parse phase This is a **parse-phase** artifact parser: it writes parsed output under `./export/`, which the evidence guard permits **only while the phase marker `./audit/.dfir_phase` reads `parse`**. Normal use is under `/case-parse` (or `/case-investigate`), which has already armed the parse phase — so just parse. **The phase marker is owned solely by `/case-parse`.** `/case-parse` arms `parse` at the start and writes `parse-complete` only once the **entire** parse phase has finished (closing the phase and re-locking `./export/`). This skill — and every other artifact parser — must **never** write, change, or close `./audit/.dfir_phase`: not to unblock a write, not for any reason. **Do not stop the investigation if an `./export/` write is blocked** (guard message `BLOCKED (evidence integrity): … outside the parse phase`, or a permission denial on an `export/` write): the parse phase just isn't armed. Run **`/case-parse`** — the marker's owner — to arm it, then re-run the blocked step. Do **not** set the marker yourself, and **never** reroute parsed output to `./analysis/` to dodge the block (`./analysis/` is for analysis-phase tool runs only) — parsed evidence belongs under `./export/` and nowhere else. --- ## Overview `RecentFileCache.bcf` is a **Windows 7 / Server 2008 R2** application-compatibility artifact that records the full paths of executables run since the last AppCompat flush. A path in the file is **execution evidence**: that binary ran. On Windows 8+ it was superseded by Amcache.hve, so the file is **absent on Win8/10/11** — treat its absence as a clean skip, not a failure. **Primary tool:** `$EZRECENTFILECACHE` (RecentFileCacheParser). No second parser exists. --- # ── PART 1 · PARSING (used by /case-parse) ── ## Case Path Convention `<source-dir>` is the operator-created mount subdirectory under `./sources/<asset_id>/`, used **verbatim** — copy the real directory name exactly as it appears (e.g. `mnt-001-base-dc-cdrive`), never a partition number or other abbreviation. The export path mirrors that name one-to-one (`export/<asset>/<source-dir>/<artifact>/`, the canonical layout owned by `/case-parse`). | Input | Path | |-------|------| | RecentFileCache.bcf | `./sources/<asset_id>/<source-dir>/Windows/AppCompat/Programs/RecentFileCache.bcf` | Output: `./export/<asset_id>/<source-dir>/recentfilecache/` Output filename: `<asset_id>-<source-dir>-recentfilecache-rfcparser.csv`. All input from `./sources/`. --- ## Parsing Steps ### 0. Locate the artifact (case-insensitive, Win7 only) — run first ```bash SRC="./sources/<asset_id>/<source-dir>" RFC="$(find "$SRC" -ipath '*/Windows/AppCompat/Programs/RecentFileCache.bcf' -type f 2>/dev/null | head -1)" [ -n "$RFC" ] \ && echo "RecentFileCache present (Win7): $RFC" \ || echo "absent — Win8+ or never created; use Amcache instead" ``` `find -ipath` resolves any casing of `Windows/AppCompat/Programs/` — see the case-insensitive convention in `/case-parse`. Steps below use `$RFC`; re-resolve it if you run a block standalone. ### 1. Parse to CSV (primary) ```bash $EZRECENTFILECACHE \ -f "$RFC" \ --csv "./export/<asset_id>/<source-dir>/recentfilecache/" \ --csvf "<asset_id>-<source-dir>-recentfilecache-rfcparser.csv" ``` Expected output: a CSV listing executable paths. The artifact carries **no per-entry timestamp**. --- ## Fallback Tool There is no second independent parser for `.bcf`. If `$EZRECENTFILECACHE` fails, retry once via the router entry "Windows RecentFileCache" (`/usr/local/bin/RecentFileCacheParser`); if that also fails, the artifact is **unparseable** — log it in `./audit/artifact_failures.log` and surface it in the report's Gaps / Unknowns section. --- ## Parsing Notes - The lowercase wrapper `/usr/local/bin/recentfilecacheparser` is also installed on SIFT. --- # ── PART 2 · ANALYSIS (used by /case-analyze) ── ## Key Fields | Column | Meaning | |--------|---------| | `SourceFile` | The `RecentFileCache.bcf` parsed | | `ExecutablePath` | Full path of an executable that ran since the last AppCompat flush | There is no timestamp per entry — the artifact proves execution, not *when*. --- ## Interpretation & Analysis - **Every path is an execution lead.** Flag those in `\Temp\`, `\AppData\`, `\Users\Public\`, `\Windows\Temp\`, `\ProgramData\`, or other non-standard locations. - **No timestamps:** never place a RecentFileCache hit on the timeline by itself — bound its timing by correlating the path with Prefetch (`LastRun`), Amcache (first-seen), Shimcache, and `$MFT`/`$SI` timestamps for the same binary. - **Win7 execution triad:** RecentFileCache + Prefetch + Amcache are the three Win7-era execution sources; corroborate a suspect binary across them before escalating. --- ## Analysis Notes - Present only on Windows 7 / Server 2008 R2. On newer systems this skill records EMPTY/skips.
此文件不提供内嵌文本预览
请使用左侧文件行末尾的外链图标打开原始文件。
