iPhone短信删除数据恢复方法的研究

2015-05-15 10:10张开翔周安民
现代计算机 2015年1期
关键词:关键字字节短信

张开翔,周安民

(四川大学电子信息学院,成都 610064)

iPhone短信删除数据恢复方法的研究

张开翔,周安民

(四川大学电子信息学院,成都 610064)

SQLite是一款轻型的数据库引擎,资源耗损低、运行速度快、功能强大、支持Windows/Linux/UNIX等主流的操作系统,被广泛应用于通信录、通话记录、手机短信、QQ聊天记录等多种应用中。通过分析iOS系统SQLite数据库的文件格式和数据记录的寻址方式,提出一种iPhone手机删除短信的恢复方法。结果表明,这种恢复删除数据的方法可以用于恢复iPhone短信数据库中的文本数据。

SQLite;iOS系统;文件格式;数据恢复

0 引言

随着终端设备和移动通信技术的发展,智能手机逐渐成为人们生活与工作中的必备工具。它拥有独立的操作系统,市面上流行的操作系统主要有iOS、Android、Windows Phone等。而iPhone凭借其精美的工艺设计和稳定的系统性能成为最畅销的智能手机。

与此同时,手机犯罪也应运而生,手机取证成为打击该类犯罪的科学手段。在涉及手机取证的案件中,嫌疑人通常会将与案件有关的重要信息删除,而这些短信却是跟踪案件进展的关键推动点。鉴于新形势下的迫切需要,提取智能手机的电子数据正逐步成为电子取证领域新的研究方向和热点。本文结合实际情况,提出了基于SQLite内部机制解析的iPhone手机短信提取和恢复的方法。

1 SQLite数据库

SQLite是一款轻量级嵌入式的关系型数据库,特点是操作简单、性能可靠以及可移植性好,目前在iOS、Android等手机操作系统中被广泛使用。

1.1 物理结构

SQLite数据库文件由固定大小的“页”组成,默认大小为1024个字节(1KB)。页大小可以在数据库刚刚创建时设置,数据库对象一旦创建该值就无法更改。

页的类型主要有三种,分别是Btree页、空闲页和溢出页,Btree页又可以是B-tree页或B+tree页。每种Btree页又区分为内部页或叶子页。此外,所有的数据库文件中必然包含Btree页。

(1)页头

从逻辑上来说,一个SQLite数据库文件由多个多重Btree构成。每个Btree存储一个表的数据或索引,索引常用B-tree结构,而表数据采用B+tree结构。每个Btree占用至少一个完整的页,每个页是Btree的一个结点。每个表或索引的第1页称为根页,所有表或索引的根页编号都存储在系统表sqlite_master中,表sqlite_master的根页为Page 1。它位于文件中前100字节,所以也叫数据库文件头。数据库文件头结构如表1所示。

(2)Btree页

Btree页主要由页头、单元指针、未分配空间、单元内容区域、保留区域组成,页结构见表2所示。

对于内部页,Btree页头占12个字节。对于叶子页,Btree页头占8个字节。Btree页头的结构组成如表3所示。

表1 SQLite数据库文件头结构

表2 Btree页结构

表3 Btree页头结构

1.2 SQLite删除数据库恢复原理

手机中的数据通过数据库浏览器可直接查看,而已删除的手机数据却无法看到。如果已删除数据所在页面存在未被删除数据,删除数据区域只是变成了freeblock块而并未被真正删除,数据库文件大小也未变,就有可能对其进行恢复。所以对SQLite数据库文件结构进行分析是恢复已删除数据的前提。图1是Btree页树形结构,根页和内部页主要用于导航,其页的指针域都是指向叶子页的指针,而所有的数据记录都存储在叶子页中,包括删除的数据。

在逻辑层,数据都存储在数据库的表结构中。而在物理层,Btree树形结构又是由基本的页组成,因而数据最终存放在各页中。恢复的具体过程:

(1)确定被删除的数据所在表名。

(2)通过sqlite_master系统表查找该表的根页。

(3)按照Btree页的树形结构,遍历所有节点,找到内部页和叶子页。

(4)分析叶子页的页头结构,提取出叶子页中freeblock自由块的数据。

图1 Btree树形结构

2 数据恢复与提取过程

2.1 提取短信

数据恢复的首要步骤就是提取出iPhone手机中的短信,越狱系统中短信路径是/private/var/mobile/Library/SMS/sms.db,再根据SQLite的数据格式进行静态分析和数据恢复。目前,提取iPhone数据的方法主要有以下3种:iTools的高级备份、ssh-client远程登录、手机助手提取。iTools的超级备份操作简单,而且无需手机越狱,可以直接提取出sms.db文件,本文使用的就是这种方法。具体的导出过程如图2所示。

图2 iTools提取手机短信

2.2 数据恢复

(1)定位删除数据

①查找被删除数据的表名

要想恢复被删除的短信内容,首先需要确定被删除数据的表名。由于SQLite是开放型的数据库,通过数据库命令行工具或软件查阅器都能获取到sms.db中的表名和其基本信息。在DOS命令行下查看数据库文件使用.schema命令查看数据库中的表。另外,使用SQLite Database Browser也可以看到数据库的逻辑结构,具体情况如图3所示。无论是从命令规则还是表的内容都可以断定message表用以存放短信内容。

