CN112463736B - 一种用于apfs文件的恢复方法和系统 - Google Patents

一种用于apfs文件的恢复方法和系统 Download PDF

Info

Publication number
CN112463736B
CN112463736B CN202011461709.3A CN202011461709A CN112463736B CN 112463736 B CN112463736 B CN 112463736B CN 202011461709 A CN202011461709 A CN 202011461709A CN 112463736 B CN112463736 B CN 112463736B
Authority
CN
China
Prior art keywords
data
file
threadrecord
fdi
information
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.)
Active
Application number
CN202011461709.3A
Other languages
English (en)
Other versions
CN112463736A (zh
Inventor
沈长达
杜新胜
黄志炜
叶景
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Xiamen Meiya Pico Information Co Ltd
Original Assignee
Xiamen Meiya Pico Information Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Xiamen Meiya Pico Information Co Ltd filed Critical Xiamen Meiya Pico Information Co Ltd
Priority to CN202011461709.3A priority Critical patent/CN112463736B/zh
Publication of CN112463736A publication Critical patent/CN112463736A/zh
Application granted granted Critical
Publication of CN112463736B publication Critical patent/CN112463736B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/13File access structures, e.g. distributed indices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1446Point-in-time backing up or restoration of persistent data
    • G06F11/1448Management of the data involved in backup or backup restore
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/16File or folder operations, e.g. details of user interfaces specifically adapted to file systems

Abstract

本发明给出了一种用于APFS文件的恢复方法和系统,包括解析获取APFS文件信息块的叶子节点信息集合;获取叶子节点信息集合中空闲数据区域集合,并依照叶子节点在B‑Tree树中的位置从左至右排序;响应于空闲数据区域集合中还有未获取元素,获取一元素并对元素指向的区域数据进行ThreadRecord数据区域检测,并检测与ThreadRecord数据配对的DataIndexRecord数据区域;响应于一数据索引的数据大小与已构建数据索引集合中所有数据大小之和不大于文件大小,将数据索引的信息添加至已构建数据索引集合中生成对应文件的数据索引信息集合;根据ThreadRecord数据以及对应文件的数据索引信息集合恢复删除文件。该方法为APFS删除文件的快速恢复提供了解决方案。

Description

一种用于APFS文件的恢复方法和系统
技术领域
本发明涉及计算机取证安全的技术领域,尤其是一种用于APFS文件的恢复方法和系统。
背景技术
APFS作为苹果公司最新的文件系统,凭借着优秀的性能被广泛的应用到了新一代的苹果电脑、苹果手机等电子设备上。在电子数据取证行业,苹果设备的取证是当前关注的重点,而作为苹果系统的文件管理系统APFS,则更是取证过程中需要重点解析的对象,APFS文件系统能否做深入的解析和恢复直接影响到了取证深入程度。由于APFS文件被删除时,对应的元数据索引信息会丢失且元数据处于零散分布的状态,导致无法像NTFS这类文件系统直接通过获取标识过的文件记录进行恢复,整体恢复的难度大大增加,目前尚未有快速恢复的手段。
发明内容
为了解决现有技术中尚未有快速恢复被删除的APFS文件的技术问题,本发明提出了一种用于APFS文件的恢复方法和系统,能够快速发现元数据离散碎片信息,并基于该方法实现了APFS删除文件的快速恢复。
根据本发明的一个方面,提出了一种用于APFS文件的恢复方法,包括:
S1:解析获取APFS文件信息块的叶子节点信息集合;
S2:获取叶子节点信息集合中空闲数据区域集合,并依照叶子节点在B-Tree树中的位置从左至右排序;
S3:响应于空闲数据区域集合中还有未获取元素,获取一元素并对元素指向的区域数据进行ThreadRecord数据区域检测,并检测与ThreadRecord数据配对的DataIndexRecord数据区域;
S4:响应于一数据索引的数据大小与已构建数据索引集合中所有数据大小之和不大于文件大小,将数据索引的信息添加至已构建数据索引集合中生成对应文件的数据索引信息集合;以及
S5:根据ThreadRecord数据以及对应文件的数据索引信息集合恢复删除文件。
在一些具体的实施例中,ThreadRecord数据包括描述文件的名称、时间、FileID和ParentFileID大小,DataIndexRecord数据包括描述文件的数据存储位置,包含起始块位置和长度信息。利用两部分的关键数据作为文件恢复的突破口,可以利用其推算属于同个删除文件的源数据碎片信息,进行文件恢复。
在一些具体的实施例中,步骤S2中空闲数据区域集合的获取方法为:
B-Tree树中所有文件信息块叶子节点中空闲的数据区域集合表示为FDATA={fdata1,fdata2…fdatam},fdata={freedata1,freedata2,…,freedatan-1}表示为一个文件信息块节点中空闲的数据区域集合,集合中的每个元素均包含空闲数据偏移FreeDataOffseti、空闲数据长度FreeDataLenthi,其计算方式如下:
FreeDataOffseti=DataOffseti+DataLenthi
FreeDataLenthi=DataOffseti+1-FreeDataOffseti
其中,DataOffseti为数据偏移,DataLenthi为数据长度。
在一些具体的实施例中,步骤S3中的ThreadRecord数据区域检测具体包括:
ThreadRecord数据区域被空闲数据区域集合中的元素freedataij所指向,并且基于ThreadRecord结构对相应区域进行解析获取文件FileID、ParentID、文件名称、文件大小、文件占用大小、文件创建时间、文件修改时间、文件访问时间以及文件节点修改时间,并满足以下条件:
FileID小于下一叶子节点信息集合中第1个元素的FileID;
ParentID必须等于当前叶子节点信息集合中第j个元素的ParentID;
文件节点修改时间大于文件访问时间;
文件节点修改时间mod 1000000000不等于0。
在一些具体的实施例中,步骤S3中的与ThreadRecord数据配对的DataIndexRecord
数据区域的判断条件包括:
DataIndexRecordj区域和ThreadRecordi数据区域被同一个空闲数据区域集合fdata集合所指向;
不存在其他任何被同一个fdata集合所指向的ThreadRecordk数据区域离DataIndexRecordj更近;
按照DataIndexRecord结构对相应区域进行解析获取数据块号BlockNumber以及数据大小DataSize,并且解析结果需同时满足DataSize mod 4096等于0和DataSize/文件大小小于等于1。
在一些具体的实施例中,步骤S4中数据索引的添加具体包括:
响应于一个数据索引(BlockNume,DataSize)满足如下公式:
Figure BDA0002832011370000031
添加到文件的数据索引集合FDI中生成{fdi1,fdi2…fdik,fdii+1}新集合,其中fdii+1为(BlockNume,DataSize),已构建的数据索引集合为FDI={fdi1,fdi2…fdik},FileSize为文件大小。
在一些具体的实施例中,依照从左到右的顺序添加相应的数据索引信息生成对应文件的数据索引信息集合。与B-Tree树按自左向右的顺序添加数据索引以对应叶子节点信息集合的控线数据区域集合,便于快速恢复删除文件。
根据本发明的第二方面,提出了一种计算机可读存储介质,其上存储有一或多个计算机程序,其特征在于,该一或多个计算机程序被计算机处理器执行时实施上述的方法。
根据本发明的第三方面,提出了一种用于APFS文件的恢复系统,系统包括:
解析单元:配置用于解析获取APFS文件信息块的叶子节点信息集合;
空闲区域集合获取单元:配置用于获取叶子节点信息集合中空闲数据区域集合,并依照叶子节点在B-Tree树中的位置从左至右排序;
检测单元:配置用于响应于空闲数据区域集合中还有未获取元素,获取一元素并对元素指向的区域数据进行ThreadRecord数据区域检测,并检测与ThreadRecord数据配对的DataIndexRecord数据区域;
索引信息生成单元:响应于一数据索引的数据大小与已构建数据索引集合中所有数据大小之和不大于文件大小,将数据索引的信息添加至已构建数据索引集合中生成对应文件的数据索引信息集合;
文件恢复单元:配置用于根据ThreadRecord数据以及对应文件的数据索引信息集合恢复删除文件。
在一些具体的实施例中,ThreadRecord数据包括描述文件的名称、时间、FileID和ParentFileID大小,DataIndexRecord数据包括描述文件的数据存储位置,包含起始块位置和长度信息。
在一些具体的实施例中,空闲区域集合获取单元中空闲数据区域集合的获取方法为:
B-Tree树中所有文件信息块叶子节点中空闲的数据区域集合表示为FDATA={fdata1,fdata2…fdatam},fdata={freedata1,freedata2,…,freedatan-1}表示为一个文件信息块节点中空闲的数据区域集合,集合中的每个元素均包含空闲数据偏移FreeDataOffseti、空闲数据长度FreeDataLenthi,其计算方式如下:
FreeDataOffseti=DataOffseti+DataLenthi
FreeDataLenthi=DataOffseti+1-FreeDataOffseti
其中,DataOffseti为数据偏移,DataLenthi为数据长度。
在一些具体的实施例中,检测单元中ThreadRecord数据区域检测具体包括:
ThreadRecord数据区域被空闲数据区域集合中的元素freedataij所指向,并且基于ThreadRecord结构对相应区域进行解析获取文件FileID、ParentID、文件名称、文件大小、文件占用大小、文件创建时间、文件修改时间、文件访问时间以及文件节点修改时间,并满足以下条件:
FileID小于下一叶子节点信息集合中第1个元素的FileID;
ParentID必须等于当前叶子节点信息集合中第j个元素的ParentID;
文件节点修改时间大于文件访问时间;
文件节点修改时间mod 1000000000不等于0。
在一些具体的实施例中,检测单元中的与ThreadRecord数据配对的DataIndexRecord
数据区域的判断条件包括:
DataIndexRecordj区域和ThreadRecordi数据区域被同一个空闲数据区域集合fdata集合所指向;
不存在其他任何被同一个fdata集合所指向的ThreadRecordk数据区域离DataIndexRecordj更近;
按照DataIndexRecord结构对相应区域进行解析获取数据块号BlockNumber以及数据大小DataSize,并且解析结果需同时满足DataSize mod 4096等于0和DataSize/文件大小小于等于1。
在一些具体的实施例中,索引信息生成单元中数据索引的添加具体包括:
响应于一个数据索引(BlockNume,DataSize)满足如下公式:
Figure BDA0002832011370000041
添加到文件的数据索引集合FDI中生成{fdi1,fdi2…fdik,fdii+1}新集合,其中fdii+1为(BlockNume,DataSize),已构建的数据索引集合为FDI={fdi1,fdi2…fdik},FileSize为文件大小。
在一些具体的实施例中,依照从左到右的顺序添加相应的数据索引信息生成对应文件的数据索引信息集合。
本发明在对APFS文件系统结构了解和做大量测试的基础上,提出了一种APFS文件系统删除文件快速恢复方法,该方法基于正常文件系统解析得出块节点中空闲数据区域,通过一系列算法规则识别出块节点空闲区域中用于描述文件名称、大小以及时间的ThreadRecord结构信息,并基于该信息结合B-Tree树关键字(节点ID)的分布特性,反推算出相应的关键字区域从而获得了属于同个删除文件的元数据碎片信息,进一步实现了删除文件的恢复,为APFS删除文件的快速恢复提供了解决方案,对电子数据取证及数据具有重大的意义。
附图说明
包括附图以提供对实施例的进一步理解并且附图被并入本说明书中并且构成本说明书的一部分。附图图示了实施例并且与描述一起用于解释本发明的原理。将容易认识到其它实施例和实施例的很多预期优点,因为通过引用以下详细描述,它们变得被更好地理解。通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1是本申请的一个实施例的APFS文件的块头结构图;
图2是本申请的一个实施例的APFS文件信息节点块图;
图3是本申请的一个实施例的用于APFS文件的恢复方法的流程图;
图4是本申请的一个具体的实施例的用于APFS文件的恢复方法的流程图;
图5是本申请的一个具体的实施例的利用APFS文件的恢复方法的恢复效果图;
图6是本申请的一个实施例的用于APFS文件的恢复系统的框架图;
图7是适于用来实现本申请实施例的电子设备的计算机系统的结构示意图。
具体实施方式
下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关发明,而非对该发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与有关发明相关的部分。
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
根据本申请的一个实施例的用于APFS文件的恢复方法,图1示出了根据本申请的实施例的实施例的APFS文件的块头结构图。如图1所示,APFS文件系统的最小存储单位为块,一个块的大小为4096个字节。非文件数据块每个块都以一个32字节的块头开始,之后紧跟相应的块数据。块头主要有四部分组成,包括块校验值、块ID、块版本以及块类型。根据不同的块类型,块数据存储的内容标识不同的意义。APFS文件系统主要有以下几个类型的块:容器块、文件信息节点块、空间管理块、分配信息块以及卷超级块等。其中,文件信息节点块存储文件的文件名、文件大小、文件时间以及常驻压缩数据等属性信息,文件信息节点块的块类型等于0x03。APFS每个文件(含文件夹)都有唯一对应的文件FileID。为了方便快速检索查找,文件信息节点块以B-Tree树的形式进行存储管理,其中B-Tree树的组织以FileID作为关键字,而最终的文件元数据存储在B-Tree树的叶子节点中。文件信息节点块由块头、节点头、入口表以及入口数据组成,其中入口数据由关键数据(含关键字)和数据两部分组成。
图2示出了根据本申请的实施例的APFS文件信息节点块图,如图2所示,一个文件信息节点块如果在B-Tree树种处于叶子节点,则该节点用于描述文件的元信息,且一个文件信息节点块可以包含多个文件信息。一个文件的元信息需要由多个入口数据组成,且每个入口数据由入口表的信息完成入口关键数据和数据两部分数据的意义匹配,即通过入口表信息可以获取KeyOffset(关键数据偏移)、KeyLenth(关键数据长度)、DataOffset(数据偏移)、DataLenth(数据长度)。当文件被删除时,入口表对应数据会被清空,导致删除文件数据无法获取和匹配,这也是恢复碰到的难题。
文件元信息被存储成多个入口数据,最重要的入口数据有两个,Thread Record入口以及DataIndexRecord入口。ThreadRecord入口用于描述文件的名称、时间(包含创建、修改、访问、节点修改,8个字节)、FileID、ParentFileID(父节点ID)大小等信息;DataIndexRecord则用于描述文件的数据存储位置,包含起始块位置和长度信息。DataIndexRecord用于描述文件数据区域,包括文件数据块号BlockNumber以及数据大小DataSize。
继续参考图3,图3示出了根据本申请的实施例的用于APFS文件的恢复方法的流程图,如图3所示,该方法包括以下步骤:
S301:解析获取APFS文件信息块的叶子节点信息集合。
S302:获取叶子节点信息集合中空闲数据区域集合,并依照叶子节点在B-Tree树中的位置从左至右排序。
在具体的实施例中,B-Tree树中所有文件信息块叶子节点中空闲的数据区域集合表示为FDATA={fdata1,fdata2…fdatam},fdata={freedata1,freedata2,…,freedatan-1}表示为一个文件信息块节点中空闲的数据区域集合,集合中的每个元素均包含空闲数据偏移FreeDataOffseti、空闲数据长度FreeDataLenthi,其计算方式如下:
FreeDataOffseti=DataOffseti+DataLenthi
FreeDataLenthi=DataOffseti+1-FreeDataOffseti
其中,DataOffseti为数据偏移,DataLenthi为数据长度。
S303:响应于空闲数据区域集合中还有未获取元素,获取一元素并对元素指向的区域数据进行ThreadRecord数据区域检测,并检测与ThreadRecord数据配对的DataIndexRecord数据区域。
在具体的实施例中,ThreadRecord数据区域被空闲数据区域集合中的元素freedataij所指向,并且基于ThreadRecord结构对相应区域进行解析获取文件FileID、ParentID、文件名称、文件大小、文件占用大小、文件创建时间、文件修改时间、文件访问时间以及文件节点修改时间,并满足以下条件:
FileID小于下一叶子节点信息集合中第1个元素的FileID;
ParentID必须等于当前叶子节点信息集合中第j个元素的ParentID;
文件节点修改时间大于文件访问时间;
文件节点修改时间mod 1000000000不等于0。
在具体的实施例中,DataIndexRecord数据区域的判断条件包括:
DataIndexRecordj区域和ThreadRecordi数据区域被同一个空闲数据区域集合fdata集合所指向;
不存在其他任何被同一个fdata集合所指向的ThreadRecordk数据区域离DataIndexRecordj更近;
按照DataIndexRecord结构对相应区域进行解析获取数据块号BlockNumber以及数据大小DataSize,并且解析结果需同时满足DataSize mod 4096等于0和DataSize/文件大小小于等于1。
S304:响应于一数据索引的数据大小与已构建数据索引集合中所有数据大小之和不大于文件大小,将数据索引的信息添加至已构建数据索引集合中生成对应文件的数据索引信息集合。依照从左到右的顺序添加相应的数据索引信息生成对应文件的数据索引信息集合,便于
在具体的实施例中,响应于一个数据索引(BlockNume,DataSize)满足如下公式:
Figure BDA0002832011370000071
添加到文件的数据索引集合FDI中生成{fdi1,fdi2…fdik,fdii+1}新集合,其中fdii+1为(BlockNume,DataSize),已构建的数据索引集合为FDI={fdi1,fdi2…fdik},FileSize为文件大小。
S305:根据ThreadRecord数据以及对应文件的数据索引信息集合恢复删除文件。
继续参考图4,图4示出了根据本发明的一个具体的实施例的用于APFS文件的恢复方法的流程图,如图4所示,该方法包括以下步骤:
S401:根据APFS文件系统结构解析获取文件信息块叶子节点信息集合ET。
在具体的实施例中,假设et={entry1,entry2…,entryn}表示一个文件信息块节点包含的入口信息集合,其中集合中的每个元素entry1包含KeyOffseti(关键数据偏移)、KeyLenthi(关键数据长度)、DataOffseti(数据偏移)、DataLenthi(数据长度)、FileIDi(所属文件ID)以及ParentFileIDi(父节点ID)六个属性信息。
S402:基于ET集合结合“文件信息块节点空闲数据区域获取规则”生成FDATA集合。
在具体的实施例中,文件信息块节点空闲数据区域获取规则如下:假设fdata={freedata1,freedata2,…,freedatan-1}表示一个文件信息块节点中空闲的数据区域集合,集合中的每个元素freedatai包含FreeDataOffseti(空闲数据偏移)、FreeDataLenthi(空闲数据长度)两个属性信息,其值的计算方法如下:
①FreeDataOffseti=DataOffseti+DataLenthi
②FreeDataLenthi=DataOffseti+1-FreeDataOffseti
假设ET={et1,et2,…etm}表示B-Tree树中所有文件信息块叶子节点信息的集合,假设FDATA={fdata1,fdata2…fdatam}表示B-Tree树种所有文件信息块叶子节点中空闲的数据区域集合,且顺序按照节点在B-Tree树中的位置从左到右进行排序;
S403:判断FDATA是否还有未获取的元素。如果有则进入步骤S404,否则结束。
S404:获取一个元素,根据“ThreadRecord数据区域判断规则”在元素所指区域获取对应的ThreadRecord数据区域。
在具体的实施例中,ThreadRecord数据区域判断规则(适用于删除文件ThreadRecord数据区域判断)。当一块数据区域满足以下条件时,则判定该数据区域是ThreadRecord数据区域:
①该区域必须被FDATA中的元素所指向;
②假设被FDATA中的fdatai元素的freedataij所指向,则按照ThreadRecord结构对相应区域进行解析获取文件FileID、ParentID、文件名称、文件大小、文件占用大小、文件创建时间、文件修改时间、文件访问时间以及文件节点修改时间等信息。解析结果需同时满足以下条件:
a)FileID必须小于eti+1集合中第1个元素FileID;
b)ParentID必须等于eti集合中第j个元素的ParentID;
c)文件节点修改时间必须大于文件访问时间;
d)文件节点修改时间mod1000000000必须不等于0。
S405:判断是否未获取到。如未获取ThreadRecord数据区域,返回步骤S403,如获取到ThreadRecord数据区域,则进入步骤S406。
S406:根据“与ThreadRecordi配对的DataIndexRecordj数据区域判断规则”检测ThreadRecord配对的DataIndexRecord数据区域。
在具体的实施例中,与ThreadRecordi配对的DataIndexRecordj数据区域判断规则(适用于删除文件DataIndexRecord数据区域判断)。当一块数据区域同时满足以下条件时,则判定该数据区域是DataIndexRecordj数据且与ThreadRecordi配对:
①DataIndexRecordj区域必须和ThreadRecordi数据区域被同一个fdata集合所指向;
②不存在其他任何被同一个fdata集合所指向的ThreadRecordk数据区域离DataIndexRecordj更近;
③按照DataIndexRecord结构对相应区域进行解析获取数据块号BlockNumber以及数据大小DataSize。解析结果需同时满足以下条件:
a)DataSize mod 4096必须等于0;
b)DataSize/文件大小(对应ThreadRecordi对应区域的解析结果)必须小于等于1。
S407:根据“数据索引添加判断规则”结合配对的DataIndexRecord数据区域生成文件数据索引FDI。
在具体的实施例中,数据索引添加判断规则为:假设FDI={fdi1,fdi2…fdin}表示一个文件的数据索引信息结合,其中结合中的每个元素fdii包含两个元素FileDataBlockNumberi(块号)和FileDataSizei(大小);假设File1文件大小为FileSize,已经构建的数据索引集合为FDI={fdi1,fdi2…fdik},则一个数据索引(BlockNume,DataSize)当满足以下条件时,可被添加到File1的数据索引集合FDI中生成{fdi1,fdi2…fdik,fdii+1}新集合,其中fdii+1为(BlockNume,DataSize)。具体条件如下:
Figure BDA0002832011370000091
S408:根据ThreadRecord信息以及FDI信息恢复删除文件。重复进行步骤S403直至不存在未获取的元素。
上述方法中入口数据ThreadRecord和DataIndexRecord两部分数据是恢复的关键,在文件被删除时由于入口表信息被清空,导致两个关键入口数据无法索引和对应,恢复是个难题。因此,要实现恢复需要实现在没有入口表实现两个关键入口数据的获取并且做对应,本发明通过一系列的算法和规则识别出了ThreadRecord关键数据,并基于该信息结合B-Tree树关键字的分布特性,反推算出相应的关键数据区域从而获得了属于同个删除文件的元数据碎片信息,达到了文件恢复的目的。
APFS作为苹果最新的文件系统,当前被广泛的应用到苹果电脑、苹果手机等各类电子设备上。由于,该文件系统元数据信息的碎片化存储且删除文件之后元数据索引信息丢失,当前缺乏能够快速对删除文件进行恢复的手段。在对APFS文件系统结构了解和做大量测试的基础上,提出了一种用于APFS文件的恢复方法,该方法通过一系列算法规则识别节点空闲区域中用于描述文件名称、大小以及时间的Thread Record结构信息,并基于该结构实现了其他元数据碎片信息的获取,从而达到删除文件的恢复。该方法为APFS删除文件的快速恢复提供了解决方案,填补了国内外APFS删除文件快速恢复技术方面的空白,对电子数据取证及数据具有重大的意义。为验证上述方法,本申请发明人做了相应的实验,实验过程为:新建一个APFS的格式的分区,拷贝两个JPG图片文件到分区中;删除分区底下的两个图片后,使用上述文方法进行恢复,结果如图5所示。
继续参考图6,图6示出了根据本发明的实施例的一种用于APFS文件的恢复系统的框架图。该系统具体包括解析单元601、空闲区域集合获取单元602、检测单元603、索引信息生成单元604和文件恢复单元605。
在具体的实施例中,解析单元601配置用于解析获取APFS文件信息块的叶子节点信息集合;空闲区域集合获取单元602配置用于获取叶子节点信息集合中空闲数据区域集合,并依照叶子节点在B-Tree树中的位置从左至右排序;检测单元603配置用于响应于空闲数据区域集合中还有未获取元素,获取一元素并对元素指向的区域数据进行ThreadRecord数据区域检测,并检测与ThreadRecord数据配对的DataIndexRecord数据区域;索引信息生成单元604响应于一数据索引的数据大小与已构建数据索引集合中所有数据大小之和不大于文件大小,将数据索引的信息添加至已构建数据索引集合中生成对应文件的数据索引信息集合;文件恢复单元605配置用于根据ThreadRecord数据以及对应文件的数据索引信息集合恢复删除文件。
下面参考图7,其示出了适于用来实现本申请实施例的电子设备的计算机系统700的结构示意图。图7示出的电子设备仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图7所示,计算机系统700包括中央处理单元(CPU)701,其可以根据存储在只读存储器(ROM)702中的程序或者从存储部分708加载到随机访问存储器(RAM)703中的程序而执行各种适当的动作和处理。在RAM 703中,还存储有系统700操作所需的各种程序和数据。CPU 701、ROM 702以及RAM 703通过总线704彼此相连。输入/输出(I/O)接口705也连接至总线704。
以下部件连接至I/O接口705:包括键盘、鼠标等的输入部分706;包括诸如液晶显示器(LCD)等以及扬声器等的输出部分707;包括硬盘等的存储部分708;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分709。通信部分709经由诸如因特网的网络执行通信处理。驱动器710也根据需要连接至I/O接口705。可拆卸介质711,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器710上,以便于从其上读出的计算机程序根据需要被安装入存储部分708。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读存储介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分709从网络上被下载和安装,和/或从可拆卸介质711被安装。在该计算机程序被中央处理单元(CPU)701执行时,执行本申请的方法中限定的上述功能。需要说明的是,本申请的计算机可读存储介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读存储介质,该计算机可读存储介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读存储介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本申请的操作的计算机程序代码,程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本申请实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。
作为另一方面,本申请还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中描述的电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。上述计算机可读存储介质承载有一个或者多个程序,当上述一个或者多个程序被该电子设备执行时,使得该电子设备:解析获取APFS文件信息块的叶子节点信息集合;获取叶子节点信息集合中空闲数据区域集合,并依照叶子节点在B-Tree树中的位置从左至右排序;响应于空闲数据区域集合中还有未获取元素,获取一元素并对元素指向的区域数据进行ThreadRecord数据区域检测,并检测与ThreadRecord数据配对的DataIndexRecord数据区域;响应于一数据索引的数据大小与已构建数据索引集合中所有数据大小之和不大于文件大小,将数据索引的信息添加至已构建数据索引集合中生成对应文件的数据索引信息集合;根据ThreadRecord数据以及对应文件的数据索引信息集合恢复删除文件。
以上描述仅为本申请的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本申请中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本申请中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。

