一种基于Hash的YAFFS2文件各版本恢复方法与流程

文档序号:11864532阅读:285来源:国知局
一种基于Hash的YAFFS2文件各版本恢复方法与流程

本发明涉及信息安全中数字取证技术领域,尤其涉及一种基于Hash的YAFFS2文件各版本恢复方法。



背景技术:

随着移动智能终端技术的快速发展,智能终端已经成为人们日常工作、生活中必不可少的工具。正是由于智能终端的普及,一些犯罪分子开始利用其进行违法犯罪,所以为了从智能终端中获得有效的证据信息就需要对智能终端进行取证。智能终端取证包含了IOS取证、Android取证、Windows Phone取证等,其中Android系统的智能终端其市场占有率高达80%,并且Android系统是开源的智能终端系统,因此需要对Android取证的研究很有必要。

在Android取证中,包含了很多方面的研究,其中数据恢复技术方法的研究可帮助恢复、获得Android设备中数据信息,特别是对已删除或是修改过的数据文件都很有可能对后续地分析取证产生很大的影响。而YAFFS2文件系统是主要应用于Android系统下如手机、PAD等移动智能终端设备中的一种新兴的快速闪存文件系统。

并且目前,对于YAFFS2文件恢复方面的研究主要是基于反向扫描的方法获取文件系统中的数据信息,但是会存在反复扫描文件系统、读取其中数据的现象,该现象会增加方法的时间复杂度,并且在这些方法中并没有考虑到文件在删除前,或被修改后,文件之前版本中文件内容的情况,仅仅考虑了最新版本的文件恢复。



技术实现要素:

针对上述问题中存在的不足之处,本发明提供一种基于Hash的YAFFS2文件各版本恢复方法。

为实现上述目的,本发明提供一种基于Hash的YAFFS2文件各版本恢复方法,其特征在于,包括:

步骤1、对整个YAFFS2文件系统进行扫描,获取文件系统中所有的Block块信息并按照Block块的序列号从大至小排序;

步骤2、所有Block块按照序列号从大到小进行扫描,每个Block块按照Block块中chunk块id值由大到小进行扫描,获取object对象信息和chunk块信息,并将object对象信息和chunk信息存入chunkInfo[]中;所述object对象信息包括对象id和对象类型,所述chunk信息包括chunk id、chunk类型和chunk大小;

步骤3、根据对象类型将chunkInfo[]中的信息进行分类,并通过每个chunkinfo[j]中j所对应的chunk块内容进行读取,获取目录对象头信息和文件对象头信息。目录对象头信息包括:目录名、父对象id;文件对象头信息包括:文件名、对象id、父对象id、文件大小、文件的三个时间戳。

步骤4、对所述文件对象头信息中每个文件的时间戳进行分析,建立文件操作与时间戳之间的关联,获得文件的版本、文件操作信息,并将版本、文件操作信息以及步骤3中获得的文件对象头信息存入File[]中;对File[]进行扫描将其中只出现一次的对象id的File[]保存并直接跳到步骤6中对File[]中对应文件进行恢复,并将具有相同对象id的File[],以对象id作为Hash链表键值,以File[]作为存储对象存入Hash链表中;

步骤5、将步骤3中的目录信息存入Dir[]中;

步骤6、恢复Dir[]中目录信息,再将Hash链表中File[]的文件信息和步骤4中只出现一次对象id的File[]中的文件信息对应恢复到各目录下,实现YAFFS2文件各版本恢复。

作为本发明的进一步改进,在步骤4中,所述时间戳的分析方法包括:

步骤4-1、获得时间戳:

通过读取文件对象头获得每个版本文件的三个时间戳,并根据所获得的时间戳来获得该文件三种时间戳的间的大小序列S和最大值Θ;所述三个时间戳为访问时间戳、修改时间戳和创建时间戳;

步骤4-2、分析时间戳:

依据S和文件操作对时间戳影响规则,判断该版本文件与文件操作间的对应关系r;

步骤4-3、确定时间戳序列:

所述4-3在File[]存入Hash链表后执行。在Hash链表中根据相同键值、文件名相同的File[]间,即是对一个文件的不同版本依据其中的Θ对对应关系r进行排序,获得唯一的文件操作与各版本时间戳间的对应关系,确定文件的版本号。

作为本发明的进一步改进,所述步骤6包括:

步骤6-1、对于Dir[]中目录信息的处理:将所有Dir[]中的信息依次遍历,创建路径并通过Dir[]中的父对象id判断目录层级,按层级创建目录到指定文件夹;

步骤6-2、对Hash链表中的File[]文件信息处理:通过将Hash链表中同一键值的多个文件对象头信息提取,通过文件大小判断每一个版本文件所对应的chunk数据块,对文件进行重构,使得每一个版本文件的对象头信息和其数据块拼接在一起,实现YAFFS2文件各版本恢复。

作为本发明的进一步改进,所述步骤6-2中,将重构的各版本文件按其数据块依次写入与文件相对应的目录中,文件每一个数据块的写入都需要找到其chunk块对应的物理地址;该物理地址的获取方法,首先根据Block[i]中的i获得Block块的物理地址,而每个chunk又对应了一个chunkinfo[j],就可依据Block[]和chunkinfo[]二者来推断该chunk的物理地址,读取其中的文件数据,再将其写入恢复文件路径下的文件中,实现文件的恢复。

与现有技术相比,本发明的有益效果为:

