【Android论文栏目提醒】:网学会员鉴于大家对Android论文十分关注,论文会员在此为大家搜集整理了“基于SQLite3的Android手机数据恢复技术的研究 - 产品手册”一文,供大家参考学习
基于SQLite3的Android手机 数据恢复技术的研究 王随刚 吴莎莎 李昂 北京锐安科技有限公司 摘 要:针对传统方法采用直接调用API不能恢复Android手机数据的问题,本文通过分析手机SQLite3数据库的物理存储 结构,确定删除数据位置,并结合Android手机系统特征,详细阐述了Android手机文本信息数据恢复的过程。
关键词:数据恢复 SQLite3 Android 手机取证分析的研究提供相应的参考。
一、概述 随着科技的发展,手机厂商不断推出新型手机,智能 二、SQLite数据库 手机已日渐成为主流。
传统的Android手机取证技术,主 SQLite3 是由 D.Richard Hipp 开发的轻量级嵌入式数 要通过调用Android厂商提供的API接口,完成数据的提 据库, 支持SQL语句,是世界上应用最广泛的嵌入式数据 取,但这种方式无法提取已经删除的数据。
对于涉及手机 库之一。
其具有的占用资源低、易移植、易操作等特点, 取证的案件中,嫌疑人往往会将与案件相关的重要信息删 使之成为手机这种内存受限设备的数据库选择之一, 除,而这些数据却是跟踪案情进展的关键推动点。
因此, iPhone和Android手机即采用此数据库作为数据的存储方 手机取证不仅要能获取手机中可见数据,还要获取手机中 式。
Android系统在运行时,集成加载了SQLite3,因此手 已经删除的数据,这是司法人员关心取证的又一重要关键 机中每个应用程序都可以使用SQLite3数据库。
点。
(一)SQLite3物理结构 手机种类繁多,各种手机数据存储方式各有差异,诸 数据库文件物理层由固定大小的“页(page)”组成, 如 iPhone、 Android智能手机平台多存储在数据库中。
所有的数据都存储在页中,每个page页有其相应的文件结 MTK、展讯等封闭式平台数据多存储在底层芯片flash文件 构 。
页 的 类 型 可 以 是 Btree页 、 空 闲 (free)页 或 溢 出 中。
因此,不同手机平台数据提取和恢复机理也各不相 (overflow)页。
一个SQLite3数据库文件由多个多重Btree构 同。
本文主要以基于SQLite3数据库的Android手机平台为 成,其中,索引采用B-tree,而表数据采用B+tree。
每个 研究对象,介绍一种Android手机数据恢复的过程,为智能 Btree占用至少一个完整的页,每个页是Btree的一个结4 2012年 第5期 智能手机取证技术研究 三、数据恢复过程 根据SQLite3数据库中删除数据的存储原理,可通过 从数据库物理存储结构中找到删除的数据进行提取。
锐安 手机取证分析系统通过使用16进制编辑器查看Android手 机中对应的数据库文件,搜索数据库中各表的位置,从而 发现删除数据的存储区域。
具体数据恢复过程如图2所示。
点。
每个表的第1个页称为根页。
因此,对Btree页的文件结构分析是找到删除数据位置的重要的前提。
Btree页逻辑结构形式如图1所示。
在逻辑层,数据都存储在数据库的表结构中,而在物 理层,表是由Btree的树形结构构成,Btree树形结构又是 每一个逻辑结构的表,都对应Btree页组成的树形结 由页组成,因此最终数据是存放在各页中。
构,即每一个表由多个Btree页组成。
Btree中根页和内部 进行数据恢复,要解决两大核心问题。
页主要用于导航,其页的指针域都是指向下级页的指针, 第一:找到删除数据的页。
数据域仅仅包含关键字,而所有的数据记录都存储在叶子 第二:恢复底层流文件中删除的数据。
页中,包括删除的数据。
因此,要找到表中删除的数据, 恢复的过程如下:首先找到欲恢复的数据,对应在数需找到其根页,采用顺藤摸瓜的方式,确定“叶子页”, 据库中的表名;然后根据SQLite3数据库存储结构,分析遍历叶子页中特定的区域提取删除的数据。
物理层的数据流记录,获取SQLite3数据库各表的根页, (二)手机SQLite3删除数据存储原理 然后对相应的十六进制文件进行结构分析,提取各表存储 手机中未删除的数据,通过查看相应数据库文件可直 数据的结点;最后对目标叶子结点中特定区域存储的数据接看到,但删除的手机数据,却无法看到。
在SQLite3数据 进行恢复和提取,并于后台界面中展示出来。
详细过程可库物理结构中,当一个事务从数据库中删除了数据并提交 见下节。
后,若删除数据所在的页还存在其他数据,则删除数据的 四、数据恢复和提取过程部分只是变成一片自由区,其数据并未真正清除,且数据库文件大小保持不变;若将整个页中所有的数据删除,则 Android手机中,短信、通讯录、通话记录等文本信息该页将不存在,且数据库将变小。
因此,当物理结构中, 以数据库形式存储,而多媒体文件多是存放在SD卡中,与页中存在的数据不被全部删除时,删除的数据依然存在于 数据库存储并无直接关系。
因此,数据库存储机制的分析数据存储区,也是所有数据的一部分。
只针对短信、通话记录、通信录等文本信息的恢复。
Police Technology 2012年 第5期 5 (一)删除数据位置定位 Btree页内部以单元为单位来组织数据,一个单元包 1. 查找预提取数据对应的表名 含一个Btree记录,或可认为是一个页面。
由于Android操作系统是开源的,因此很容易获取各 一般前8到12个字节是Btree的页头,它有相应的结 数据库中的表名。
Android采用的SQLite3的数据库文件, 构,如表2。
以.db为后缀名,查找手机中应用程序数据库中各表的方 法有多种,但前提条件是手机已经取得root权限。
常用的 方法有: ( 1)在手机端,直接进入文件管理器,进入data/ data/应用程序/database,打开相应数据库文件。
( 2) 使 用 adb命 令 , 如 adb pull /data/data/com.
android.email/database,将相应数据库文件导入到计算 机中,再使用SQLite查看器,直接打开db文件,就可以 看到数据库的逻辑结构,常用的SQLite3查看器工具有 SQLite Database Browser。
由上可知,页头的第一个字节是区分内部页和叶子页 (3)从dos命令行查看手机的数据库文件。
首先命 的重要标志,当页头第一个字节为05,那就是树的内部 令 行 到 Android虚 拟 机 所 在 路 径 的 tools目 录 , 再 利 用 表页,当为13,表示是树的叶子页,因此,很容易通过 adb命 令 到 Android虚 拟 机 目 录 , 数 据 库 文 件 在 Btree页的第一个偏移量,判断B tree页的树形结构。
可通 data/data/包名/databases下,利用SQLite3 db命令打开 过第4个偏移量单元数,判断该页有多少条记录,若为内 数据库,最后,使用.schema命令查看数据库中的表。
部页,则单元数即表示子页的页数,若为叶子页,则单元 2. 查找表对应的树根页 数即该叶子页中包含的记录数,且单元指针数组中包含 应用程序数据库中存在多种表, 要从底层数据存储 2个字节,分别指向最左边单元地址和最右边单元地址。
结 构 中 找 到 各 个 表 对 应 的 起 始 位 置 , 即 要映 射 找 到 当从页头中,判断出有几个单元后,就可知道下一子页对 Btree页树形结构的根页,每个表的第一页即为根页。
所 应的起始位置,再判断该页是内部结点还是叶结点,依次 有表的根页编号都存储在系统表sqlite_master中,它是一 循环执行以上过程了,直到找到所有的叶结点,即存储数 个 系 统 表 , 保 存 了 数 据 库 的 schema信 息 。
在 创 建 据的最终位置。
sqlite_master表的结构时,就确定了根页的地址。
在前节 例如:用UltraEdit打开某一数据库文件,根据根页, 内容中,已经找到数据库中对应的各表的名称,因此,就 找到某页,其数据流文件如下: 可根据对应数据库创建时的存储模式,找到各表对应 Btree页的根页。
3. 查找树的所有结点页和叶子结点 0X05:该页为B+tree的内部页;0X0003: 本 页 有 Btree页的根页主要用于导航,找到下一结点,直到 3个单元,即该内部页有三个子结点;0X03EE:单元内容 找到所有叶子结点。
要找到所有结点,首先对Btree的内 区 的 起 始 位 置 , 12个 字 节 后 , 0X03FA、 0X03F4、 部页结构进行分析。
0X03EE分别指三个子结点对应的起始地址。
除去包含SQLite3数据库文件头的Btree页,即第一 其数据流文件为: 页,Btree页由以下四部分组成,如表1。
0X0D表明该页为B+tree的叶子页,0X0003表明有 3个 单 元 , 即 3 条 记 录 , 且 第 1条 记 录 的 入 口 地 址 为 0X0392,最后1条记录的入口地址为0X0090。
依此方法 查找,即可查找叶子页中所有记录对应的位置,即所有数 据的存储位置,包括删除的数据。
6 2012年 第5期 智能手机取证技术研究 (二)删除数据提取 对应有N个字段。
紧跟的N个可变长整数与记录的各字段 当确定一个表的所有叶子页后,就可以根据叶子页的 一一对应,表示各字段的数据类型和长度,即表中每个字记录找到存储在该表中的所有数据。
然后,就需要通过一 段的类型以及该字段的长度。
最后,DataN表示各字段对定的方法将删除的数据从叶子页中提取出来。
应 的 数 据 , 与 TypeN相 对 应 , 类 型 和 宽 度 由 根据Btree页的页面结构,所有的数据都存放在单元 Type1 ̄TypeN指定。
要提取freeblock块和未分配区的数内容区,如图3所示。
据,就必须确定该数据对应在表中的哪些字段中,从各字 段中提取数据。
例如:可根据Android手机中可见的数据,关联查找 freeblock块中的表的字段,即先确定freeblock块中表中 的某一个字段,再根据记录头分析这个字段的长度,以及 该字段前后的字段以及长度,然后提取出每个字段对应的 数据,再通过UTF8解码,解析为常见的手机数据,完成 数据的恢复。
经编码和解析后的数据,如图4所示。
根据SQLite3数据库存储原理,当删除某条数据后,内容存储区对应的数据并未丢失,而是变成一个freeblock块。
根据内容存储区位置,若被删除的内容前后都还有数据,可直接在内容存储区的freeblock块中分析提取,若删除是内容区域的第一条,可把删除的内容作为未 五、总结分配区的内容进行分析提取。
因此,删除的数据存储于内 本文主要针对基于SQLite3数据库的数据恢复过程容存储区的freeblock块和未分配区。
进行分析,掌握SQLite3数据库的物理存储结构和内部 以提取freeblock块中删除数据为例,如下: Btree页结构,找到底层存储的删除数据区域,通过分析 数据对应的记录结构,有效完成数据的恢复。
该方法不 该 叶 子 页 中 , 第 一 个 freeblock块 的 偏 移 量 为 仅适用于数据的恢复,同样也可以提取手机中未删除的0x0154, 因 此 , 第 一 个 freeblock块 的 起 始 地 址 是 数据,但由于其分析过程的复杂性,一般不采用此方法0x13d54,如下: 获取手机中未删除的数据。
本文虽然是以Android为研究 对象,但SQLite3数据库也应用于其它智能手机,因此, 此种方法也为其它基于SQLite3的手机数据恢复提供了参 蓝色框中即为要提取的删除的数据。
freeblock块共 考。
4各字节,前2个字节即是下一个freeblock的偏移量,第3 和 4 字 节 即 freeblock块 的 大 小 。
因 此 可 知 , 上 图 中freeblock块就是最后一个freeblock块。
从0x0002开始即为删除数据的存储区。
叶子页中,数据存放在payload记录中,payload格 参考文献式如表3。
表3 payload格式 每个payload由两部分组成:第一部分是记录头,第二部分是表中数据的长度、类型以及数据本身。
记录头由N+1个可变长整数组成,N为记录中的字段数,即该表中 Police Technology 2012年 第5期 7
上一篇:
Android系统介各版本比较
下一篇:
马原:环境保护与可持续发展论文(word)