iOS浏览器状态数据库时间戳深度解析

本文深入分析了iOS系统中BrowserState.db数据库的last_viewed_time字段的真实含义,通过多版本iOS系统实验揭示了该时间戳与标签页焦点切换的关系,而非页面访问时间,对数字取证具有重要意义。

BrowserState.db last_viewed_time字段深度解析

问题背景

近期关于iOS系统中BrowserState.db数据库的疑问促使我深入研究这一数据源。问题核心围绕在TABS表中last_viewed_time字段时间戳的准确性上。

该时间戳常被误认为是同一记录中URL的访问时间,这看似合理——记录包含URL、页面标题和时间戳,甚至字段名就是"最后查看时间"。但实际上,这个数据库与会话相关,而非单个页面访问。

iOS14实验分析

从干净状态开始测试,清空浏览器历史后:

  • 09:41使用Safari搜索框搜索"0941"
  • BrowserState.db立即创建,last_viewed_time基本准确
  • 几分钟后使用Google搜索栏搜索"0944"
  • 标题更新为0944,但last_viewed_time仍显示09:41
  • 重复测试得到相同结果

关键发现:last_viewed_time反映的是标签页获得焦点的时间,而非搜索执行时间。

标签页切换测试

  • 打开新标签页搜索"0949":创建新记录,last_viewed_time准确
  • 返回第一个标签页搜索:last_viewed_time更新为切换焦点时间
  • 最小化/最大化Safari:对时间戳影响不一致
  • 完全关闭后重开Safari:即使不搜索也会更新last_viewed_time

iOS15变化

行为模式显著不同:

  • 数据库在标签页关闭时才创建
  • 最小化/最大化操作不影响时间戳
  • 记录写入时机发生变化,但时间戳含义相同

iOS16与iOS17

延续iOS15的行为模式,主要差异在于数据库创建和记录写入的时机。

TAB_SESSIONS表分析

通过tabs表的UUID可在tab_sessions表中找到对应记录,session_data blob包含会话期间的所有导航条目,包括搜索和页面导航,但缺少时间戳信息。

Google EI时间分析

Google EI时间戳反映的是前一个页面加载时间,而非搜索执行时间:

  • 访问google.com时EI时间即被记录
  • 执行搜索时,使用之前记录的EI值
  • 可能造成时间偏差,特别是当页面加载后很久才执行搜索时

结论

BrowserState.db的last_viewed_time字段和Google EI时间戳都只能作为页面访问时间的近似值:

  • last_viewed_time表示标签页焦点时间
  • EI时间戳表示前序页面加载时间
  • 两者可能与实际访问时间存在显著差异

这体现了数字取证中理解数据源真实含义的重要性,即使字段名称看似明确,实际含义可能完全不同。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计