Claims (13)

1.一种用于APFS文件的恢复方法,其特征在于,包括:
S1:解析获取所述APFS文件的信息块的叶子节点信息集合;
S2:获取所述叶子节点信息集合中空闲数据区域集合,并依照所述叶子节点在B-Tree树中的位置从左至右排序;
S3:响应于所述空闲数据区域集合中还有未获取元素,获取一元素并对所述元素指向的区域数据进行ThreadRecord数据区域检测,并检测与ThreadRecord数据配对的DataIndexRecord数据区域;
S4:响应于一数据索引的数据大小与已构建数据索引集合中所有数据大小之和不大于文件大小,将数据索引的信息添加至所述已构建数据索引集合中生成对应文件的数据索引信息集合;以及
S5:根据所述ThreadRecord数据以及所述对应文件的数据索引信息集合恢复删除文件;
其中,ThreadRecord数据区域检测具体包括:
所述ThreadRecord数据区域被所述空闲数据区域集合中的元素freedataij所指向,并且基于ThreadRecord结构对相应区域进行解析获取文件FileID、ParentID、文件名称、文件大小、文件占用大小、文件创建时间、文件修改时间、文件访问时间以及文件节点修改时间,并满足以下条件:
FileID小于下一叶子节点信息集合中第1个元素的FileID;
ParentID必须等于当前叶子节点信息集合中第j个元素的ParentID;
文件节点修改时间大于文件访问时间;
文件节点修改时间mod 1000000000不等于0。
2.根据权利要求1所述的用于APFS文件的恢复方法,其特征在于,所述ThreadRecord数据包括描述文件的名称、时间、FileID和ParentID大小,DataIndexRecord数据包括描述文件的数据存储位置,包含起始块位置和长度信息。
3.根据权利要求1所述的用于APFS文件的恢复方法,其特征在于,步骤S2中所述空闲数据区域集合的获取方法为:
B-Tree树中所有文件信息块叶子节点中空闲的数据区域集合表示为FDATA={fdata1,fdata2…fdatam},fdata={freedata1,freedata2,…,freedatan-1}表示为一个文件信息块节点中空闲的数据区域集合,集合中的每个元素均包含空闲数据偏移FreeDataOffseti、空闲数据长度FreeDataLenthi,其计算方式如下:
FreeDataOffseti=DataOffseti+DataLenthi
FreeDataLenthi=DataOffseti+1-FreeDataOffseti
其中,DataOffseti为数据偏移,DataLenthi为数据长度。
4.根据权利要求1所述的用于APFS文件的恢复方法,其特征在于,步骤S3中的与ThreadRecord数据配对的DataIndexRecord数据区域的判断条件包括:
DataIndexRecordj区域和ThreadRecordi数据区域被同一个空闲数据区域集合fdata集合所指向;
不存在其他任何被同一个fdata集合所指向的ThreadRecordk数据区域离DataIndexRecordj更近;
按照DataIndexRecord结构对相应区域进行解析获取数据块号BlockNumber以及数据大小DataSize,并且解析结果需同时满足DataSize mod 4096等于0和DataSize/文件大小小于等于1。
5.根据权利要求1所述的用于APFS文件的恢复方法,其特征在于,步骤S4中数据索引的添加具体包括:
响应于一个数据索引(BlockNume,DataSize)满足如下公式:
Figure FDA0003592273200000021
添加到文件的数据索引集合FDI中生成{fdi1,fdi2…fdik,fdii+1}新集合,其中fdii+1为(BlockNume,DataSize),已构建的数据索引集合为FDI={fdi1,fdi2…fdik},FileSize为文件大小。
6.根据权利要求1或5所述的用于APFS文件的恢复方法,其特征在于,依照从左到右的顺序添加相应的数据索引信息生成所述对应文件的数据索引信息集合。
7.一种计算机可读存储介质,其上存储有一或多个计算机程序,其特征在于,该一或多个计算机程序被计算机处理器执行时实施权利要求1至6中任一项所述的方法。
8.一种用于APFS文件的恢复系统,其特征在于,所述系统包括:
解析单元:配置用于解析获取所述APFS文件的信息块的叶子节点信息集合;
空闲区域集合获取单元:配置用于获取所述叶子节点信息集合中空闲数据区域集合,并依照所述叶子节点在B-Tree树中的位置从左至右排序;
检测单元:配置用于响应于所述空闲数据区域集合中还有未获取元素,获取一元素并对所述元素指向的区域数据进行ThreadRecord数据区域检测,并检测与ThreadRecord数据配对的DataIndexRecord数据区域;
索引信息生成单元:配置用于响应于一数据索引的数据大小与已构建数据索引集合中所有数据大小之和不大于文件大小,将数据索引的信息添加至所述已构建数据索引集合中生成对应文件的数据索引信息集合;
文件恢复单元:配置用于根据所述ThreadRecord数据以及所述对应文件的数据索引信息集合恢复删除文件;
其中,ThreadRecord数据区域检测具体包括:
所述ThreadRecord数据区域被所述空闲数据区域集合中的元素freedataij所指向,并且基于ThreadRecord结构对相应区域进行解析获取文件FileID、ParentID、文件名称、文件大小、文件占用大小、文件创建时间、文件修改时间、文件访问时间以及文件节点修改时间,并满足以下条件:
FileID小于下一叶子节点信息集合中第1个元素的FileID;
ParentID必须等于当前叶子节点信息集合中第j个元素的ParentID;
文件节点修改时间大于文件访问时间;
文件节点修改时间mod 1000000000不等于0。
9.根据权利要求8所述的用于APFS文件的恢复系统,其特征在于,所述ThreadRecord数据包括描述文件的名称、时间、FileID和ParentID大小,DataIndexRecord数据包括描述文件的数据存储位置,包含起始块位置和长度信息。
10.根据权利要求8所述的用于APFS文件的恢复系统,其特征在于,所述空闲区域集合获取单元中所述空闲数据区域集合的获取方法为:
B-Tree树中所有文件信息块叶子节点中空闲的数据区域集合表示为FDATA={fdata1,fdata2…fdatam},fdata={freedata1,freedata2,…,freedatan-1}表示为一个文件信息块节点中空闲的数据区域集合,集合中的每个元素均包含空闲数据偏移FreeDataOffseti、空闲数据长度FreeDataLenthi,其计算方式如下:
FreeDataOffseti=DataOffseti+DataLenthi
FreeDataLenthi=DataOffseti+1-FreeDataOffseti
其中,DataOffseti为数据偏移,DataLenthi为数据长度。
11.根据权利要求8所述的用于APFS文件的恢复系统,其特征在于,所述检测单元中的与ThreadRecord数据配对的DataIndexRecord数据区域的判断条件包括:
DataIndexRecordj区域和ThreadRecordi数据区域被同一个空闲数据区域集合fdata集合所指向;
不存在其他任何被同一个fdata集合所指向的ThreadRecordk数据区域离DataIndexRecordj更近;
按照DataIndexRecord结构对相应区域进行解析获取数据块号BlockNumber以及数据大小DataSize,并且解析结果需同时满足DataSize mod 4096等于0和DataSize/文件大小小于等于1。
12.根据权利要求8所述的用于APFS文件的恢复系统,其特征在于,所述索引信息生成单元中数据索引的添加具体包括:
响应于一个数据索引(BlockNume,DataSize)满足如下公式:
Figure FDA0003592273200000041
添加到文件的数据索引集合FDI中生成{fdi1,fdi2…fdik,fdii+1}新集合,其中fdii+1为(BlockNume,DataSize),已构建的数据索引集合为FDI={fdi1,fdi2…fdik},FileSize为文件大小。
13.根据权利要求8或12所述的用于APFS文件的恢复系统,其特征在于,依照从左到右的顺序添加相应的数据索引信息生成所述对应文件的数据索引信息集合。
CN202011461709.3A 2020-12-11 2020-12-11 一种用于apfs文件的恢复方法和系统 Active CN112463736B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011461709.3A CN112463736B (zh) 2020-12-11 2020-12-11 一种用于apfs文件的恢复方法和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011461709.3A CN112463736B (zh) 2020-12-11 2020-12-11 一种用于apfs文件的恢复方法和系统

