CN109857589A - 一种删除文件的恢复方法、装置及存储介质 - Google Patents
一种删除文件的恢复方法、装置及存储介质 Download PDFInfo
- Publication number
- CN109857589A CN109857589A CN201811577588.1A CN201811577588A CN109857589A CN 109857589 A CN109857589 A CN 109857589A CN 201811577588 A CN201811577588 A CN 201811577588A CN 109857589 A CN109857589 A CN 109857589A
- Authority
- CN
- China
- Prior art keywords
- node
- ino
- flash
- nodetype
- file
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种删除文件的恢复方法、装置及存储介质。该方法包括:遍历步骤,对FLASH进行遍历获取FLASH上顺序排列的有效节点的集合U;分类步骤,根据集合U中每个有效节点的类型将集合U分为FLASH上DIRENT节点的集合D和FLASH上INODE节点的集合I;恢复步骤,根据集合D和集合I构建删除文件的目录结构,将所述删除文件恢复。本发明实现了基于FLASH节点进行数据的恢复。本发明可以实现复杂情况下删除文件的恢复或部分恢复,提高了文件恢复的成功率,便于数据的取证,提高了用户体验。
Description
技术领域
本发明涉及计算机数据恢复技术领域,特别是一种删除文件的恢复方法、装置及存储介质。
背景技术
JFFS2文件系统是一种广泛应用于嵌入式设备的文件系统,随着物联网技术的发展与普及,其删除文件的恢复技术在智能设备安全、网络信息安全领域将是一个备受关注的热点。目前,基于JFFS2文件系统的删除恢复技术善不成熟,恢复成功率低,且恢复速度慢,影响了用户体验,不能满足计算机取证安全领域的迫切需求。
发明内容
本发明针对上述现有技术中的缺陷,提出了如下技术方案。
一种删除文件的恢复方法,该方法包括:
遍历步骤,对FLASH进行遍历获取FLASH上顺序排列的有效节点的集合U;
分类步骤,根据集合U中每个有效节点的类型将集合U分为FLASH上DIRENT节点的集合D和FLASH上INODE节点的集合I;
恢复步骤,根据集合D和集合I构建删除文件的目录结构,将所述删除文件恢复。
更进一步地,所述遍历步骤的操作包括:从分区FLASH的位置p开始,读取数据,判断所述数据的结构是否符合Uk的格式,如果是,判断所述数据的magic字段是否为0x1985,如果是,则将所述数据插入集合U,令p=p+totlen,进行读取数据;如果否,则判断p%4≠0是否成立,如果是,则对p做关于4的向上对齐,如果,则令p=p+x,x为一个FLASH扇区的字节数;其中,U={U1,U2,U3,…,Un},Uk(1≤k≤n)={magic,nodetype,totlen,hdr_crc},magic为幻数屏蔽位,nodetype表示该节点的类型,totlen表示该节点的总长度,hdr_crc表示该节点头部信息的crc校验值。
更进一步地,所述分类步骤的操作包括:获取U={U1,U2,U3,…,Un}中的元素Uk∈U,
如果Uk的nodetype==JFFS2_NODETYPE_DIRENT或nodetype==JFFS2_NODETYPE_DIRENT&~JFFS2_NODE_ACCURATE,则将Uk(1≤k≤n)插入D={D1,D2,D3,…,Dm}中;
如果Uk的nodetype==JFFS2_NODETYPE_INODE或nodetype==JFFS2_NODETYPE_INODE&~JFFS2_NODE_ACCURATE,则将Uk插入I={I1,I2,I3,…,In-m};
其中,D={D1,D2,D3,…,Dm}为FLASH上所有DIRENT节点的集合,Dk(1≤k≤m)={Uk,pino,version,ino,mctime,nsize,type,name};
其中,I={I1,I2,I3,…,In-m}为FLASH上所有INODE节点的集合,Ik(1≤k≤n-m)={Uk,ino,version,offset,csize,dsize,compr,data},
其中,pino表示该节点的父节点的编号,version表示版本号,ino表示该节点的编号,mctime表示创建时间,nsize表示name的长度,type表示该节点的文件类型,name记录节点名称,offset表示该节点在逻辑连续的文件中的起始位置,csize表示压缩后的内容长度,dsize表示解压后的内容长度,compr表示压缩算法类型,data记录该节点的数据内容。
更进一步地,所述恢复步骤的操作包括:
从D={D1,D2,D3,…,Dn}中选取Dk∈D的pino作为根节点的ino,当且仅当对于任意Dk1∈D,(k1≠k),Dk的pino不等于Dk1的ino,令inothis=根节点的ino,this=根节点;
对于所有Dk∈D,当且仅当其pino==inothis,将其插入this的子节点集合,并从D中删除;
遍历this的子节点集合,若某个元素的type==DT_DIR,令this=该元素,inothis=该元素的ino,递归执行遍历this的操作,若某个元素的type==DT_REG,对于所有Ik∈I,当且仅当其ino==inothis,将其插入该元素的数据实体集合;
根据Ik中的compr字段确定压缩算法类型,基于csize和dsize提取完整文件。
更进一步地,所述FLASH使用JFFS2文件系统。
本发明还提出了一种删除文件的恢复装置,其特征在于,该装置包括:
遍历单元,用于对FLASH进行遍历获取FLASH上顺序排列的有效节点的集合U;
分类单元,用于根据集合U中每个有效节点的类型将集合U分为FLASH上DIRENT节点的集合D和FLASH上INODE节点的集合I;
恢复单元,用于根据集合D和集合I构建删除文件的目录结构,将所述删除文件恢复。
更进一步地,所述遍历单元执行的操作包括:从分区FLASH的位置p开始,读取数据,判断所述数据的结构是否符合Uk的格式,如果是,判断所述数据的magic字段是否为0x1985,如果是,则将所述数据插入集合U,令p=p+totlen,进行读取数据;如果否,则判断p%4≠0是否成立,如果是,则对p做关于4的向上对齐,如果,则令p=p+x,x为一个FLASH扇区的字节数;其中,U={U1,U2,U3,…,Un},Uk(1≤k≤n)={magic,nodetype,totlen,hdr_crc},magic为幻数屏蔽位,nodetype表示该节点的类型,totlen表示该节点的总长度,hdr_crc表示该节点头部信息的crc校验值。
更进一步地,所述分类单元执行的操作包括:获取U={U1,U2,U3,…,Un}中的元素Uk∈U,
如果Uk的nodetype==JFFS2_NODETYPE_DIRENT或nodetype==JFFS2_NODETYPE_DIRENT&~JFFS2_NODE_ACCURATE,则将Uk(1≤k≤n)插入D={D1,D2,D3,…,Dm}中;
如果Uk的nodetype==JFFS2_NODETYPE_INODE或nodetype==JFFS2_NODETYPE_INODE&~JFFS2_NODE_ACCURATE,则将Uk插入I={I1,I2,I3,…,In-m};
其中,D={D1,D2,D3,…,Dm}为FLASH上所有DIRENT节点的集合,Dk(1≤k≤m)={Uk,pino,version,ino,mctime,nsize,type,name};
其中,I={I1,I2,I3,…,In-m}为FLASH上所有INODE节点的集合,Ik(1≤k≤n-m)={Uk,ino,version,offset,csize,dsize,compr,data},
其中,pino表示该节点的父节点的编号,version表示版本号,ino表示该节点的编号,mctime表示创建时间,nsize表示name的长度,type表示该节点的文件类型,name记录节点名称,offset表示该节点在逻辑连续的文件中的起始位置,csize表示压缩后的内容长度,dsize表示解压后的内容长度,compr表示压缩算法类型,data记录该节点的数据内容。
更进一步地,所述恢复单元执行的操作包括:
从D={D1,D2,D3,…,Dn}中选取Dk∈D的pino作为根节点的ino,当且仅当对于任意Dk1∈D,(k1≠k),Dk的pino不等于Dk1的ino,令inothis=根节点的ino,this=根节点;
对于所有Dk∈D,当且仅当其pino==inothis,将其插入this的子节点集合,并从D中删除;
遍历this的子节点集合,若某个元素的type==DT_DIR,令this=该元素,inothis=该元素的ino,递归执行遍历this的操作,若某个元素的type==DT_REG,对于所有Ik∈I,当且仅当其ino==inothis,将其插入该元素的数据实体集合;
根据Ik中的compr字段确定压缩算法类型,基于csize和dsize提取完整文件。
更进一步地,所述FLASH使用JFFS2文件系统。
本发明还提出了一种计算机可读存储介质,其特征在于,所述存储介质上存储有计算机程序代码,当所述计算机程序代码被计算机执行时执行上述之任一的方法。
本发明的技术效果为:本发明先获取FLASH上顺序排列的有效节点的集合U,再对其分为FLASH上DIRENT节点的集合D和FLASH上INODE节点的集合I,然后根据集合D和集合I构建删除文件的目录结构,将所述删除文件恢复,实现了基于FLASH节点进行数据的恢复。本发明可以实现复杂情况下删除文件的恢复或部分恢复,提高了文件恢复的成功率,便于数据的取证,提高了用户体验。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显。
图1是JFFS2的头部节点示意图。
图2是INODE节点的全序关系示意图。
图3是映射信息表示意图。
图4是根据本发明的实施例的一种删除文件的恢复方法的流程图。
图5是根据本发明的实施例的一种删除文件的恢复装置的结构图。
图6是根据本发明的恢复方法的文件恢复结果图。
具体实施方式
下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关发明,而非对该发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与有关发明相关的部分。
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
本发明首先介绍JFFS2的相关知识,这有助于理解本发明的文件恢复方法。JFFS2将文件系统的数据和原数据以节点的形式存储在闪存(FLASH)上,具体来说节点头部的定义如图1所示:幻数屏蔽位:0x1985用来标识JFFS2文件系统。节点类型:JFFS2自身定义了三种节点类型:
JFFS2_NODETYPE_INODE:INODE节点包含了i-节点的原数据(i节点号,文件的组ID,属主id,访问时间,偏移,长度等),文件数据被附在INODE节点之后。除此之外,每个INODE节点还有一个版本号,它被用来维护属于一个i-节点的所有INODE节点的全序关系。下面举例来说明这个全序关系在JFFS2的使用,如图2所示。因此,当文件系统从闪存上读节点信息后,会生成图3所示的映射信息表。根据这个映射信息表,文件系统就知道到相应的INODE节点去读取相应的文件内容。最后要说明的是,JFFS2支持文件数据的压缩存储,因此在INODE节点中还包含了所使用的压缩算法,在读取数据的时候选择相应的压缩算法来解压缩。
JFFS2_NODETYPE_DIRENT:DIRENT节点就是把文件名与i节点对应起来。在DIRENT节点中也有一个版本号,这个版本号的作用主要是用来删除一个目录项。具体来说,当我们要从一个目录中删除一个目录项时,我们要写一个DIRENT节点,节点中的文件名与被删除的目录项中的文件名相同,i节点号置为0,同时设置一个更高的版本号。
JFFS2_NODETYPE_CLEANMARKER:当一个擦写块被擦写完毕后,CLEANMARKER节点会被写在NOR flash的开头,或NAND flash的OOB(Out-Of-Band)区域来表明这是一个干净,可写的擦写块。在JFFS v1中,如果扫描到开头的1K都是0xFF就认为这个擦写块是干净的。但是在实际的测试中发现,如果在擦写的过程中突然掉电,擦写块上也可能会有大块连续0xFF,但是这并不表明这个擦写块是干净的。于是需要CLEANMARKER节点来确切的标识一个干净的擦写块。
图1中还示出了如下字段:节点总长度:包括节点头和数据的长度;节点头部CRC校验:包含节点头部的校验码,为文件系统的可靠性提供了支持。
恢复原理介绍
考虑到文件系统可扩展性和兼容性,JFFS2的节点类型的最高两位被用来定义节点的兼容属性,具体来说有下面几种兼容属性:
JFFS2_FEATURE_INCOMPAT:当JFFS2发现了一个不能识别的节点类型,并且它的兼容属性是JFFS2_FEATURE_INCOMPAT,那么JFFS2必须拒绝挂载(mount)文件系统。
JFFS2_FEATURE_ROCOMPAT:当JFFS2发现了一个不能识别的节点类型,并且它的兼容属性是JFFS2_FEATURE_ROCOMPAT,那么JFFS2必须以只读的方式挂载文件系统。
JFFS2_FEATURE_RWCOMPAT_COPY:当JFFS2发现了一个不能识别的节点类型,并且它的兼容属性是JFFS2_FEATURE_RWCOMPAT_COPY,那么在垃圾回收的时候,这个节点要被拷贝到新的位置。
JFFS2_FEATURE_RWCOMPAT_DELETE:当JFFS2发现了一个不能识别的节点类型,并且它的兼容属性是JFFS2_FEATURE_RWCOMPAT_DELETE,那么在垃圾回收的时候,这个节点可以被删除。
当一个文件节点被删除时,它被标记为以上的JFFS2_FEATURE_RWCOMPAT_DELETE类型,通过遍历磁盘上的节点,最后构建出文件路径结构即可恢复被删除(但未被覆盖)的文件。
为了便于理解,本发明做如下定义。
U={U1,U2,U3,…,Un}为FLASH上顺序排列的有效节点的集合。根据通用特征对一般节点做如下定义:
Uk(1≤k≤n)={magic,nodetype,totlen,hdr_crc}
其中magic为幻数屏蔽位,nodetype表示该节点的类型,totlen表示该节点的总长度,hdr_crc表示该节点头部信息的crc校验值。
D={D1,D2,D3,…,Dm}为FLASH上所有DIRENT节点的集合,根据其特征定义如下:
Dk(1≤k≤m)={Uk,pino,version,ino,mctime,nsize,type,name},
当Uk中nodetype==JFFS2_NODETYPE_DIRENT,
或者
nodetype==JFFS2_NODETYPE_DIRENT&~JFFS2_NODE_ACCURATE
其中pino表示该节点的父节点的编号,version表示版本号,ino表示该节点的编号,mctime表示创建时间,nsize表示name的长度,type表示该节点的文件类型,name记录节点名称。
I={I1,I2,I3,…,In-m}为FLASH上所有INODE节点的集合,根据其特征定义INODE节点如下:
Ik(1≤k≤n-m)={Uk,ino,version,offset,csize,dsize,compr,data},
当Uk中nodetype==JFFS2_NODETYPE_INODE,
或者
nodetype==JFFS2_NODETYPE_DIRENT&~JFFS2_NODE_ACCURATE
其中ino表示该节点的编号,version表示版本号,offset表示该节点在逻辑连续的文件中的其实位置,csize表示压缩后的内容长度,dsize表示解压后的内容长度,compr表示压缩算法类型,data记录该节点的数据内容。
图1示出了本发明的一种删除文件的恢复方法,该方法包括:
遍历步骤S101,对FLASH进行遍历获取FLASH上顺序排列的有效节点的集合U。
分类步骤S102,根据集合U中每个有效节点的类型将集合U分为FLASH上DIRENT节点的集合D和FLASH上INODE节点的集合I。
恢复步骤S103,根据集合D和集合I构建删除文件的目录结构,将所述删除文件恢复。
本发明所恢复的文件为FLASH使用JFFS2文件系统中的文件。
在本发明方法的一个具体的实施方式中,所述遍历步骤S101的操作包括:从分区FLASH的位置p开始,读取数据,判断所述数据的结构是否符合Uk的格式,如果是,判断所述数据的magic字段是否为0x1985,如果是,则将所述数据插入集合U,令p=p+totlen,进行读取数据;如果否,则判断p%4≠0是否成立,如果是,则对p做关于4的向上对齐,如果,则令p=p+x,x为一个FLASH扇区的字节数;其中,U={U1,U2,U3,…,Un},Uk(1≤k≤n)={magic,nodetype,totlen,hdr_crc},magic为幻数屏蔽位,nodetype表示该节点的类型,totlen表示该节点的总长度,hdr_crc表示该节点头部信息的crc校验值。
一般来说,初始读取从闪存分区的某个位置(往往是起始位置)开始,设该位置为p,从位置p开始,对于接下来足够多的数据,判断所述数据的结构是否符合Uk的格式,如果是则进行恢复,如果不是则表示读取错误(失败),结束恢复过程,通过上述操作,找出FLASH顺序排列的有效节点的集合U,这是进行数据恢复的关键一步,只有准确找到顺序排列的有效节点的集合U,才可以完成数据的恢复,这是本发明重要的发明点之一。
在本发明方法的一个具体的实施方式中,所述分类步骤S102的操作包括:
获取U={U1,U2,U3,…,Un}中的元素Uk∈U,
如果Uk的nodetype==JFFS2_NODETYPE_DIRENT或nodetype==JFFS2_NODETYPE_DIRENT&~JFFS2_NODE_ACCURATE,则将Uk(1≤k≤n)插入D={D1,D2,D3,…,Dm}中;
如果Uk的nodetype==JFFS2_NODETYPE_INODE或nodetype==JFFS2_NODETYPE_INODE&~JFFS2_NODE_ACCURATE,则将Uk插入I={I1,I2,I3,…,In-m};
其中,D={D1,D2,D3,…,Dm}为FLASH上所有DIRENT节点的集合,Dk(1≤k≤m)={Uk,pino,version,ino,mctime,nsize,type,name};
其中,I={I1,I2,I3,…,In-m}为FLASH上所有INODE节点的集合,Ik(1≤k≤n-m)={Uk,ino,version,offset,csize,dsize,compr,data},
其中,pino表示该节点的父节点的编号,version表示版本号,ino表示该节点的编号,mctime表示创建时间,nsize表示name的长度,type表示该节点的文件类型,name记录节点名称,offset表示该节点在逻辑连续的文件中的起始位置,csize表示压缩后的内容长度,dsize表示解压后的内容长度,compr表示压缩算法类型,data记录该节点的数据内容,JFFS2_NODE_ACCURATE的值等于0x2000,是一个有效节点的类型的判断时的一个准确计算因子。
通过上述操作,将顺序排列的有效节点的集合U分为DIRENT节点的集合D和FLASH上INODE节点的集合I,这样才可以实现基于节点完成数据的恢复工作,这是本发明重要的发明点之另一。
在本发明方法的一个具体的实施方式中,所述恢复步骤S103的操作包括:
从D={D1,D2,D3,…,Dn}中选取Dk∈D的pino作为根节点的ino,当且仅当对于任意Dk1∈D,(k1≠k),Dk的pino不等于Dk1的ino,令inothis=根节点的ino,this=根节点;
对于所有Dk∈D,当且仅当其pino==inothis,将其插入this的子节点集合,并从D中删除;
遍历this的子节点集合,若某个元素的type==DT_DIR,令this=该元素,inothis=该元素的ino,递归执行遍历this的操作,若某个元素的type==DT_REG,对于所有Ik∈I,当且仅当其ino==inothis,将其插入该元素的数据实体集合;DT_DIR和DT_REG是文件类型的标识,DT_DIR等于4,DT_REG等于8。当DIRENT节点的类型等于DT_DIR也就是等于4时,表示该节点描述的是文件夹的信息;当DIRENT节点的类型等于DT_REG也就是等于8时,表示该节点描述的是文件的信息。
根据Ik中的compr字段确定压缩算法类型,基于csize和dsize提取完整文件。
上述操作根据DIRENT节点的集合D和FLASH上INODE节点的集合I了构建文件的目录结构,找出了被删除文件的节点,然后根据Ik中的compr字段确定压缩算法类型,基于csize和dsize提取完整文件,从而实现了文件的恢复,这是本发明重要的发明点之又一。
进一步参考图5,作为对上述图1所示方法的实现,本申请提供了一种删除文件的恢复装置的一个实施例,该装置实施例与图1所示的方法实施例相对应,该装置具体可以包含于各种电子设备中。
图5示出了本发明的一种删除文件的恢复装置,该装置包括:
遍历单元501,用于对FLASH进行遍历获取FLASH上顺序排列的有效节点的集合U。
分类单元502,用于根据集合U中每个有效节点的类型将集合U分为FLASH上DIRENT节点的集合D和FLASH上INODE节点的集合I。
恢复单元503,用于根据集合D和集合I构建删除文件的目录结构,将所述删除文件恢复。
本发明所恢复的文件为FLASH使用JFFS2文件系统中的文件。
在本发明装置的一个具体的实施方式中,所述遍历单元501执行的操作包括:从分区FLASH的位置p开始,读取数据,判断所述数据的结构是否符合Uk的格式,如果是,判断所述数据的magic字段是否为0x1985,如果是,则将所述数据插入集合U,令p=p+totlen,进行读取数据;如果否,则判断p%4≠0是否成立,如果是,则对p做关于4的向上对齐,如果,则令p=p+x,x为一个FLASH扇区的字节数;其中,U={U1,U2,U3,…,Un},Uk(1≤k≤n)={magic,nodetype,totlen,hdr_crc},magic为幻数屏蔽位,nodetype表示该节点的类型,totlen表示该节点的总长度,hdr_crc表示该节点头部信息的crc校验值。
一般来说,初始读取从闪存分区的某个位置(往往是起始位置)开始,设该位置为p,从位置p开始,对于接下来足够多的数据,判断所述数据的结构是否符合Uk的格式,如果是则进行恢复,如果不是则表示读取错误(失败),结束恢复过程,通过上述操作,找出FLASH顺序排列的有效节点的集合U,这是进行数据恢复的关键一步,只有准确找到顺序排列的有效节点的集合U,才可以完成数据的恢复,这是本发明重要的发明点之一。
在本发明装置的一个具体的实施方式中,所述分类单元502执行的操作包括:获取U={U1,U2,U3,…,Un}中的元素Uk∈U,
如果Uk的nodetype==JFFS2_NODETYPE_DIRENT或nodetype==JFFS2_NODETYPE_DIRENT&~JFFS2_NODE_ACCURATE,则将Uk(1≤k≤n)插入D={D1,D2,D3,…,Dm}中;
如果Uk的nodetype==JFFS2_NODETYPE_INODE或nodetype==JFFS2_NODETYPE_INODE&~JFFS2_NODE_ACCURATE,则将Uk插入I={I1,I2,I3,…,In-m};
其中,D={D1,D2,D3,…,Dm}为FLASH上所有DIRENT节点的集合,Dk(1≤k≤m)={Uk,pino,version,ino,mctime,nsize,type,name};
其中,I={I1,I2,I3,…,In-m}为FLASH上所有INODE节点的集合,Ik(1≤k≤n-m)={Uk,ino,version,offset,csize,dsize,compr,data},
其中,pino表示该节点的父节点的编号,version表示版本号,ino表示该节点的编号,mctime表示创建时间,nsize表示name的长度,type表示该节点的文件类型,name记录节点名称,offset表示该节点在逻辑连续的文件中的起始位置,csize表示压缩后的内容长度,dsize表示解压后的内容长度,compr表示压缩算法类型,data记录该节点的数据内容,JFFS2_NODE_ACCURATE的值等于0x2000,是一个有效节点的类型的判断时的一个准确计算因子。
通过上述操作,将顺序排列的有效节点的集合U分为DIRENT节点的集合D和FLASH上INODE节点的集合I,这样才可以实现基于节点完成数据的恢复工作,这是本发明重要的发明点之另一。
在本发明装置的一个具体的实施方式中,所述恢复单元503执行的操作包括:
从D={D1,D2,D3,…,Dn}中选取Dk∈D的pino作为根节点的ino,当且仅当对于任意Dk1∈D,(k1≠k),Dk的pino不等于Dk1的ino,令inothis=根节点的ino,this=根节点;
对于所有Dk∈D,当且仅当其pino==inothis,将其插入this的子节点集合,并从D中删除;
遍历this的子节点集合,若某个元素的type==DT_DIR,令this=该元素,inothis=该元素的ino,递归执行遍历this的操作,若某个元素的type==DT_REG,对于所有Ik∈I,当且仅当其ino==inothis,将其插入该元素的数据实体集合;DT_DIR和DT_REG是文件类型的标识,DT_DIR等于4,DT_REG等于8。当DIRENT节点的类型等于DT_DIR也就是等于4时,表示该节点描述的是文件夹的信息;当DIRENT节点的类型等于DT_REG也就是等于8时,表示该节点描述的是文件的信息。
根据Ik中的compr字段确定压缩算法类型,基于csize和dsize提取完整文件。
上述操作根据DIRENT节点的集合D和FLASH上INODE节点的集合I了构建文件的目录结构,找出了被删除文件的节点,然后根据Ik中的compr字段确定压缩算法类型,基于csize和dsize提取完整文件,从而实现了文件的恢复,这是本发明重要的发明点之又一。
为验证本发明方法和装置文件恢复的技术效果,做了如下实验,实验过程为:
1、制作一个JFFS2文件系统的镜像;
2、在Ubuntu下挂载该镜像,往挂载的设备中加入、删除、修改文件(该例中选用linux内核源码,文件结构足够复杂,文件数量足够多并且镜像体积较小)。然后导出镜像。
3、采用本方法和装置文件恢复解析该镜像,进行文件恢复,恢复结果如图6所示。本发明利用JFFS2文件系统扩展性和兼容性设置上的特性,以及垃圾回收的机制,透过其“只关注非过时节点”的表面现象,挖掘其中可能存在的蛛丝马迹,达到恢复文件的目的。从图6可见,本发明可以实现复杂情况下删除文件的恢复或部分恢复,提高了文件恢复的成功率,便于数据的取证,提高了用户体验。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本申请可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例或者实施例的某些部分所述的方法。
最后所应说明的是:以上实施例仅以说明而非限制本发明的技术方案,尽管参照上述实施例对本发明进行了详细说明,本领域的普通技术人员应当理解:依然可以对本发明进行修改或者等同替换,而不脱离本发明的精神和范围的任何修改或局部替换,其均应涵盖在本发明的权利要求范围当中。
Claims (11)
1.一种删除文件的恢复方法,其特征在于,该方法包括:
遍历步骤,对FLASH进行遍历获取FLASH上顺序排列的有效节点的集合U;
分类步骤,根据集合U中每个有效节点的类型将集合U分为FLASH上DIRENT节点的集合D和FLASH上INODE节点的集合I;
恢复步骤,根据集合D和集合I构建删除文件的目录结构,将所述删除文件恢复。
2.根据权利要求1所述的方法,其特征在于,所述遍历步骤的操作包括:
从分区FLASH的位置p开始,读取数据,判断所述数据的结构是否符合Uk的格式,如果是,判断所述数据的magic字段是否为0x1985,如果是,则将所述数据插入集合U,令p=p+totlen,进行读取数据;如果否,则判断p%4≠0是否成立,如果是,则对p做关于4的向上对齐,如果,则令p=p+x,x为一个FLASH扇区的字节数;
其中,
U=(U1,U2,U3,...,Un},Uk(1≤k≤n)=(magic,nodetype,totlen,hdr_crc},magic为幻数屏蔽位,nodetype表示该节点的类型,totlen表示该节点的总长度,hdr_crc表示该节点头部信息的crc校验值。
3.根据权利要求2所述的方法,其特征在于,所述分类步骤的操作包括:
获取U={U1,U2,U3,...,Un}中的元素Uk∈U,
如果Uk的nodetype==JFFS2_NODETYPE-DIRENT或nodetype==JFFS2_NODETYPE_DIRENT&~JFFS2_NODE_ACCURATE,则将Uk(1≤k≤n)插入D={D1,D2,D3,...,Dm}中;
如果Uk的nodetype==JFFS2_NODETYPE_INODE或nodetype==JFFS2_NODETYPE_INODE&~JFFS2_NODE_ACCURATE,则将Uk插入I={I1,I2,I3,...,In-m};
其中,D={D1,D2,D3,...,Dm}为FLASH上所有DIRENT节点的集合,Dk(1≤k≤m)={Uk,pino,version,ino,mctime,nsize,type,name};
其中,I={I1,I2,I3,...,In-m}为FLASH上所有INODE节点的集合,Ik(1≤k≤n-m)={Uk,ino,version,offset,csize,dsize,compr,data},
其中,pino表示该节点的父节点的编号,version表示版本号,ino表示该节点的编号,mctime表示创建时间,nsize表示name的长度,type表示该节点的文件类型,name记录节点名称,offset表示该节点在逻辑连续的文件中的起始位置,csize表示压缩后的内容长度,dsize表示解压后的内容长度,compr表示压缩算法类型,data记录该节点的数据内容。
4.根据权利要求3所述的方法,其特征在于,所述恢复步骤的操作包括:
从D={D1,D2,D3,...,Dn}中选取Dk∈D的pino作为根节点的ino,当且仅当对于任意Dk1∈D,(k1≠k),Dk的pino不等于Dk1的ino,令inothis=根节点的ino,this=根节点;
对于所有Dk∈D,当且仅当其pino==inothis,将其插入this的子节点集合,并从D中删除;
遍历this的子节点集合,若某个元素的type==DT_DIR,令this=该元素,inothis=该元素的ino,递归执行遍历this的操作,若某个元素的type==DT_REG,对于所有Ik∈I,当且仅当其ino==inothis,将其插入该元素的数据实体集合;
根据Ik中的compr字段确定压缩算法类型,基于csize和dsize提取完整文件。
5.根据权利要求1-4任一项所述的方法,其特征在于,所述FLASH使用JFFS2文件系统。
6.一种删除文件的恢复装置,其特征在于,该装置包括:
遍历单元,用于对FLASH进行遍历获取FLASH上顺序排列的有效节点的集合U;
分类单元,用于根据集合U中每个有效节点的类型将集合U分为FLASH上DIRENT节点的集合D和FLASH上INODE节点的集合I;
恢复单元,用于根据集合D和集合I构建删除文件的目录结构,将所述删除文件恢复。
7.根据权利要求6所述的装置,其特征在于,所述遍历单元执行的操作包括:
从分区FLASH的位置p开始,读取数据,判断所述数据的结构是否符合Uk的格式,如果是,判断所述数据的magic字段是否为0x1985,如果是,则将所述数据插入集合U,令p=p+totlen,进行读取数据;如果否,则判断p%4≠0是否成立,如果是,则对p做关于4的向上对齐,如果,则令p=p+x,x为一个FLASH扇区的字节数;
其中,
U={U1,U2,U3,...,Un},Uk(1≤k≤n)={magic,nodetype,totlen,hdr_crc},magic为幻数屏蔽位,nodetype表示该节点的类型,totlen表示该节点的总长度,hdr_crc表示该节点头部信息的crc校验值。
8.根据权利要求7所述的装置,其特征在于,所述分类单元执行的操作包括:获取U={U1,U2,U3,...,Un}中的元素Uk∈U,
如果Uk的nodetype==JFFS2_NODETYPE_DIRENT或nodetype==JFFS2_NODETYPE_DIRENT&~JFFS2_NODE_ACCURATE,则将Uk(1≤k≤n)插入D={D1,D2,D3,...,Dm}中;
如果Uk的nodetype==JFFS2_NODETYPE_INODE或nodetype==JFFS2_NODETYPE_INODE&~JFFS2_NODE_ACCURATE,则将Uk插入I={I1,I2,I3,...,In-m};
其中,D={D1,D2,D3,...,Dm}为FLASH上所有DIRENT节点的集合,Dk(1≤k≤m)={Uk,pino,version,ino,mctime,nsize,type,name};
其中,I={I1,I2,I3,...,In-m}为FLASH上所有INODE节点的集合,Ik(1≤k≤n-m)={Uk,ino,version,offset,csize,dsize,compr,data},
其中,pino表示该节点的父节点的编号,version表示版本号,ino表示该节点的编号,mctime表示创建时间,nsize表示name的长度,type表示该节点的文件类型,name记录节点名称,offset表示该节点在逻辑连续的文件中的起始位置,csize表示压缩后的内容长度,dsize表示解压后的内容长度,compr表示压缩算法类型,data记录该节点的数据内容。
9.根据权利要求8所述的装置,其特征在于,所述恢复单元执行的操作包括:
从D={D1,D2,D3,...,Dn}中选取Dk∈D的pino作为根节点的ino,当且仅当对于任意Dk1∈D,(k1≠k),Dk的pino不等于Dk1的ino,令inothis=根节点的ino,this=根节点;
对于所有Dk∈D,当且仅当其pino==inothis,将其插入this的子节点集合,并从D中删除;
遍历this的子节点集合,若某个元素的type==DT_DIR,令this=该元素,inothis=该元素的ino,递归执行遍历this的操作,若某个元素的type==DT_REG,对于所有Ik∈I,当且仅当其ino==inothis,将其插入该元素的数据实体集合;
根据Ik中的compr字段确定压缩算法类型,基于csize和dsize提取完整文件。
10.根据权利要求6—9任一项所述的装置,其特征在于,所述FLASH使用JFFS2文件系统。
11.一种计算机可读存储介质,其特征在于,所述存储介质上存储有计算机程序代码,当所述计算机程序代码被计算机执行时执行权利要求1-5之任一的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811577588.1A CN109857589B (zh) | 2018-12-21 | 2018-12-21 | 一种删除文件的恢复方法、装置及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811577588.1A CN109857589B (zh) | 2018-12-21 | 2018-12-21 | 一种删除文件的恢复方法、装置及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109857589A true CN109857589A (zh) | 2019-06-07 |
CN109857589B CN109857589B (zh) | 2021-11-23 |
Family
ID=66891938
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811577588.1A Active CN109857589B (zh) | 2018-12-21 | 2018-12-21 | 一种删除文件的恢复方法、装置及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109857589B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110704372A (zh) * | 2019-09-27 | 2020-01-17 | 厦门市美亚柏科信息股份有限公司 | 数据恢复方法和装置 |
CN112052118A (zh) * | 2020-08-20 | 2020-12-08 | 厦门市美亚柏科信息股份有限公司 | 一种GlobalFs删除文件恢复方法和系统 |
CN112631993A (zh) * | 2020-12-28 | 2021-04-09 | 厦门市美亚柏科信息股份有限公司 | 一种基于jffs2文件系统的文件增删改痕迹分析方法及系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050144501A1 (en) * | 2003-12-02 | 2005-06-30 | Kim Jae G. | Method for recovering data in EXT2 file system, and computer-readable storage medium recorded with data-recovery program |
CN104199967A (zh) * | 2014-09-22 | 2014-12-10 | 广东欧珀移动通信有限公司 | 一种手机文件的恢复方法及装置 |
CN105095025A (zh) * | 2015-08-28 | 2015-11-25 | 小米科技有限责任公司 | 恢复ext文件系统中已删除文件的方法及装置 |
-
2018
- 2018-12-21 CN CN201811577588.1A patent/CN109857589B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050144501A1 (en) * | 2003-12-02 | 2005-06-30 | Kim Jae G. | Method for recovering data in EXT2 file system, and computer-readable storage medium recorded with data-recovery program |
CN104199967A (zh) * | 2014-09-22 | 2014-12-10 | 广东欧珀移动通信有限公司 | 一种手机文件的恢复方法及装置 |
CN105095025A (zh) * | 2015-08-28 | 2015-11-25 | 小米科技有限责任公司 | 恢复ext文件系统中已删除文件的方法及装置 |
Non-Patent Citations (1)
Title |
---|
沈长达等: "ReiserFS删除文件的恢复技术研究", 《信息网络安全》 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110704372A (zh) * | 2019-09-27 | 2020-01-17 | 厦门市美亚柏科信息股份有限公司 | 数据恢复方法和装置 |
CN110704372B (zh) * | 2019-09-27 | 2022-05-20 | 厦门市美亚柏科信息股份有限公司 | 数据恢复方法和装置 |
CN112052118A (zh) * | 2020-08-20 | 2020-12-08 | 厦门市美亚柏科信息股份有限公司 | 一种GlobalFs删除文件恢复方法和系统 |
CN112052118B (zh) * | 2020-08-20 | 2022-08-23 | 厦门市美亚柏科信息股份有限公司 | 一种GlobalFs删除文件恢复方法和系统 |
CN112631993A (zh) * | 2020-12-28 | 2021-04-09 | 厦门市美亚柏科信息股份有限公司 | 一种基于jffs2文件系统的文件增删改痕迹分析方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN109857589B (zh) | 2021-11-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100478946C (zh) | 用于文件系统快照持久性的方法和装置 | |
US7236992B2 (en) | Storage system | |
CN109857589A (zh) | 一种删除文件的恢复方法、装置及存储介质 | |
US20190108103A9 (en) | Computing device replication using file system change detection methods and systems | |
KR100877063B1 (ko) | 데이터를 관리하는 장치 및 방법 | |
CN108090168A (zh) | 一种通用f2fs文件系统解析方法、终端设备及存储介质 | |
JP5650982B2 (ja) | ファイルの重複を排除する装置及び方法 | |
JP2005027350A (ja) | 画像データのファイル管理システム、ファイル管理方法及び媒体並びに撮像装置 | |
US20130067237A1 (en) | Providing random access to archives with block maps | |
CN102331957B (zh) | 文件备份的方法及装置 | |
WO2020103493A1 (zh) | 基于fat32文件系统的删除文件恢复方法及系统 | |
TW201346601A (zh) | 與位置獨立之檔案 | |
WO2018040802A1 (zh) | 一种全镜像文件的生成方法及装置、计算机存储介质 | |
RU2715288C1 (ru) | Система и способ удаления файлов и противодействия их восстановлению | |
CN107783766A (zh) | 对应用程序的文件进行清理的方法和装置 | |
CN110019039B (zh) | 元数据分离的容器格式 | |
JP5399114B2 (ja) | ファイルサーバ運用支援装置、方法、プログラム及び記録媒体 | |
CN111176901B (zh) | 一种hdfs删除文件恢复方法、终端设备及存储介质 | |
CN104484402A (zh) | 一种删除重复数据的方法及装置 | |
CN112486966A (zh) | 一种过期数据清理方法、装置和电子设备 | |
JP4391983B2 (ja) | ファイルシステム経路処理装置及び方法 | |
CN109918346A (zh) | 一种文件的创建方法及装置 | |
CN111258503B (zh) | 一种cirros文件系统的管理方法和装置 | |
US8639676B2 (en) | Data library optimization | |
CN113282551B (zh) | 数据处理方法、系统及设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |