Android系统隐私数据恢复实现方法

文档序号:6549448阅读:188来源:国知局
Android系统隐私数据恢复实现方法
【专利摘要】一种移动通信【技术领域】的Android系统隐私数据恢复实现方法,通过对无法获得文件系统信息的磁盘镜像进行数据块划分,然后依次从数据块中提取出结构特征和语义特征,并进一步筛选出SQLite3文件头数据块和SQLite3页数据块,经分割重组恢复出原始文件。本发明在ext4文件系统journal等文件系统相关信息受损的情况下,通过对隐私数据特征的分析,从非结构化的Android磁盘原始数据中进行数据恢复。
【专利说明】Android系统隐私数据恢复实现方法
【技术领域】
[0001]本发明涉及的是一种移动通信设备领域的方法,具体是一种Android系统隐私数据恢复实现方法,在Android系统上不借助文件系统信息进行隐私数据恢复。
【背景技术】
[0002]Ext4是一种针对ext3系统的扩展日志式文件系统,是专门为Linux开发的原始的扩展文件系统(ext或extfs)的第四版。现广泛的被以Android为代表的移动操作系统所米用。
[0003]以Android为代表的移动操作系统中存储了大量和用户有关的隐私数据,包括短信、联系人、电子邮件等。当搭载了这些操作系统的移动智能终端发生损坏时,如何保护这些数据不丢失则是一个非常重要的问题。
[0004]目前常见的Ext4系统的数据恢复技术均是依赖于Ext4文件系统的journal特性,当该特性被关闭或者磁盘内有关journal的数据被破坏的情况下,传统的数据恢复技术就失效了。
[0005]针对这样的问题,我们提出一种不依赖于文件系统信息、专门针对Android系统内部隐私数据的数据恢复技术。
[0006]经过对现有技术的检索发现,中国专利文献号CN103064764A公开(公告)日2013.04.24,公开了一种快速恢复安卓手机删除信息的取证方法,它首先提取出手机中的用户数据文件的可直接查看信息,然后根据该可直接查看信息获取数据库表结构的存储特征,并进一步分离出数据库中的未使用空间;再在未使用空间中尝试匹配正常记录的特征,并对匹配到的数据进行验证,获取已经删除的记录,然后结合该记录的字段长度定义,将其后的数据进行分割,以还原其各主要字段的内容,最后将还原出来的数据与正常记录进行对比,通过逻辑判断后添加到记录列表中;继续匹配未使用空间中,直到所有的未使用空间都处理完毕。但该技术要求被恢复的手机系统能够正常运行,并且事先进行了 root操作,这在很多新版的Android手机上难以实现。同时该现有技术仅能够恢复SQLite数据库内部的数据记录,无法完整恢复数据库文件和数据库内部的表、索引等重要的数据结构。此外,该现有技术对删除数据的恢复依赖于对Android设备中现有数据的学习,无法恢复未知格式的数据库记录。

【发明内容】