Publications (2)

Publication Number Publication Date
CN112463736A CN112463736A (zh) 2021-03-09
CN112463736B true CN112463736B (zh) 2022-05-20

Family

ID=74803996

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011461709.3A Active CN112463736B (zh) 2020-12-11 2020-12-11 一种用于apfs文件的恢复方法和系统

Country Status (1)

Country Link
CN (1) CN112463736B (zh)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104199888A (zh) * 2014-08-25 2014-12-10 厦门市美亚柏科信息股份有限公司 弹性文件系统的数据恢复方法和装置
CN110232004A (zh) * 2019-06-13 2019-09-13 深圳麦风科技有限公司 一种apfs文件系统数据恢复方法
CN110309019A (zh) * 2019-07-02 2019-10-08 四川效率源信息安全技术股份有限公司 一种快速恢复并提取apfs中删除文件的方法
CN111143130A (zh) * 2019-12-25 2020-05-12 腾讯科技(深圳)有限公司 数据恢复方法、装置、计算机可读存储介质和计算机设备

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10140189B2 (en) * 2015-04-28 2018-11-27 International Business Machines Corporation Database recovery and index rebuilds
CN108062357B (zh) * 2017-11-28 2020-09-08 厦门市美亚柏科信息股份有限公司 F2fs文件系统的删除文件恢复方法及存储介质
CN110569147B (zh) * 2019-09-05 2022-06-07 厦门市美亚柏科信息股份有限公司 一种基于索引的删除文件恢复方法、终端设备及存储介质

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104199888A (zh) * 2014-08-25 2014-12-10 厦门市美亚柏科信息股份有限公司 弹性文件系统的数据恢复方法和装置
CN110232004A (zh) * 2019-06-13 2019-09-13 深圳麦风科技有限公司 一种apfs文件系统数据恢复方法
CN110309019A (zh) * 2019-07-02 2019-10-08 四川效率源信息安全技术股份有限公司 一种快速恢复并提取apfs中删除文件的方法
CN111143130A (zh) * 2019-12-25 2020-05-12 腾讯科技(深圳)有限公司 数据恢复方法、装置、计算机可读存储介质和计算机设备

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
HFS+删除文件恢复技术;沈长达等;《信息网络安全》;20130831(第8期);第63-66页 *

