

关注公众号 一起交流进步
本文围绕 2024 美亚杯 Emma_Mobile_Image 检材展开,聚焦 iOS 设备数据库手动解析技术,详解 7 类核心数据库(通讯、社交、照片等)的字段含义与工具使用,增加手动解析手机数据库知识,结合 24 道实战题目,拆解聊天记录、虚拟货币痕迹、照片元数据等证据提取逻辑。为以后实操提供指引与参考。

审检材

在每次做题目之前,认真审检材了解全貌会有助于做题目的把控度,实战中亦是如此。

DB:是 “Database(数据库)” 的缩写,为数据库存储文件夹
plist:对应 iOS 平台特有的 “属性列表文件” 目录,推断这个文件从苹果手机内下载下来的,可能用于存储配置信息。
通讯与社交类数据库是常分析的数据库,解析如下:

一、message_*.sqlite库
存储 iMessage、短信、FaceTime 等通讯记录(对话内容、联系人、时间戳);


SQLiteSpy是一款用于可视化SQLite数据库的开源工具。它能够直接读取和编辑SQLite格式的数据库文件,常用于电子取证和数据恢复场景。
Unix 时间戳转换工具用于数据库中“createtime”类型的10位Unix时间戳(以秒为单位)和直观的日期和时间格式互相转换。
Createtime #消息的本地创建时间戳,这条消息在设备上被生成(发送 / 接收)的具体时间,例如:1721726695,转换为2024-07-23 17:24:55Des #在微信聊天记录的 SQLite 数据库中,1:代表这条消息是自己发送的;2:代表这条消息是对方发送的ImgStatus #多媒体状态,专门用于记录图像、视频和音频等多媒体消息的加载/缓存状态。0:加载失败、发送未成功或本地缓存已清空,无法直接查看。1:图片、视频、语音等已成功缓存。 2:当前正在加载/缓存中。3:已过期(如超过微信缓存期)或已被用户手动删除,需要重新加载。Message #存储聊天内容,包含:①纯文本消息;②XML 常见于版本同步(如版本更新提示 对用户不可见; ③语音通话记录(如);④加密语音消息(带 AES 密钥的 XML 格式),示例:,采用 AES 加密存储,aeskey是解密密钥,length是语音文件长度,需要通过密钥解密才能播放原始语音。Status #在微信聊天记录的 SQLite 数据库中,4:代表这条消息是对方发送的;2:代表这条消息是自己发送的Type #消息类型,1:文本消息,3:图片 / 表情包消息,49:链接 / 分享类消息,如:公众号文章、小程序、APP 内容等,50:语音通话消息;10000:系统通知消息,如消息撤回提示、群聊通知、好友验证等。

ChatExt2_*是微信聊天记录数据库中的聊天扩展表,它是主聊天表(Chat_*)的配套表,主要存储消息的服务器同步信息、系统标识、预留扩展字段。
MesLocalID #本地消息 ID,与主聊天表(Chat_*)的MesLocalID完全对应,可完整还原每条消息的 “内容 + 系统元数据”,提升证据的可信度。MsgSource中的①表示服务器记录的时间,可以与本地创建时间对比,验证设备时间是否被篡改。②可还原消息的服务器同步顺序,有助于确定消息是否完整或篡改。
二、sms.db库
包含了短信、iMessage 的会话、消息、联系人、附件等完整数据

是会话级别的顶层表,存储聊天会话信息,如群聊 / 单聊的唯一 ID、消息时间、会话标题等。
字段说明:
核心结构是 “服务类型 + 目标标识”

SMS #服务类型为传统短信iMessage #服务类型为苹果即时通讯SMS:+apple #通常是苹果官方的通知号码iMessage:+85298737410 #+852是香港地区的手机号,通过 iMessage 进行即时通讯iMessage:keungf355@gmail.com#keungf355@gmail.com 是用户的邮箱账号,iMessage 支持邮箱作为登录账号,无需绑定手机号。
群聊的房间名称,单聊时为空,群聊时存储群聊名称
与账户关联的登录名,通常是发送该会话消息的手机号 / 邮箱,用于识别会话对应的发送账号