[0007]本发明针对现有技术存在的上述不足,提出一种Android系统隐私数据恢复实现方法,在ext4文件系统journal等文件系统相关信息受损的情况下,通过对隐私数据特征的分析,从非结构化的Android磁盘原始数据中进行数据恢复。
[0008]Android系统中的隐私数据,包括但不限于短信、联系人、电子邮件、系统设置、日历以及密钥链,均是以SQLite3数据库文件的形式存放在ext4文件系统中,SQLite3数据库文件是一种典型的结构化文件,文件内部不同部分之间相互关联,具有明显的可提取结构特征。同时Android系统中SQLite3数据库文件存放的是具有明显语义信息的隐私数据,所以从语义分析的角度也能够提取可以利用的特征。
[0009]本发明是通过以下技术方案实现的,本发明通过对无法获得文件系统信息的磁盘镜像进行数据块划分,然后依次从数据块中提取出结构特征和语义特征,并进一步筛选出SQLite3文件头数据块和SQLite3页数据块,经分割重组恢复出原始文件。
[0010]本发明具体包括以下步骤:
[0011]I)在无法获得文件系统信息的情况下,磁盘镜像很可能是受损的,首先要做的是通过对原始数据的分析,对原始数据进行数据块的划分,具体步骤包括:
[0012]1.1)在原始数据寻找常见的文件格式头,如APK包头、PDF文件头、SQLite3文件头等比较明显的文件头。
[0013]1.2)定位较多的文件头之后,以这些文件头为基准对原始数据进行对齐,以文件头的起始偏移作为一个数据块的起点。
[0014]1.3)以4KB大小对整个原始数据进行划分,不足4KB的部分作为无法利用的数据块并抛弃。
[0015]2)根据需要恢复的隐私数据文件,从数据块中提取出用于恢复隐私数据文件的结构特征、语义特征,具体步骤包括:
[0016]2.1)根据SQLite3数据库文件的固定格式,利用内建结构特征库,提取出上下文无关的页结构特征,然后利用内建结构库,提取出上下文相关的SQLite3文件结构特征;
[0017]所述的页结构特征包括但不限于:SQLite3文件头格式或SQLite3页内部链表结构等。
[0018]所述的SQLite3文件结构特征包括但不限于:SQLite3页树状结构或SQLite3指针页等。
[0019]2.2)根据要具体恢复的隐私数据类型,利用内建结构特征库,提取出上下文无关的数据记录结构特征。
[0020]所述的数据记录结构特征包括但不限于:短信数据库的数据结构、联系人数据库的数据结构、邮件数据库的数据结构、密钥链数据库的数据结构、日历数据库的数据结构和系统设置数据库的数据结构等,其中如短信数据库的数据结构包括:序号、线程序号、地址、接收人、日期、发送日期、网络规则、已读标记、状态标记、类型、短信正文,即[_id,thread,id (int), address (int), person (int or null), date (int), date (int_sent), protocol (0),read (1rO), state ( -1), type (I), body (string), service_center (string)],当有符合该数据结构格式的数据,则判定为一条短信数据库的数据记录。
[0021]所述的内建结构特征库的建立依赖于前期的人工分析,通过分析一定数量的Android设备内部不同数据库的数据结构(如上文所述的短信数据库的数据结构),形成对不同数据库内部数据记录的不同数据记录结构特征。
[0022]3)通过上下文无关的结构特征和语义特征,从原始数据块中依次筛选出SQLite3文件头数据块或SQLite3页数据块,具体步骤包括:
[0023]3.1)比对待检测的数据块是否符合SQLite3文件头的结构,即比对固定偏移处是否为SQLite3文件头的固定字符,如0x00处为字符串“SQLiteformate3”、0xl0 -0x11处的值为0xl000、0xl5 - 0x17处的值为0x402020,通过结构判断的数据块被定义为SQLite3文件头数据块。
[0024]3.2)当未通过步骤3.1检测的数据块进行下一步检测,判断待检测数据块是否符合SQLite3页的结构,即:数据块的头部有标识SQLite3页的固定值0x02、0x05、0x0a或OxOd,之后为页内部所有数据记录的偏移和大小,通过遍历数据快以判断其是否为SQLite3的页的结构,当在遍历过程中全部匹配时,判断该数据块为一个SQLite3页数据块。
[0025]3.3)未通过步骤3.2的数据块则被认为是无用的数据块并抛弃。
[0026]4)对步骤3筛选出的数据块进行分割和重组,恢复出原文件,具体步骤包括:
[0027]4.1)首先根据在原始磁盘镜像中偏移,将筛选出的SQLite3文件头数据块和SQLite页数据块归并为若干个连续的数据块组,归并原则是在原始磁盘镜像中地址相邻的数据块属于同一个数据块组,数据块组内部的数据块的顺序和数据块在原始磁盘镜像中的顺序保持一致。
[0028]4.2)对数据块组进行第一次筛选,选出以SQLite3头数据块起始的数据块组,每一个这样的数据块组对应了原磁盘镜像中的一个SQLite3数据库文件,对每一个这样的数据块组进行完整性判断,完整性判断包括文件大小和文件逻辑结构完整性,当一个数据块组能够同时满足文件大小和文件逻辑结构的完整,则表示该数据块组是一个完整的SQLite3数据库文件,将该文件作为恢复结果保存,否则执行步骤4.3。
[0029]4.3)对没有能通过大小和逻辑结构完整性检测的以SQLite3头数据块为起始的数据块组进行重组,即根据SQLite3数据库文件的树状结构,对数据块组进行遍历,当遍历到的数据块有缺失时,从其它不以SQLite3数据块为起始的数据块组中挑选页内结构最相似的数据块组进行连接,连接后若能通过大小和逻辑结构完整性测试,则成功恢复出一个完整的SQLite3数据库文件,将该文件作为恢复结果保存,若连接后未能通过大小和逻辑结构完整性测试,则更换连接的数据块组再次测试,重复这个过程直到成功或者已经没有数据块组可以替换,当没有数据块组可以替换时,表示该数据库文件的恢复失败。
[0030]所述的文件大小和文件逻辑结构完整性,包括:文件大小的完整和文件逻辑结构的完整,具体为:在SQLite3文件头中特定偏移处的值描述了整个SQLite3文件的大小,若恢复出的文件大小和对应文件头内描述的文件大小相一致,则表明恢复出的文件大小完整;SQLite3文件内部为树状结构,通过使用开源的SQLite3接口可以使用SQLite3自带的完整性校验功能,该完整性校验功能会从逻辑上判断SQLite3内部结构是否完整,若恢复出的文件能够通过该完整性校验,则认为恢复出的文件在逻辑结构上完整。
[0031]针对已擦除的数据碎片,即恢复失败的数据库文件和没有被使用的数据块组可进一步选择进行数据抢救,具体为:对于每一个没有恢复成功的数据库文件和没有被使用的数据块组,通过遍历页内部链表的方式,将其中所有数据块中的数据记录提取出来,根据数据记录结构的不同,将这些数据库记录进行分类保存,方便进行人工浏览。
技术效果
[0032]与现有技术相比,本发明是首个不依赖文件系统信息的Android系统隐私数据恢复技术,克服了传统Ext4文件系统数据恢复技术过分依赖journal特性的弱点,能够对受损的磁盘进行最大程度的数据恢复,在恢复出所有能够被完整恢复的数据库文件的同时,还能够抢救出已经遭到破坏的数据库文件内的数据记录。【专利附图】