图3 sms.db文件表信息

②定位删除数据所在表的根页

SQLite数据库中每个表的第一页称为根页,所有表的根页编号都存储在系统表sqlite_master中,它保存了数据库的schema信息。具体做法是将提取的sms.db用二进制工具将其打开,分析文件头的数据信息,找到页的大小。然后根据系统表sqlite_master的rootpage字段中找到表的根页,根页的起始地址=页的大小*(根页-1)。另外,在SQLite命令行下键入“select rootpage from sqlite_master where name="message"”也可以得到表的根页,操作方法如图4所示。

图4 SQLite命令行下查看表根页

③遍历Btree页的所有内部页和叶子页

SQLite数据库中表数据通常采用B+tree结构,数据只存在于叶子页上,内部页只存储导航信息。B+tree所有的叶子页都在同一层上,并按关键字排序,所有的关键字必须唯一,其逻辑结构举例如图5所示。

图5 Btree逻辑结构图

B+tree中根页和内部页都是用来导航的,它们的指针域都是指向下级页的指针,数据域仅仅包含关键字。所有的数据库记录都存储在叶子页内。在叶节点一级,页和页内的单元都是按照关键字的顺序排列的,所以B+tree可以沿水平方向遍历。图6是内部页的逻辑结构。

图6 内部页逻辑结构

内部页包含N个关键值(Key(0)~Key(N-1))和N+1个子页指针(Ptr(0)~Ptr(N)),其值为子页的页号。其中,Ptr(N)存储在页头中偏移为8的地方。其他的每对子页指针和关键值(Ptr(i)和Key(i))组成1个单元,共N个单元。Ptr(i)所指向子树中关键字的最大值≤Key(i),Ptr(N)所指向子树中关键字的值都〉Key(N-1)。

将提取的sms.db用010EdiTor打开,图7所示为依据根页找到的内部B+tree页的16进制数据流。首字节0x5表示本页是B+tree内部页,偏移3字节后0x002c表示本页的单元数为44个,0xf1a表示单元内容区的起始地址。偏移12字节开始从0xffb~0xf1a为44个叶子页的指针数组的偏移。

图7 B+tree内部页头数据

以本页首个单元内容区为例,其偏移量为0xf1a,则实际地址为0x4f1a,具体的数据流信息如图8所示。每个单元内容区由两部分组成,4个字节的页号和1个字节的关键字。0x52是其叶子页的页号。关键字是0x68,说明叶子页中的关键字均小于0x68。

图8 B+tree内部页单元内容区

(2)提取和恢复数据

当确定好message表的所有叶子页后,表中全部的数据信息就存储在其中了,结合页头的控制字段就能定位到该页的自由块的数据,然后转换成UTF-8的编码方式就能提取和恢复出被事务台删除的短信。

根据B+tree的页面结构,页面中所有的数据都存储在单元内容区。从事务台删除的短信其实仍然存在于数据库文件中,只是它们已经被标记成自由块。只要该页存在未被删除的数据,自由块的偏移量就会填充到页头的相应字段中。因此,提取被删除的数据关键在于定位这些自由块的位置,然后结合单元内容区的格式提取出被删除数据。某叶子页的页头数据如图9所示。

图9 叶子页头部数据

在该页中,首个freeblock块的偏移量是0xd22,该数据库的页大小为0x1000字节,当前页的编号为0x4b,那么freeblock的实际地址=0x1000*0x4b+0xd22 =0x4bd22,查看该地址处数据如图10所示。

图10 自由块数据流

图中标蓝的部分就是要提取的删除的数据。单元的前2个字节指向下一个空闲块,此处值为0,表示该页中仅有当前自由块。后两个字节为0x02de,表示该自由块的大小,同时包含这两个字节本身。从0x0055开始起为被删除数据的存储区。

叶子页中,单元是可变的字符串,且每个单元包含一个payload,payload的具体格式如表4所示:

表4 payload的具体格式

每个payload主要分成两部分。第1部分是记录头,由N+1个可变长整数组成,N为记录中的字段数。第1个可变长整数(header-size)的值为记录头的字节数。跟着的N个可变长整数与记录的各字段一一对应,表示各字段的数据类型和宽度。header-size的值包括header-size本身的字节和Type1~TypeN的字节。Data1~DataN为各字段数据,与Type1~TypeN一一对应,类型和宽度由Type1~TypeN指定。

对删除数据的16进制数据流进行UTF-8解码,转换成文本汉字如图11所示。

图11 还原后的短信文本

3 实验方法对比

为验证本文恢复方法的有效性,将通过实验对比来进行论证。一种方式是暴力提取法,结合目前流行的苹果手机数据恢复软件和底层数据库或镜像文件,恢复出被手机终端删除的短信。另一种方法就是本文提出的逻辑提取法,在充分解析数据库的文件格式基础上,定位到删除数据对应区域再进行提取和恢复。实验中使用的手机是iPhone 4,操作系统版本为iOS 7.1.2,另外使用SQLite数据库浏览器、010EdiTor以及苹果手机数据恢复软件作为辅助,并且事先已通过手机终端删除了24条短信。