P:+85298737410 #P 代表 Phone会话的唯一标识,与guid类似但更简洁,通常是联系人的号码、邮箱或群聊标识,用于快速识别会话对象
表示与会话进行最后一次交互的联系人,通常是电话号码,用于快速定位会话的主要交互对象
群聊的全局唯一 ID(UUID 格式),每个群聊唯一。

原始群聊 ID(UUID 格式),当群聊被解散时,记录最初的群聊 ID,用于关联历史群聊数据。

确定用户最后一次查看某会话的时间

结合message表的date字段时间戳,验证用户是否在某个时间点查看了特定消息。· 若 chat.last_read_message_timestamp(最后阅读时间) >= message.date(消息收到/发送时间) → 这条消息已被用户查看;
· 若 chat.last_read_message_timestamp < message.date → 这条消息未被用户查看(用户最后阅读会话时,这条消息还未产生,或未翻到这条消息)。

是消息层面的核心表,存储每条消息的具体内容,如短信文本、iMessage 内容、发送时间戳、发送状态、关联会话 ID 等。
字段说明:
纯文本内容,验证码、通知类短信内容

消息替换标记,0:未被替换,为原始消息;非 0:这条消息替换了之前的消息,如编辑后的消息
关联handle表的ROWID,指向这条消息的发送 / 接收方联系人,通过它可获取对方号码 / 邮箱

发送 / 接收这条消息的账号,通常是当前设备的手机号
消息被写入本地数据库的时间戳,是验证消息时间的核心字段,Chat表last_read_message_timestamp处已经介绍这里不多赘述

存储这条短信的目标接收方电话号码,辅助确认短信的归属。
存储短信在跨平台 / 回退传输时的路由标识


例如截图中的值表明这些是华为通过 smalto 路由(是一种全球短信路由服务,负责在不同运营商和平台之间转发短信。)发送的合法验证码短信,而非诈骗或垃圾信息。

存储联系人信息(如电话号码、邮箱地址、昵称等),每个联系人对应一条记录,用于关联会话与消息的发送 / 接收方。

是该联系人在handle表中的唯一本地标识,通过ROWID与message表关联,提取该联系人 / 服务号的所有短信,还原完整的通讯场景。message表的handle_id字段处已经介绍这里不多赘述。
联系人 / 服务号的唯一标识,可以是电话号码、邮箱、服务号名称等,通过id和service区分服务号、个人手机号、邮箱,快速识别每条短信的发送 / 接收方。
存储已删除的会话 / 消息,用于恢复已删除的通信记录。
iOS软删除机制:不会直接物理删除会话或消息,而是将标记为 “已删除” 的记录移动到这两个表中。
三、Bookmarks.db(Safari 书签数据库)
在数字取证中是核心的用户网络行为证据源

书签的创建 / 修改时间,可与其他证据的时间戳交叉验证
系统预设文件夹的标识区分 “用户主动添加” 和 “系统自带”,
0:非系统预设,非 0 值(如1/3):系统内置文件夹(如 “收藏夹”“阅读列表”)

数值(0/1/2)对应不同的父文件夹,可用于分析用户的信息整理习惯和网址关注方向

书签的显示名称,可自定义

比如第一行就是博彩相关网页非法赌博活动
网页的完整地址,可与title书签对比分析

用户刻意隐藏的书签,可能涉及敏感 / 关键信息
1:隐藏、0:公开

最后修改时间戳,可用于构建用户操作时间线

四、WCDB_Contact.sqlite库
微信联系人数据库,包含好友信息、分组;

存储与群聊相关的消息(如群公告、群成员加入 / 退出通知等),用于验证群聊的创建时间和成员变动等。
存储群聊中的置顶消息,记录每个群聊的置顶内容和时间。
存储好友的昵称、头像、备注、微信号、朋友圈状态等完整信息,也记录已删除的微信好友。
字段说明:
好友的原始账号ID(唯一标识)

