iOS14地图历史BLOB解析脚本:数字取证技术深入解析

本文详细介绍了一个用于解析iOS14地图历史数据的Python脚本,该脚本能够从MapsSync数据库提取协议缓冲区BLOB数据并生成HTML报告,涉及SQL查询、数据解析和数字取证技术。

iOS14地图历史BLOB脚本

又一个BLOBBY SQL(续集)!

这篇快速发布的文章介绍了一个新的iOS 14苹果地图历史辅助脚本…

感谢Heather Mahalik分享她的研究,以及她和她的同事Sahil进行的测试。

您可以在Heather的博客上阅读关于iOS14研究的内容。

该脚本(ios14_maps_history.py)专注于苹果地图应用的MapsSync_0.0.1 SQLite数据库,该数据库可以包含最近3-5次路线/搜索记录。

数据库中有32个表,但正如我们在Heather的以下查询中看到的 - 大部分历史信息存储在名为ZHISTORYITEM的表和ZMIXINMAPITEM表中。这两个表都包含协议缓冲区BLOB,脚本会提取这些BLOB以供用户进一步处理,同时生成HTML摘要报告。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
SELECT
ZHISTORYITEM.z_pk AS 'Item Number',
CASE
when ZHISTORYITEM.z_ent = 14 then 'coordinates of search'
when ZHISTORYITEM.z_ent = 16 then 'location search'
when ZHISTORYITEM.z_ent = 12 then 'navigation journey'
end AS 'Type',
datetime(ZHISTORYITEM.ZCREATETIME+978307200,'UNIXEPOCH','localtime') AS 'Time Created',
datetime(ZHISTORYITEM.ZMODIFICATIONTIME+978307200,'UNIXEPOCH','localtime') AS 'Time Modified',
ZHISTORYITEM.ZQUERY AS 'Location Search',
ZHISTORYITEM.ZLOCATIONDISPLAY AS 'Location City',
ZHISTORYITEM.ZLATITUDE AS 'Latitude',
ZHISTORYITEM.ZLONGITUDE AS 'Longitude',
ZHISTORYITEM.ZROUTEREQUESTSTORAGE AS 'Journey BLOB',
ZMIXINMAPITEM.ZMAPITEMSTORAGE as 'Map Item Storage BLOB'
from ZHISTORYITEM
left join ZMIXINMAPITEM on ZMIXINMAPITEM.Z_PK=ZHISTORYITEM.ZMAPITEM;

从查询中我们可以看到有3种类型的条目:

  • “位置搜索”
  • “搜索坐标”(通常在ZMAPITEMSTORAGE列中有"地图项目存储"BLOB)
  • “导航旅程”(通常在ZROUTEREQUESTSTORAGE列中有"旅程"BLOB)

请注意,根据Heather的博客 - “创建时间”(以及 presumably “修改时间”)并不是搜索执行时间的准确记录。“位置搜索"条目(即搜索位置文本)似乎后面跟着"搜索坐标"条目(包含搜索位置的纬度/经度)。

当请求路线时,会创建一个"导航旅程"条目,其中包含一个"旅程BLOB”,该BLOB包含起点/终点位置。

然而,即使用户没有明确要求计算旅程,似乎也会生成"导航旅程"条目。在Sahil的数据中有2个这样的条目,尽管他没有使用设备进行导航。

这些BLOB需要进一步研究 - 因此有了这个脚本:)

ios14_maps_history.py运行Heather的查询并创建一个HTML报告(名为iOS14-MapsReport.html),其中包含指向提取的BLOB文件的链接。

每个BLOB都从数据库中提取并存储在用户指定的输出目录中。

该脚本已在Ubuntu 20和Win10x64上使用Python3进行测试。

Ubuntu 20.04 LTS with Python 3.8.2的使用示例:

1
python3 ios14_maps_history.py -d MapsSync_0.0.1 -o optest

这将把Heather的查询输出到一个HTML表格中,并带有指向每个提取的BLOB文件的超链接。

所有文件将在用户指定的"optest"目录中创建。

相应的命令行输出如下:

1
2
3
4
Running ios14_maps_history.py v2020-09-19
Processed 15 entries
Please refer to iOS14-MapsReport.html in "optest" directory
Exiting ...

Win10 with Python 3.6的使用示例:

1
c:\Python36\python.exe ios14_maps_history.py -d MapsSync_0.0.1 -o opdir

以下是输出HTML表格的样子:

![HTML表格示例]

注意:经纬度已被编辑以保护并非完全无辜的人;)

输出的BLOB可以使用protobuf_inspector等工具进行进一步研究。

这是一个非常时髦的工具,可以漂亮地打印协议缓冲区,并以多种方式解释64位字段(对于查找潜在的经纬度很有用)。它也很容易安装…

1
pip install protobuf-inspector

Monkey已使用protobuf_inspector在提取的苹果地图协议缓冲区上找到了一些目的地Yelp评论,以及似乎是纪元毫秒时间戳的内容(参考1970年1月1日),这些时间戳出现在GUID之后。然而,由于这不是我的测试数据且样本量较小,我无法确认这是否是搜索时间…

无论如何,这就是这篇文章的结尾…祝那些即将深入探索协议缓冲区沼泽的人们好运!

如果您碰巧使用此脚本发现了一些有趣的内容,请留言并分享知识!

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