3.1 暴力恢复

暴力提取法是通过苹果手机数据恢复软件对短信文件进行分析,然后根据分析结果从短信文件暴力中搜索头三个关键字,找到后将该条短信内容全部提取出来。

(1)使用苹果手机数据恢复软件分析sms.db,重点查看被删除的短信。图12是分析结果,包含正常短信和删除短信的信息。其中删除短信项仅显示前三个关键字。

图12 苹果手机数据恢复软件分析sms.db结果

(2)使用notepad++打开sms.db,将编码格式设置成UTF-8,根据上步操作查找到的被删除短信的头三个关键字在短信文件中进行搜索,一旦匹配成功就提取出全部文本信息,搜索过程如图13所示。

图13 notepad++搜索关键字样例

图14 逻辑法恢复的删除短信结果

图14显示了用notepad++搜索关键字的样例结果,通过这种暴力搜索的方式找到了苹果手机数据恢复工具分析结果中被删除短信的全部文本信息。即说明该工具的数据恢复功能是可行的,最大程度恢复了17条被删除短信。

3.2 逻辑恢复

逻辑提取法是通过对数据库文件格式进行充分解析后,依据其树形结构并以SQLite数据库工具为辅,依次定位到短信数据页、被删除单元入口以及有效载荷所在的数据区域,然后对有效载荷的结构进行解析后提取被删除短信的基本信息。具体的提取方法如前,图14是被删除短信的恢复结果。

3.3 性能对比

从表5的数据可知,逻辑恢复比暴力恢复的性能更高。对于被删除的24条短信,实际恢复了17条,暴力法的恢复率是70.83%。而本文提出的逻辑法的恢复率则是20,对于被删除的24条短信,逻辑法的恢复率是83.33%。

表5 恢复性能的对比

总之,由恢复结果对比分析得出:本文提出的逻辑恢复法可以对短信数据库文件中现有的信息、删除的信息进行更为准确的获取,恢复率优于暴力提取法。

4 结语

综上所述,通过对SQLite数据库文件格式进行分析,能够恢复出iPhone手机被删除的短信。本文详细研究了Btree页逻辑结构、单元结构、payload结构,并结合iPhone手机短信为例恢复删除的文本记录。此方法同样适用于Andriod或其他系统上SQLite数据库文件的文本数据恢复,包括电话薄、通话记录、QQ聊天记录和微信聊天记录等,为其他基于SQLite的手机数据恢复工作提供了参考。

[1] 张婷,张辉极.智能手机安全问题及防护激素和分析[J].信息网络安全,2011,12

[2] 张明旺.基于手机的电子证据获取技术研究[J].电脑知识与技术,2012,13(8):3093~3095 [3]姚伟,沙晶.Andriod智能手机的取证[J].中国司法鉴定,2012(1):45~49

[4] 高峰.iPhone手机取证的应用研究[J].警察技术,2011,5

[5] 张志伟.MTK手机Flash芯片文件系统恢复研究[J].信息网络安全,2011,11

[6] 伍国良.数据存储及恢复的基本原理[J].今日科苑,2008(18):171~172

[7] 苏芊.iOS终端数字取证研究[D].上海:上海交通大学,2012

[8] 田亚成.智能手机取证研究[J].警察技术,2011(03):38-41

[9] Ivo Pooters,Pascal Arends,Steffen Mooorrees.Extracting SQLite records[Z],2011

[10] The SQLite Database File Format,2013.http://www.sqlite.org/[Z]

Research on the Data Recorvery Method of Deleted SMS for iPhone

ZHANG Kai-xiang,ZHOU An-min
(Department of Electronic Information,Sichuan University,Chengdu 610064)

As a fast,powerful and low resource consumption lightweight database engine,SQLite supports mainstream operating system such as Windows,Linux and UNIX.SQLite is widely used in variety of applications,such as contacts,call records,short message and QQ chat log.Provides an approach to recover deleted SMS by analyzing SQLite file format and addressing way of data records.The results show that the method of data recovery is capable for recovering data text for iPhone.

SQLite;iOS System;File Struct;Data Recovery

1007-1423(2015)01-0003-06

10.3969/j.issn.1007-1423.2015.01.001

张开翔(1990-),男,四川南充人,硕士研究生,研究方向为信息系统安全理论与技术

周安民(1963-),男,四川成都人,硕士生导师,研究方向为信息安全关键技术和核心产品工程

2014-12-16 修稿时期:2014-12-23

猜你喜欢
关键字字节短信
履职尽责求实效 真抓实干勇作为——十个关键字,盘点江苏统战的2021
No.8 字节跳动将推出独立出口电商APP
成功避开“关键字”
No.10 “字节跳动手机”要来了?
道歉短信
基于MSP430的四旋翼飞行器的S-BUS通信协议的设计与实现
代发短信
人类进入“泽它时代”
智能垃圾箱
“八一”节日短信之一