wxid_xxxxxx:个人好友的 wxidgh_xxxxxx:公众号 / 服务号的 wxid
是一个二进制存储的字段,用来记录此账号与好友的社交关联深度数据

18 00 38 00 #表示默认的社交关联数据,社交互动极少,属于 “弱关联”,12 00 18 00 4A 00 38 00 62 00 52 00 0A 00 42 01 #(16进制转10进制)4A:代表有 74个共同好友,62:代表98个共同群聊,52代表有 82次朋友圈互动,42 01代表聊天频率为高频(42 01 → 高频,30 01 → 中频,18 00 → 低频)
好友备注,属于加密数据,得到好友姓名或侧面展示亲密度

12 00 3A 00 32 05 43 6C 61 72 61 OA 05 43 6C 61#12 00 3A 00为固有前缀,32代表字符 “2”,05表示后面有效内容长度为 5 字节
提取有效编码:43 6C 61 72 61,放入
https://www.rapidtables.com/convert/number/hex-to-ascii.html
中解码

结合前缀信息,完整备注为:2Clara
好友公开的资料,包含性别、地区、个性签名等

22 08 53 68 65 6E 65 7A 68 65 6E 12 02 43 4E 2A 00#22为固定标识,08表示后面有效内容长度为8字节,53 68 65 6E 65 7A 68 65 6E解码后为“深圳”,12 02 43 4E:12开头是国家标识,12后的字节是国家名长度,解码后为“中国”,2A代表女性(2B代表男性,00代表未公开)

若包含 1A 00 开头的子串,1A 是个性签名的标识,00表示是签名长度(如 0E 表示 14 字节),后面的字节为个性签名的 UTF-8 编码,
如 1A 0E 48 65 6C 6C 6F 20576F726C64EFBC81 → Hello World!

采用 “标识 + 值” 的二进制结构,存储对好友的本地自定义设置,包括免打扰、置顶、星标、朋友圈权限等,展示好友亲密度

08 XX:免打扰模式00关闭,01开启;38 XX:聊天置顶,00未置顶,01置顶;10 XX:星标好友,00未星标,01星标;28 XX:朋友圈权,00正常,01仅聊天,02不让他看我的朋友圈;20 XX:聊天背景,00默认,非 0 值自定义背景;
群聊关联标识:0:普通好友,非 0 值:群聊成员 / 群聊号;可还原群聊社交关系
好友的实名认证状态,识别已实名认证的好友,判断社交对象的真实性

0:未认证 / 状态未知8:仅身份证实名认证16:仅绑定手机号24:身份证实名认证 + 绑定手机号40:身份证实名认证 + 人脸验证56:身份证实名认证 + 绑定手机号 + 人脸验证

在诈骗、洗钱等案件中,中高等级认证用户(24/40/56)可能与资金流转、高频互动相关,可作为重点排查对象;而未认证或低等级认证用户(0/8/16)则可能是诈骗团伙用于临时作案的账号。

五、MM.sqlite库
微信核心数据库存储聊天记录、缓存信息;
记录群发消息联系人列表

被加入群发组的好友唯一标识,如 wxid_7zgo57j9m0j22
群发组 ID,整数(如1001):代表某一群发组的唯一标识,用于区分不同的群发任务
群发组名称,字符串(如「客户通知群」):用于标记群发组的用途

通过使用“UsrName”字段,可以直接获取已添加到群发消息组中的所有朋友的微信号。结合“Friend”表,可以还原这些朋友的真实身份,从而快速识别案件涉及的目标人群。若ConStrRes1包含敏感关键词(如 “刷单”“返利”),可直接佐证存在恶意传播或诈骗的意图。

存储所有核心聊天消息记录,包括文字、图片、语音等消息的内容、时间戳、发送状态等