【附图说明】
[0033]图1为本发明示意图。
【具体实施方式】
[0034]下面对本发明的实施例作详细说明,本实施例在以本发明技术方案为前提下进行实施,给出了详细的实施方式和具体的操作过程,但本发明的保护范围不限于下述的实施例。
实施例1
[0035]Android平台从2.3开始使用Ext4作为默认的文件系统。对一个Android平台的磁盘镜像,本实施例通过以下步骤实现数据恢复:
[0036]I)从设备中提取磁盘镜像,根据设备的受损情况选择使用逻辑或物理的镜像提取方法。如果设备能够正常开机,则使用逻辑镜像提取方法,使用shell命令或者Android应用程序将对应分区的磁盘镜像提取到电脑或手机SD卡上。如果设备已经不能正常开机,则使用物理的方法拆开设备,将磁盘取出,使用物理读取的方法直接读取磁盘内容。
[0037]2)假定在最坏的情况下,当设备已经无法正常开机,同时物理提取出的磁盘内容有缺失,尤其是和文件系统相关的信息(如journal日志信息)已经丢失的情况下,通过对原始数据内部一些常见数据结构,如SQLite3数据库文件、Apk包、图片等进行分析,确定磁盘分块对齐方式,以4KB为大小将磁盘分割成若个数据块。
[0038]3)确定欲恢复的数据文件类型,本方法仅适用于Android内部的隐私数据文件,包括但不限于短信、联系人、电子邮件、系统设置、日历、密钥链。针对要恢复的数据,从内建的语义特征库读取对应的结构特征,如短信数据库的数据记录结构特征为[_id, thread_id (int), address (int), preson (int or null), date (int), date (int_sent), protocol (0),read (1rO), state ( -1), type (I), body (string), service_center (string)],读取对应的语义特征,如sqlite_master表的内容、特殊的建表语句和特殊的表名。同时加载通用的SQLite3数据库文件结构特征,比如SQLite3文件头格式,SQLite3页内部链表结构,SQLite3页树状结构,SQLite3指针页等。
[0039]4)根据数据类型的非上下文相关结构特征(如SQLite3文件头格式,SQLite3页内部链表结构,SQLite3页树状结构,SQLite3指针页等)和语义特征(如sqlite_master表,特殊建表语句,特殊表明等),对原始数据块进行筛选,筛选过程如下:
[0040]4.1)比对待检测的数据块是否符合SQLite3文件头的结构,首先比对固定偏移处是否为SQLite3文件头的固定字符,如0x00处为字符串“SQLiteformate3”、0xl0 -0x11处的值为0xl000、0xl5 -0x17处的值为0x402020。通过结构判断的数据块被定义为SQLite3头数据块。之后根据语义特征,判断sqlite_master表的内容,寻找特殊建表语句,判断是否为我们需要恢复的数据库文件。通过判断的数据块被定义为符合要求的SQLite3头数据块。
[0041]4.2)未通过4.1检测的数据块进行下一步检测,判断待检测数据块是否符合SQLite3页的结构,SQLite3页内部结构为一个类似链表的结构,首先头部有标识SQLite3页的固定值0X02、0X05、0X0a或OxOd。之后紧跟着的是页内部所有数据记录的偏移和大小,通过遍历这些数据记录可以判断一个数据块是否是SQLite3页数据块,如果在遍历过程中没有出现任何错误,可判断该数据块为一个SQLite3页数据块。之后根据内部数据格式判断数据是否是需要恢复的数据库文件,通过判断的数据块被定义为符合要求的SQLite3数据块。
[0042]4.3)未通过4.2检测的数据块被认为是无用的数据块,抛弃。
[0043]5)经过步骤4,我们已经从大量的原始数据块中恢复出需要恢复的数据库文件的数据块,接下来进行数据块分割和重组,具体步骤如下:
[0044]5.1)首先根据在原始磁盘镜像中偏移,将筛选出的数据块分割为若干个连续的数据块组,在原始磁盘镜像中相邻的数据块属于同一个数据块组。
[0045]5.2)对数据块组进行第一次筛选,选出以SQLite3头数据块起始的数据块组,每一个这样的数据块组对应了原磁盘镜像中的一个SQLite3数据库文件,对每个这样的数据块组进行完整性判断,完整性判断包括了数据库文件的大小和逻辑结构完整性,若一个数据块组能够同时满足大小完整和逻辑结构完整的特征,表示该数据块组是一个完整的SQLite3数据库文件,将该文件作为恢复结果保存。
[0046]5.3)对没有能通过大小和逻辑结构完整性检测的以SQLite3头数据块为起始的数据块组进行重组,根据SQLite3数据库文件的树状结构,对数据块组进行遍历,当遍历到的数据块缺失时,从其他不以SQLite3数据块为起始的数据块组中挑选页内结构最为相似的数据块组进行连接,连接后若能通过大小和逻辑结构完整性测试,则成功恢复出一个完整的SQLite3数据库文件,将该文件作为恢复结果保存,若连接后未能通过大小和逻辑结构完整性测试,则更换连接的数据块组再次测试,重复这个过程直到成功或者已经没有数据块组可以替换,当没有数据块组可以替换时,表示该数据库文件的恢复失败。
[0047]6)对于恢复失败的数据库文件和没有被使用的数据块组,可认为部分属于这些文件的数据已经从磁盘上被擦除,无法进行文件的恢复,为了最大程度的恢复有用的数据,可对这些数据碎片进行进一步数据抢救,数据抢救的具体步骤包括:
[0048]6.1)对于每一个没有恢复失败的数据库文件和没有被使用的数据块组,可当成普通的SQLite3数据库块来看待,通过遍历页内部链表的方式,将所有块中的数据记录提取出来,由于数据库记录本身是结构化的,我们根据数据记录结构的不同,将这些数据库记录进行分类保存,方便进行人工浏览。
【权利要求】
1.一种Android系统隐私数据恢复实现方法,其特征在于,通过对无法获得文件系统信息的磁盘镜像进行数据块划分,然后依次从数据块中提取出结构特征和语义特征,并进一步筛选出SQLite3文件头数据块和SQLite3页数据块,经分割和重组恢复出原始文件。
2.根据权利要求1所述的方法,其特征是,所述方法具体包括以下步骤: .1)通过对原始数据的分析,对原始数据进行数据块的划分; . 2)根据需要恢复的隐私数据文件,从数据块中提取出用于恢复隐私数据文件的结构特征、语义特征; . 3)通过上下文无关的结构特征和语义特征,从原始数据块中依次筛选出SQLite3文件头数据块或SQLite3页数据块; . 4)对步骤3筛选出的数据块进行分割和重组,恢复出原文件。
3.根据权利要求1或2所述的方法,其特征是,所述的划分包括以下步骤: .1.D在原始数据寻找常见的文件格式头; .1.2)以文件头为基准对原始数据进行对齐,以文件头的起始偏移作为一个数据块的起占.1.3)以4KB大小对整个原始数据进行划分,不足4KB的部分作为无法利用的数据块并抛弃。
4.根据权利要求1或2所述的方法,其特征是,所述的提取包括以下步骤: .2.1)根据SQLite3数据库文件的固定格式,利用内建结构特征库,提取出上下文无关的页结构特征,然后利用内建结构库,提取出上下文相关的SQLite3文件结构特征; . 2.2)根据要具体恢复的隐私数据类型,利用内建结构特征库,提取出上下文无关的数据记录结构特征。
5.根据权利要求4所述的方法,其特征是,所述的数据记录结构特征包括:短信数据库的数据结构、联系人数据库的数据结构、邮件数据库的数据结构、密钥链数据库的数据结构、日历数据库的数据结构和系统设置数据库的数据结构。
6.根据权利要求1或2所述的方法,其特征是,所述的筛选包括以下步骤: . 3.1)比对待检测的数据块是否符合SQLite3文件头的结构,即比对固定偏移处是否为SQLite3文件头的固定字符,通过结构判断的数据块被定义为SQLite3文件头数据块; .3.2)当未通过步骤3.1检测的数据块进行下一步检测,判断待检测数据块是否符合SQLite3页的结构,通过遍历数据快以判断其是否为SQLite3的页的结构,当在遍历过程中全部匹配时,判断该数据块为一个SQLite3页数据块; .3.3)未通过步骤3.2的数据块则被认为是无用的数据块并抛弃。
7.根据权利要求1或2所述的方法,其特征是,所述的分割和重组包括以下步骤: .4.1)首先根据在原始磁盘镜像中偏移,将筛选出的SQLite3文件头数据块和SQLite页数据块归并为若干个连续的数据块组; .4.2)对数据块组进行第一次筛选,选出以SQLite3头数据块起始的数据块组,每一个这样的数据块组对应了原磁盘镜像中的一个SQLite3数据库文件,对每一个这样的数据块组进行完整性判断,完整性判断包括文件大小和文件逻辑结构完整性,当一个数据块组能够同时满足文件大小和文件逻辑结构的完整,则表示该数据块组是一个完整的SQLite3数据库文件,将该文件作为恢复结果保存,否则执行步骤4.3 ;.4.3)对没有能通过大小和逻辑结构完整性检测的以SQLite3头数据块为起始的数据块组进行重组,即根据SQLite3数据库文件的树状结构,对数据块组进行遍历,当遍历到的数据块有缺失时,从其它不以SQLite3数据块为起始的数据块组中挑选页内结构最为相似的数据块组进行连接,连接后若能通过大小和逻辑结构完整性测试,则成功恢复出一个完整的SQLite3数据库文件,将该文件作为恢复结果保存,若连接后未能通过大小和逻辑结构完整性测试,则更换连接的数据块组再次测试,重复这个过程直到成功或者已经没有数据块组可以替换,当没有数据块组可以替换时,表示该数据库文件的恢复失败。
8.根据权利要求7所述的方法,其特征是,所述的归并,在原始磁盘镜像中地址相邻的数据块属于同一个数据块组,数据块组内部的数据块的顺序和数据块在原始磁盘镜像中的顺序保持一致。
9.根据权利要求7所述的方法,其特征是,所述的文件大小和文件逻辑结构完整性,包括:文件大小的完整和文件逻辑结构的完整,具体为:在SQLite3文件头中特定偏移处的值描述了整个SQLite3文件的大小,若恢复出的文件大小和对应文件头内描述的文件大小相一致,则表明恢复出的文件大小完整;SQLite3文件内部为树状结构,通过使用开源的SQLite3接口可以使用SQLite3自带的完整性校验功能,该完整性校验功能会从逻辑上判断SQLite3内部结构是否完整,若恢复出的文件能够通过该完整性校验,则认为恢复出的文件在逻辑结构上完整。
10.根据权利要求7所述的方法,其特征是,针对已擦除的数据碎片,即恢复失败的数据库文件和没有被使用的数据块组可进一步选择进行数据抢救,具体为:对于每一个没有恢复成功的数据库文件和没有被使用的数据块组,通过遍历页内部链表的方式,将其中所有数据块中的数据记录提取出来,根据数据记录结构的不同,将这些数据库记录进行分类保存,方便进行人 工浏 览。
【文档编号】G06F11/14GK104035839SQ201410260715
【公开日】2014年9月10日 申请日期:2014年6月12日 优先权日:2014年6月12日
【发明者】谷大武, 束骏亮, 李勇, 张媛媛, 李卷孺 申请人:上海交通大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1