Also Published As

Publication number Publication date
CN112463736A (zh) 2021-03-09

Similar Documents

Publication Publication Date Title
CN110489345B (zh) 一种崩溃聚合方法、装置、介质和设备
US20050210054A1 (en) Information management system
US10972569B2 (en) Apparatus, method, and computer program product for heterogenous compression of data streams
CN108733317B (zh) 数据存储方法和装置
CN109492127A (zh) 数据处理方法、装置、介质和计算设备
CN114168540A (zh) 文件索引信息处理方法、装置、电子设备及存储介质
US10423495B1 (en) Deduplication grouping
CN113553300A (zh) 文件的处理方法、装置、可读介质和电子设备
US20110145242A1 (en) Intelligent Redistribution of Data in a Database
CN110895548B (zh) 用于处理信息的方法和装置
CN110704432A (zh) 数据索引的建立方法和装置、可读存储介质、电子设备
CN111198861A (zh) 逻辑日志的处理方法、装置及电子设备
CN113918659A (zh) 数据操作方法、装置、存储介质及电子设备
CN111104259B (zh) 一种数据库恢复方法、装置及存储介质
CN112463736B (zh) 一种用于apfs文件的恢复方法和系统
CN112579364B (zh) 一种基于qnx6fs文件系统的删除文件深度恢复方法和装置
CN112052118B (zh) 一种GlobalFs删除文件恢复方法和系统
CN112163127B (zh) 关系图谱构建方法、装置、电子设备及存储介质
CN111698330B (zh) 存储集群的数据恢复方法、装置及服务器
CN110674224B (zh) 实体数据的处理方法、装置、设备及计算机可读存储介质
CN113780042A (zh) 图片集操作方法、图片集标注方法和装置
CN113760600A (zh) 一种数据库备份方法、数据库还原方法和相关装置
CN111291230A (zh) 特征处理方法、装置、电子设备及计算机可读存储介质
CN117539538B (zh) 程序说明文档生成方法、装置、电子设备和可读介质
CN113407375B (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