聊天对象的 wxid,关联Friend表或群聊表,获取聊天对象的身份,定位案件中的关键联系人
通常为时间戳,精准还原消息发送时间,可用于构建案件时间线
通常为消息内容,存储文字消息的明文内容,或图片、 语音文件的路径、哈希值,可以作为案件关键证据
消息类型,
1:文字消息,3:图片消息,34:语音消息,43:视频消息,57:小程序消息,
用于快速筛选不同类型的消息,例如优先选取文字消息进行研判分析
主要用于恢复撤回的消息,
1:撤回消息,
例如:用msgInnerType=1关联RevokeMsgTable表,恢复被撤回的关键消息。
存储被撤回消息
被撤回消息的内容缓存,为二进制加密存储,二进制转 UTF-8解码获取原消息的文字、图片摘要或语音片段
时间戳,还原撤回信息的时间,验证事件发生的先后顺序
消息类型,
1:文字,3:图片,34:语音,
可优先恢复高价值的文字证据
撤回行为的主体,
0:对方撤回,1:用户自己撤回,
判断是否存在恶意销毁证据的行为
原消息发送者 wxid,可关联 Friend 表确认发送者身份及认证状态
关联 MessageBizTable 中的bizId字段可还原完整聊天上下文

综合交叉验证后可得出类似于下图的信息

用来存储聊天消息中与第三方应用 / 小程序相关的扩展数据

聊天对象的唯一标识(wxid)
固定为 57,这是微信对应用 / 小程序消息的统一编码
本地消息唯一 ID,
16:小程序分享消息,24:小游戏互动消息,100:支付类应用消息,
可以与MessageBizTable(主聊天记录表)、Friend 表(好友信息表)交叉验证,以获取应用消息对应的文本上下文,从而完整还原聊天场景,确保证据链的一致性。
这张表在涉及小程序诈骗、非法营销、恶意传播等案件中具有关键价值,例如,若案件涉及某诈骗小程序的传播,通则可使用此表来确定用户与嫌疑人之间的分享时间,从而验证传播链。

存储群聊的历史事件,如群的创建、解散、成员的加入或退出以及群名称的更改,在涉及群聊诈骗、传销等案件中提供关键线索
存储已取消的语音通话记录,包括通话发起时间、取消时间、对方 wxid 等,还原用户的语音通话行为,在涉及骚扰电话、通话诈骗等案件中提供时间线索

每个语音通话(单聊 / 群聊)都有唯一的房间 ID,通过该字段可关联 MessageBizTable 等表,还原该通话对应的聊天上下文,补充证据链
六、CallHistory.storedata.db库
苹果 iOS 设备中存储通话记录、FaceTime 通话和短信记录的核心 SQLite 数据库
多方通话参与者关联表,在涉及团伙诈骗、群聊骚扰、多方恶意沟通等案件中具有关键价值

多方通话的唯一标识,关联ZCALLRECORD表,查看多方通话的主记录,通过该字段可找到对应的通话时间、方向等核心信息
参与者联系方式的唯一标识,关联ZHANDLE表,查看参与者的手机号 / 邮箱等联系方式
核心通话记录表,存储所有通话的原始记录,是统计通话次数、还原时间线的关键表

通话发起方标识,
1:本地发起,0:对方发起,
被叫方的手机号 / 标识(如 63791704,对应 Clara 的香港手机号)
被叫方的通讯录姓名,验证被叫方身份
通话开始时间戳(苹果基准:2001-01-01,微秒级,如 74653295070264)
通话时长(秒级,如 0.0),可用于排除无效通话
通话发生的地区
运营商信息(如 com.apple.Telephony)
联系方式表存储所有联系方式手机号、邮箱等

联系方式类型,
1:手机号,2:邮箱,3:FaceTime ID,
标准化联系方式包含地区代码(如 +85263791704)
联系方式不包含地区代码
七、Photos.sqlite库
为iOS 设备照片核心数据库,用于存储照片的元数据、关联关系、同步信息等
存储照片 / 视频的信息如:文件名、存储路径、拍摄时间等
记录照片在设备文件系统中的存储目录(DCIM/100APPLE是 iPhone 默认相册目录)

