Catalina系统ScreenTime通知的取证分析
如果你经常进行Mac取证工作,可能已经处理过一些macOS Catalina(10.15)系统的检查。如果你是那种会验证数据准确性的取证人员,可能已经注意到对于ScreenTime通知,数据库显示的内容与实际显示的通知字符串不一致,许多取证工具也无法正确解析。
问题根源探究
首先,我们来回顾一下通知数据库的格式。从macOS High Sierra(10.13)开始,通知数据库位于:
/private/var/folders/<xx>/<yyyyyyy>/0/com.apple.notificationcenter/db2/db
其中<xx>/<yyyyyy>部分看起来像是随机字符串,但实际上并非随机。这个文件夹路径代表了特定用户的DARWIN_USER_DIR。
在数据库内部,record表存储了实际的通知数据(标题、副标题、正文)和通知日期等字段。可以通过简单的数据库查询获取有用数据:
|
|
实际通知数据存储在data列的plist中。在这个plist中,可以轻松导航到titl、subt和body项来获取标题、副标题和正文。但是对于ScreenTime通知,数据看起来有所不同。这些值不是单独的字符串,而是列表。
ScreenTime通知的特殊格式
ScreenTime使用格式字符串和数据列表,需要将这些数据重新组合。这与Windows中的事件日志或macOS中的统一日志记录系统的工作方式类似。
格式字符串位于以下路径(英语版本),其他语言也有相应版本:
/System/Library/UserNotifications/Bundles/com.apple.ScreenTimeNotifications.bundle/Contents/Resources/en.lproj/Localizable.strings/System/Library/UserNotifications/Bundles/com.apple.ScreenTimeNotifications.bundle/Contents/Resources/en.lproj/InfoPlist.strings
这些文件都是plist,每个都包含一个单独的字典。因此,在上面plist中看到的WeeklyReportNotificationNegativeDeltaBody会解析为消息: “Your screen time was down %@ last week, for an average of %@ a day.”
%@将被提供的数据替换(15%和6小时24分钟),变成: “Your screen time was down 15% last week, for an average of 6 hours, 24 minutes a day.”
同样,WeeklyReportNotificationTitle变成"Weekly Report Available"。这样,我们就能够重构完整的原始消息。
mac_apt的NOTIFICATIONS插件现在已经更新了此功能。