回收站的成对记录
Windows 回收站不是把文件简单搬进一个目录,而是为每个卷、每个用户 SID 维护一对记录:$I 文件保存元数据,包括原路径、删除时间与文件大小;$R 文件保存被删文件的实际内容。两者的文件名主体是同一个随机编号,因此可以从 $I 读出原路径与删除时刻,再从 $R 取回内容,用于还原删除动作或确认某个文件曾被删除。
基本信息
| 位置 | 各卷根目录下的 \$Recycle.Bin\<用户 SID>\ |
|---|---|
| 文件对 | $I 为元数据、$R 为文件内容,随机编号一一对应 |
| 关键字段 | 原路径、删除时间(FILETIME)、删除时文件大小 |
| 解析工具 | RBCmd.exe(Eric Zimmerman)、Rifiuti2 等 |
| 时间精度 | 删除时间取自系统时钟,秒以下精度多为零 |
典型使用场景
- 判断某个文件是被删除过,还是从来没有在该主机上存在
- 从原路径字段重建删除前的目录结构,定位工具落地位置
- 核对当事人所说的清理时间与实际删除时间是否吻合
- 恶意工具运行后被删除时,从 $R 中取回样本继续分析
- 汇总删除文件名的关键词,判断攻击者关注哪类数据
解析与核对
解析与核对
RBCmd.exe -d D:/$Recycle.Bin --csv out/ --csvf recycle.csv # 解析整卷回收站
# 每卷都要跑一次:C:/$Recycle.Bin、D:/$Recycle.Bin 依次处理
Get-ChildItem 'C:/$Recycle.Bin' -Force -Recurse -Filter '$I*' | Select-Object -First 5 FullName, Length
Import-Csv out/recycle.csv | Sort-Object DeletedOn | Select-Object -Last 10 DeletedOn, Path, FileSize # 按删除时间看最近条目记录字段读法
| 字段 | 含义 | 解读要点 |
|---|---|---|
| 原路径 | 文件删除前所在的完整位置 | 用于重建目录结构,判断来源盘与用户目录 |
| 删除时间 | 删除动作发生的时刻 | 与日志、进程活动对齐,确定责任时间窗 |
| 文件大小 | 删除时记录的大小 | 与 $R 实际大小比对,可看出内容是否被截断 |
| $R 内容 | 被删文件的原始数据 | 与编号对应,可直接作为样本恢复或计算哈希 |
$I 与 $R 按编号配对:若出现只有 $I 而无 $R 的条目,说明该文件是被直接永久删除、未进入回收站,而不是解析失败,这类条目同样能证明删除动作发生过。
回收站按用户 SID 分目录,权限不足时读不到全部条目,现场要用管理员权限采集;把删除行为归到具体用户时以 SID 为准,再回到账号信息核实身份,不要凭目录名或文件名猜测。