记录照片的文件名,可直接检索

记录照片的创建 / 拍摄时间

照片被添加到当前设备的时间,适用于分析导入 / 同步的照片

照片的最后修改时间

记录照片拍摄的 GPS 经纬度

是照片核心信息(ZASSET 表)的扩展属性存储表
相机型号(此处为iPhone XR)

照片拍摄时手机的时区,辅助判断活动范围。

后置摄像头参数


做题目

做完每一道题目,我们可以把涉及到的数据库遍历一遍,也许会有其他题目的答案,节约做题目时间,在实战中亦如此。
答案:纬度 22.4517216666666,经度 114.17185333333333
步骤:

在 message_2.sqlite 中研判信息流,filekey="wxid_t7zgo57j9m0j22_314_1725012210":推断图片记录的名称为314,在检材中打开查看确认下

[CDATA[F58B98FE-8010-44B7-8BF7-F23AF15DCFCA/L0/001]]:其中附件 GUID 为 F58B98FE-8010-44B7-8BF7-F23AF15DCFCA,通过 GUID 在苹果照片数据库 Photos.sqlite 中找到对应照片

通过ZUUID表(核心表)匹配 GUID,ZLATITUDE/ZLONGITUDE字段提取经纬值
答案:88
步骤:

苹果通讯录数据库 AddressBook.sqlitedb 中的 ABPersonFullTextSearch_content 表,是用于快速检索联系人的索引表,Clara 的手机号 85263791704(852 为香港区号)
由审检材第五项CallHistory.storedata.db解析得知可利用查询命令:
SELECT *FROM ZCALLRECORDWHERE ZDATE > 746690400AND ZADDRESS = '63791704'AND ZORIGINATED = 1;

2024 年 8 月 30 日下午 2 点转换成北京时间(UTF+8)为746690400
得出答案为88次
答案:到酒店和丈夫David庆祝结婚周年
步骤:
message_2.sqlite 中通过信息流可以推断出

答案:8.0.50
步骤:
正常来说微信版本应该存储在Application/<微信UUID>/WeChat.app/Info.plist中,但检材没有提供,
com.apple.commcenter.plist苹果的通信中心配置文件,存储短信、FaceTime 及设备 IMEI 等通信相关的底层设置。
group.com.tencent.xin.plist微信的共享配置文件,用于定义微信主程序与扩展(如键盘、小程序)之间的数据共享规则和权限。
Manifest.plist是镜像导出时生成的清单文件,记录镜像的导出时间、设备信息、文件列表等元数据,里面可能会存储。

搜索WeChat,
/var/containers/Bundle/Application/15395148-DAB3-4DC5-B394-56F2EB623CE/WeChat.app是微信主程序在 iOS 系统中的标准安装路径,前面的估计是微信版本号的一种 URL 编码显示,得出微信版本为8.0.50。当然.plist文件也可以用plist Editor Pro工具进行查看

A. iOS 版本为 17.6.1
B. IMEI 为 356414106484705
C. Apple ID 为 Emma1761@gmail.com
D. 手机曾经安装 Metamask 应用程序
答案:B、D
步骤:
A:错
ProductVersion(系统版本):17.5.1ProductType(设备型号):iPhone11,8
B:对
由题4可知IMEI在com.apple.commcenter.plist中,直接搜索

C:错
Apple ID 一般存储在Accounts3.sqlite表中,ZUSERNAME字段存储 Apple ID 的邮箱地址

D:对

手机曾经安装 Metamask 应用程序
答案:emmaemma.851231@gmail.com
步骤:见上题C步骤
答案:8985200000826445829
步骤:
ICCID存储在com.apple.commcenter.plist中,直接搜索

答案:8D13F23C-E73C-6A98-AA4F-16C8D7A5F826
步骤:
到蓝牙数据库中查找

答案:赛马信息 - 香港赛马会
步骤:
有网络的话直接搜网站网址可得到
查SafariTabs.db数据库也可以

