Android手机的Sqlite数据恢复技术综述
2019-12-02王春兰康鹏程
王春兰 康鹏程
摘 要:各种智能设备的信息常用Sqlite数据库储存,这些信息可能会因为各种原因“丢失”。介绍了Sqlite数据库基本情况,总结了传统的可靠性高的Sqlite数据恢复方法并指出不足之处,然后对两种新型数据恢复方法——以Sqlite存储结构为基础的数据恢复技术和以Sqlite预写日志为基础的数据恢复技术进行了阐述。
关键词:Sqlite数据库;数据恢复;数据存储;日志
中图分类号:TP309.3文献标志码:A 文章编号:2095-2945(2019)32-0160-03
Abstract: Sqlite databases are commonly used to store information on various smart devices, which may be "lost" for various reasons. This paper introduces the basic situation of Sqlite database, summarizes the traditional high reliability Sqlite data recovery methods and points out the shortcomings. Then is describes two new data recovery methods, data recovery technology based on Sqlite storage structure and data recovery technology based on Sqlite prewrite log.
Keywords: Sqlite database; data recovery; data storage; log
1 概述
Android手机以其开放、适应性强的优势,已经占了市场八成份额[1]。用户与Android设备二十四小时“亲密无
间”,用户的大量信息留在手机中。这些数据在偶然或者人为因素下数据可能“丢失”,对大量用户而言,需要安全高效的数据恢复技术找回数据;在电子取证过程中,嫌疑人持有的智能设备中可能存储有相关证据,可能被嫌疑人“删除”,需要恢复数据,打击犯罪。Android系统广泛地使用Sqlite数据库,其特点是轻量、快速、运行流畅[2]。目前有一些安卓手机Sqlite数据库恢复方法,但面对不同品牌不同设备、甚至不同型时效果不尽如人意,恢复效率也不高。
2 Sqlite数据库
Android使用开源的、与操作系统无关的SQL数据库——SQLite。Sqlite数据库为了简化操作,将Sqlite数据库集成到设备的操作中,并且封装用于操作数据库的API,以便快速操作数据库[3,4]。因此,不同的用户数据将会被各自APP管理,数据被创建并保存在各自应用对应的Sqlite数据库目录下,这些被记载的信息,其实是安卓手机Sqlite数据恢复的来源。提取和恢复数据库信息,就是传统数据恢复技术的核心步骤。
2.1 Sqlite日志恢复技术
Sqlite日志恢复措施是基于该库的日志存放机制[5]。首先确保日志文件没有缺失,数据才能被恢复。在系统异常崩溃,或者突然断电时,日志文件会无法正常保存。这种方法以往主要用于计算机取证,在Android设备数据恢复技术中用得比较少,但在安卓手机信息恢复中也是一种可以尝试的方法。
2.2 Sqlite自由块恢复技术
Sqlite数据库自由块恢复措施,首先要发现索引中提供的各种数据,它们存在于Sqlite的内部页面;然后扫描并发现存在的数据页。接着提取存储在数据页面的空闲块数据信息,最后根据所要恢复的数据特征找到数据并进行Sqlite数据恢复[6]。这种方法有一定的局限,当数据库文件不够完整,或者内部页面索引数据不全时,都无法顺利定位和恢复数据。
可见Sqlite数据库的两种传统恢复措施都存在一些缺点,不足以应对Sqlite数据库恢复的需求。两个比较完备的恢复技术应运而生,新型恢复技术根据Sqlite数据库本身特点,根据存储结构和预写日志展开。
3 新型Sqlite数据库数据恢复技术
3.1 以Sqlite存储结构为基础的数据恢复技术
Sqlite数据库的后端由B-tree、Pager和OS Interface组成。B-tree的职责是负责排序,维护多个数据库页之间错综复杂的关系,将页面组织成树状结构,页面就是树的叶子。Pager负责传输,根据B-tree的请求从磁盘读取页面或者写入页面。
在Sqlite数据库操作时,不完全擦除原有数据,安卓手机中删除的数据库文件也可以存储在某些文件中[7]。因此,对于Sqlite存储的结构复原措施,顺序扫描文件可能存在的空间,然后挖掘和获取数据。首先得到数据分区的镜像,接着定位有效的数据页,然后写入恢复后的数据库数据,这一步依赖于数据页记录;最后,重复的记录被丢弃,得到最终的信息。
安卓设备信息存储于逻辑分区的数据区域,这是公共存储路径[8]。得到数据分区镜像是数据恢复的前提,可以把该分区复制到内存卡,或者直接复制到目标地址。每个app都有一个特殊的数据库目录,本步骤最终要获取的是Sqlite数据库[9]。一旦数据被覆盖丢失,原来记录存储单元单位有3个不同的情形。第一种是记录在该单元是完整的;第二种是记录在该单元完整且有多个;第三种是记录在该单位不完整。能恢复的只有第一种和第二种情况,最后一种没有有效通过软件的方法去恢复,可以尝试物理方法解决。在Sqlite数据库,数据页面的大小空间通常为1024B或4096B,設备的最小存储单元必然大于4096B;对应于文件系统,也因为数据页面使用逐页存储机制,在安卓手机中存储所谓的“丢失的文件”,数据页信息是不会丢失的,这对信息的恢复很有帮助。
对于该恢复方法,最重要的三个部分分别是:找到B-tree页面,发现记录位置,然后恢复记录。例如,在 B-tree页的定位中,B-tree页面定位算法的使命是在得到的映像中发现数据和内部页面,便以提取页面中的信息。
3.2 以Sqlite预写日志为基础的数据恢复技术
SQLite在3.7.0版本引入了WAL(Write-Ahead-Logging),WAL的全称是Write Ahead Logging,它是很多数据库中用于实现原子事务的一种机制。采用WAL机制后,对数据库的修改并不直接写入到数据库文件中,而是写入到另外一个称为WAL的文件中;如果事务失败,WAL中的记录会被忽略,撤销修改;如果事务成功,它将在随后的某个时间被写回到数据库文件中,提交修改。读操作时,SQLite将在WAL文件中搜索,找到最后一个写入点,记住它,并忽略在此之后的写入点(这保证了读写和读读可以并行执行);随后,它确定所要读的数据所在页是否在WAL文件中,如果在,则读WAL文件中的数据,如果不在,则直接读数据库文件中的数据。写操作时,SQLite将之写入到WAL文件中即可,但是必须保证独占写入,因此写写之间不能并行执行。
这种数据恢复方法同样需要获取手机的镜像。Android手机在执行Sqlite数据更新操作时,会提前将相关信息写入日志文件。在进行数据恢复时,首先扫描镜像,找到要恢复的数据库的日志文件,根据日志文件扫描数据库的数据帧块,最后将找到的数据块按照对应顺序合理连接,实现数据库的恢复目的[10]。每一次操作的具体步骤是相似的,原理都是基于Sqlite的存储结构,开始获取数据分区的数据;接着定位有效的且连接在一起的有效帧块;其次,根据具体情况写入恢复数据库中的数据页记录;最后,判断是否已经存在同样的记录,如果有重复的记录则丢弃,扫描完所有的数据块后得到最终的完整信息。
该方法中,最重要的有四个步骤:框架信息的定位和连接,记录信息的提取和恢复。具体步骤如图1所示。
对于该数据库预写日志的措施,有必要在做好数据恢复前,了解数据的碎片化现象。但是记录数据在碎片化之后,如果要恢复数据,其恢复过程需要过多的时间。如果直接连接所获得的数据帧块,则可以确保记录数据不会有丢失,并且能够提高还原后的效果。必须确定随机数和连接帧块,才能成功连接数据帧块。比如:根据幻数扫描映像,然后找到日志文件。然后,搜索帧并提取记录就要根据随机数的大小,确定其是否包含于目标数据文件。再依照随机数来继续搜索,拿到所有数据块;最后一步,逐一单独计算得到数据块连接空间的具体值,以值进行帧块的连接。
在预写日志中根据给定目标恢复记录,然后为下一个数据帧块获取和连接工作确定随机数,就要用到确定随机数算法。预写日志的定位又要用到幻数,加以确认,得到临时随机数值;接着,根据临时随机数的值定位预写文件日志记录,并确定所有目标帧块;最后,提取帧块中的第一个所需目标记录,当然,这不会完全正确提取,则需要判断确定恢复的记录,然后确定该随机数。至于数据帧块拼接算法,它主要通过确定的随机数,再定位帧块,最终完成目标帧块拼接。帧块由随机数定位,初始偏移量会根据公式计算,得到的提取帧块的数据,在下一次记录恢复可以用到,依次執行取得所有目标帧块。在计算过程中,需要用到随机数定位的帧块的偏移大小和BLOCK_SIZE表示文件系统的分配大小。
4 结论
与传统的数据恢复技术相比,新型恢复方法的亮点在于充分利用数据结构和存储日志,以达到Sqlite数据库恢复的目标。新型的数据恢复算法对Android手机的Sqlite数据库数据信息恢复技术具有指导意义,可以大概率成功完成数据丢失后的恢复工作。
参考文献:
[1]毕攀.基于红黑树的嵌入式数据库Sqlite索引机制的优化方案的研究[D].太原科技大学,2012.
[2]李蔚.基于闪存数据库系统的存储管理技术研究[D].华中科技大学,2009.
[3]杨有波.基于μC/OS-Ⅲ操作系统的Sqlite数据库的移植与分析[D].河北工业大学,2014.
[4]刘婕.基于Android系统的移动终端通讯录的研究与设计[D].西安电子科技大学,2013.
[5]课家教育.详细谈谈Android系统中的Sqlite数据库的应用[EB/OL].北京.[2016-04-08].http://www.kokojia.com/article/17544.html.
[6]董婷婷.基于Android系统的手机隐私数据的加密研究[D].安徽理工大学,2017.
[7]DragonWar.Sqlite预写式日志[EB/OL].北京.[2014-12-03].https://blog.csdn.net/weixin_33748818/article/details/85676411.
[8]李蔚.基于闪存数据库系统的存储管理技术研究[D].华中科技大学,2009.
[9]王付华,王永杰.iPhone平台Sqlite数据库开发[J].电脑编程技巧与维护,2014(13):25-28.
[10]陈浩.Android手机的Sqlite数据恢复技术研究[D].杭州电子科技大学,2016.