logo资料库

基于SQLite3的Android手机数据恢复技术的研究.pdf

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