A. 投资孖展
B. 虚拟货币失利
C. 网上赌博
D. 以上皆是
答案:D
步骤:
在message_2.sqlite表中

答案:港币$786,980
步骤:
由审检材sms.db数据库Message表text字段可知

答案:7
步骤:
根据聊天记录上下文结合图片判定

答案:IntellaX.io
步骤:
根据第九题可知查SafariTabs.db数据库

https://intellax.io/平台里面的游戏生态、钱包服务、DEX 交易、NFT 市场、launchpad均涉及涉及虚拟货币
答案:3
步骤:
根据上一题直接看SafariTabs.db数据库发现一条

由审检材Bookmarks.db数据库bookmarks表可知苹果url也会记录在书签中,发现两条

A. stock, avocado, grab, clay
B. light, sadness, segment, ancient
C. toe, talk, elder, oil
D. 以上皆是
答案:D
步骤:
由题1遍历message_2.sqlite数据库可快速定位不当使用他人加密钱包相关的痕迹,结合图片数据很快就能找到

答案:IDFC
步骤:
和上题思路一样

答案:5022915.66
步骤:
上题截图中
答案:欠债
步骤:
由上面几题可知聊天记录中一直聊的是欠债
A. 储存在不同的.db檔案里
B. 有不同哈希值
C. IMG_0008.HEIC为原图,"5005.JPG"为并非原图
D. IMG_0008.HEIC和名字"5005.JPG"是同一张相片
答案:ABC
步骤:
根据题意,在数码法理鉴证分析下C和D是互斥的可以排除一个,如果C对那么B也对,同理D对那么B错;一般情况下.HEIC是 iPhone XR 默认的图像格式,.JPG可能是通过软件发送时自动转换的格式,或者手动导出HEIC 为 JPG,一般不存在同一个.db文件内
由审题第七项可知图片存储在苹果照片数据库 Photos.sqlite 中,根据题1的思路用GUID反过来找聊天记录中的图片,

遍历一遍数据库可以发现Photos.sqlite内并没有存"5005.JPG" ,所以A正确
利用filekey="wxid_t7zgo57j9m0j22_82_1722864881" 定位图片库中的图片

答案:iPhone XR back camera 4.25mm f/1.8
步骤:
由审题第七项Photos.sqlite数据库ZEXTENDEDATTRIBUTES表ZLENSMODEL字段处有记载

答案:此相片由iPhone XR拍摄、此相片的拍摄时间为2024-08-05 13:38:15(UTC+8)
步骤:
由审题第七项Photos.sqlite数据库可知ZASSET表中可以查询到

Unix时间戳 = iOS时间戳 + 978307200= 744529095.672 + 978307200= 1722836295.672

然后用拍摄时间关联ZEXTENDEDATTRIBUTES 表

得出此相片由iPhone XR拍摄
A. IMG_0002.HEIC
B. IMG_0005.HEIC
C. IMG_0004.HEIC
D. IMG_0006.HEIC
答案:AC
步骤:
由以上信息可知iPhone 中的实况照片扩展名为 .HEIC,直接查看Photos.sqlite数据库中ZASSET表ZFILENAME字段

答案:8
步骤:
由20题截图可知Photos.sqlite数据库ZEXTENDEDATTRIBUTES表ZLENSMODEL字段处有记载8条
答案:相片
步骤:
由第15题可知
此文如有错误欢迎沟通指正。为确保个人隐私与数据安全,使用相关工具和方法时须严格遵守法律法规及道德准则,同时亦欢迎其他相关问题和策略的探讨。
实用 APK 分析模板:溯源链路与研判分析汇总
2026-01-11

Wireshark工具使用:权限分析与恶意文件追踪
2025-12-30

流量溯源基础知识分享:Wireshark 抓包分析技术
2025-12-25

Windows 系统密码应急绕过技术(U 盘 + 虚拟机)实操
2025-11-24

APK / IPA 安装包获取及静态分析实战
2025-11-17
