注册表键 LastWrite 时间
注册表每个键都带一个 LastWrite 时间,用于判断该键或其子键最后一次被写入的时刻,常用于定位持久化项的出现时间。要点在于它的语义:这是键级时间,不区分具体哪个值被改动;而且系统运行期间改动先累积在内存,按延迟写机制落盘,异常断电可能丢掉最近的写入。
基本信息
| 语义 | 该键或其子键最后一次被写入的时刻,键级而非值级 |
|---|---|
| 查看方式 | Registry Explorer、RECmd;Linux 侧 reglookup、hivexsh 等 |
| 常见用途 | 与 Run 键、服务键、COM 组件的创建时间配合判断 |
| 落盘机制 | 运行期间修改在内存累积,由系统按延迟写策略落盘 |
| 异常场景 | 突然断电或强制关机可能丢失最近一次写入 |
典型使用场景
- 判断某个持久化键是何时被创建或修改的
- 核对配置改动是否落在入侵窗口之内
- 对比两台主机的同名键,识别被改写的配置项
- 与文件时间、日志时间互为旁证,确定事件先后顺序
- 排除系统升级或软件安装带来的正常键变更
查看与离线分析
查看与离线分析
reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
reg query "HKLM\SYSTEM\CurrentControlSet\Services\<服务名>" # 查服务键内容
# Linux 侧分析离线 hive
# reglookup -t key /evidence/NTUSER.DAT | head
# reglookup-timeline /evidence/NTUSER.DAT > hive-timeline.csv # 生成键级别时间线解读要点
| 判断 | 说明 | 风险 |
|---|---|---|
| 键的创建时间 | LastWrite 通常接近该键创建时刻 | 写入子键同样会刷新父键时间 |
| 值被改动 | LastWrite 随之更新 | 无法辨别具体是哪个值发生变化 |
| 时间早于事件窗口 | 说明窗口内该键未再被写入 | 需排除改动发生在其他分支 |
| 与其它证据冲突 | 可能与内存缓存未落盘有关 | 用系统日志与文件时间作旁证 |
系统运行期间的 hive 修改先留在内存、按延迟写机制落盘,所以离线 hive 中的 LastWrite 与真实写入时刻可能错开;与系统日志不一致时先考虑落盘机制,再讨论是否存在人为改动。
把 LastWrite 当作“某个值被修改的精确时刻”是最常见的误读:同一键下任意子键写入都会刷新父键时间。用它定位到具体值时必须配合其它证据,否则结论会显得比实际更确定。