dynamic 输出是什么
plaso 的 psort 支持把时间线导出成 dynamic 格式,本质是一个 SQLite 数据库,事件放在 events 表里。相比 CSV,数据库允许用标准 SQL 反复做聚合、关联与抽样,特别适合需要在同一份数据上多轮探索的场景:先看每小时事件量,再按类型收窄,最后挑具体记录。列名按事件类型展开,通常包含 timestamp、timestamp_desc、data_type、display_name 以及各事件类型的属性列(如文件名、消息内容等),动手前先用 .schema 确认实际结构。
基本信息
| 适用平台 | Windows / Linux / macOS 上运行 plaso(psort.py)后产出 |
|---|---|
| 生成方式 | psort.py -o dynamic -w timeline.plaso <证据文件> |
| 数据库 | SQLite,可用 sqlite3 与任意支持 SQLite 的客户端访问 |
| 核心表 | events(事件明细)与元数据表,列名按事件类型展开 |
| 性能建议 | 在大库上按 timestamp 建索引后再做聚合,可显著缩短查询时间 |
典型使用场景
- 按小时或按天聚合事件量,观察活动密度与可疑时段
- 按 data_type 或来源类型分组,快速判断哪类痕迹最丰富
- 围绕锚点事件取前后时间窗的记录,重建局部时间线
- 用 SQL 的关联能力把两批记录拼起来(例如登录事件与文件创建)
- 抽样核对时间戳格式与字段含义,确认导出结果可用
SQL 查询示例
SQL 查询示例
# 先看表结构,确认列名(不同版本字段有差异)
sqlite3 timeline.plaso ".schema events"
# 抽样看时间戳格式与描述字段
sqlite3 timeline.plaso "SELECT timestamp, timestamp_desc, message FROM events ORDER BY timestamp LIMIT 20;"
# 按小时聚合事件量,观察活动密度
sqlite3 timeline.plaso "SELECT substr(timestamp,1,13) h, count(*) FROM events GROUP BY h ORDER BY h LIMIT 24;"
# 按事件类型(data_type)统计,确定下一步深挖方向
sqlite3 timeline.plaso "SELECT data_type, count(*) c FROM events GROUP BY data_type ORDER BY c DESC LIMIT 20;"
# 大库加速:复制一份再建索引,避免改动原始产物
cp timeline.plaso work.plaso && sqlite3 work.plaso "CREATE INDEX idx_ts ON events(timestamp);"常用列读法
| 列 | 含义 | 判读要点 |
|---|---|---|
| timestamp | 事件时间 | 多为文本格式,排序依赖格式统一,先抽查样本 |
| timestamp_desc | 时间戳语义 | 区分修改时间、访问时间等不同含义,避免混用 |
| data_type | 事件类型标识 | 用于分类聚合,是收窄范围最有效的列 |
| display_name | 数据源名称 | 可判断事件来自哪个解析器或哪个文件 |
| message / filename 等 | 事件属性列 | 按类型展开,字段名以 .schema 输出为准 |
不同 plaso 版本的事件属性列不同,写查询前先执行 .schema events;直接照搬别人的 SELECT 语句容易因列名变化而报错。
不要在原始 .plaso 产物上做建索引、更新等写操作:产物是证据文件,需要加速时先复制副本再改动,并保留原始文件哈希。