本发明公开的一种基于Hash的YAFFS2文件各版本恢复方法,通过对时间戳分析,建立了时间戳与文件操作的关联性,并以此可获得文件的时间序列和文件的各个版本号,并且通过引入Hash链表对文件对象头存储,有助于方便快捷的对同一对象头id的不同版本文件进行恢复,从而获得多个版本的文件为后续取证分析工作打下基础。

附图说明

图1为本发明一种实施例公开的基于Hash的YAFFS2文件各版本恢复方法的流程图;

图2为本发明一种实施例公开的Hash链表结构;

图3为本发明一种实施例公开的时间戳分析方法流程图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

为了解决目前数据恢复中仅对数据最新版本进行恢复而忽视了数据被修改前版本的问题,本发明提出了一种基于Hash的YAFFS2文件各版本恢复方法,通过对每个文件对象头时间戳分析,获得文件操作与文件时间戳间的关联,进而获得文件的版本、操作信息,通过Hash链表存储同一文件中不同版本的文件对象头,最终实现对文件各个版本的恢复。

本发明所设计的基于Hash的YAFFS2文件各版本恢复方法遵循YAFFS2文件系统中不复写的原则特点,即YAFFS2每次对文件进行修改都会在新的chunk块中产生一个新的对象头,并在新chunk中写入修改后的数据。

下面结合附图对本发明做进一步的详细描述:

如图1-3所示,本发明提供一种基于Hash的YAFFS2文件各版本恢复方法,包括:

步骤1:扫描整个文件系统。

本方法中对文件系统的扫描方法采用了反向扫描的方法,该方法是从最后一个块向前扫描,从而可确保每一个块中信息均可获取。因此在这一步骤中,我们扫描整个NAND闪存,从OOB区域中提取Block块信息,并将Block块按照从大到小排列,从而可以确保扫描到每一个Block块,并且为后续对每个Block块的每一个chunk块进行扫描打下基础。

步骤2:获得各对象、chunk信息

在扫描过程中,在获得Block[N]的同时也对每一个Block进行扫描,也是由后向前扫描Block[i]中的每个chunk块直到chunkid为0,一个Block[i]块扫描完成。并且在这个过程中,可以获得object id、chunk id、object type、chunk type以及chunk size等信息,并将这些信息存入chunkInfo[]中。

步骤3:存储各版本文件信息到Hash链表

在YAFFS2文件系统中对于文件和目录它们所拥有的对象类型object type是不同的。然后可依据2.2YAFFS2文件系统数据特点中表2和表3的介绍,判断对象的类型,如在目录类型的对象中其object type=0x30,而在文件类型的对象中其object type=0x10。根据这一区别可以将所获取到的chunkinfo[]信息进行判别分类,从而获得目录Dir[]和文件File[]。

再依据YAFFS2文件不复写原则,对于同一个文件其对象头块和数据块是具有相同的object id,而且同一文件的每一个版本都具有一个新的对象头块,就可将File[]中具有相同对象头id的文件,通过object id计算Hash链表中的键值,将其所对应的File[]信息存入Hash链表中,图2展现了Hash链表结构,Hash链表中每个节点都包含三部分分别是对象头id,File文件信息以及指向下一个节点的指针,其中的对象头id用于计算Hash链表中的键值,通过不同的键值对应存入Hash表中。

并且在该步骤中获得文件信息后,需要对时间戳进行分析;如图3所示,时间戳的分析方法主要包含三个步骤分别是获得时间戳、分析时间戳和最后确定时间戳序列

3.1获得时间戳。从文件对象头块中获取每个版本文件的三个时间戳,分别是访问、修改、创建时间戳,然后对三个时间戳间的关系进行比较获得该版本文件的时间戳序列S,并且每个版本文件的时间戳集用T表示,每个。并且同时计算三个时间戳中的最大值Θ。

3.2分析时间戳。通过前一步中所获得的S,通过与文件规则间的判断,获得每个T与文件操作o的对应关系r。

3.3确定时间戳序列。通过对同一文件所获得的关联关系r,依据之前第一步中计算的每个T的时间戳最大值Θ来进行排序,从而可确定每个版本文件T与o唯一的对应关系,并且确定该文件不同版本发生的时间序列、文件操作以及文件版本号。

步骤4:恢复各版本文件

在该步骤中,首先是对于Dir[]中目录信息的处理,将所有Dir[]中的信息依次遍历,创建路径并按其目录层级创建对应的目录到指定文件夹中。然后是对Hash链表中的File[]文件信息处理。通过将Hash链表中同一文件的多个文件对象头块提取,通过文件大小判断每一个版本文件所对应的chunk数据块,对文件进行重构,使得每一个版本文件的对象头块和其数据块拼接在一起,从而帮助实现文件的恢复。

并且最后将所重构的各版本文件按其数据块依次写入与文件相对应的目录中,由于文件每一个数据块的写入都需要找到其chunk块对应的物理地址,该物理地址的获取方法,首先根据Block[i]中的i获得Block块的物理地址,而每个chunk又对应了一个chunkinfo[j],就可依据Block[]和chunkinfo[]二者来推断该chunk的物理地址,读取其中的文件数据,再将其写入恢复文件路径下的文件中,实现文件的恢复,达到算法的最终目标。

本发明公开的一种基于Hash的YAFFS2文件各版本恢复方法,通过对时间戳分析,建立了时间戳与文件操作的关联性,并以此可获得文件的时间序列和文件的各个版本号,并且通过引入Hash链表对文件对象头存储,有助于方便快捷的对同一对象头id的不同版本文件进行恢复,从而获得多个版本的文件为后续取证分析工作打下基础。

以上仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1