CN105740103B - 一种基于日志的ntfs删除文件恢复方法和装置 - Google Patents
一种基于日志的ntfs删除文件恢复方法和装置 Download PDFInfo
- Publication number
- CN105740103B CN105740103B CN201610073490.7A CN201610073490A CN105740103B CN 105740103 B CN105740103 B CN 105740103B CN 201610073490 A CN201610073490 A CN 201610073490A CN 105740103 B CN105740103 B CN 105740103B
- Authority
- CN
- China
- Prior art keywords
- record
- file
- offset
- page
- mft
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1415—Saving, restoring, recovering or retrying at system level
- G06F11/1435—Saving, restoring, recovering or retrying at system level using file system or storage system metadata
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1471—Saving, restoring, recovering or retrying involving logging of persistent data for recovery
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/182—Distributed file systems
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Library & Information Science (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明属于信息安全技术领域,具体涉及一种基于日志的NTFS删除文件恢复方法和装置。该方法通过分析MFT相关的日志信息并结合MFT自身信息,能够重组被覆盖的文件记录,从而更好的恢复出相应的删除文件。该方法解决现有技术方案在文件记录被覆盖情况下无法恢复的问题,使得NTFS删除文件的恢复技术得到进一步的完善。
Description
技术领域
本发明属于信息安全技术领域,具体涉及一种基于日志的NTFS删除文件恢复方法和装置。
背景技术
NTFS文件系统是windows操作系统下最主流使用、范围最广的文件系统,其删除文件的恢复技术在信息安全领域一直是一个备受关注的热点。目前,已有很多NTFS删除文件相关的技术资料和恢复软件,这些技术和软件都是基于MFT进行数据恢复。
参考专利文献CN100429628C公开了NTFS卷中重建目录结构和恢复数据的方法,该方法包括文件扫描过程和文件恢复过程,文件扫描过程主要是遍历磁盘的$MFT(主文件表文件),通过扫描MFT中的各种属性信息,得到全部文件的数据属性、文件路径、文件大小、文件各种时间等信息,并将这些信息记录在一个新建的文件信息表中,文件恢复过程主要是利用上述文件信息表,重新建立文件,恢复文件。
现有的NTFS恢复算法通过在MFT中查找删除文件的文件记录并解析达到恢复删除文件的目的。但是,由于操作系统会产生一些临时文件,很容易将删除后的文件记录覆盖。因此,采用基于MFT的恢复方法甚至无法恢复最近删除的一些文件。
发明内容
针对现有的NTFS删除文件恢复技术,不能处理文件记录被覆盖情况下的数据恢复,而传统的特征恢复又无法处理碎片文件的恢复。本发明提出了一种基于日志的NTFS删除文件恢复方法。该方法通过分析MFT相关的日志信息并结合MFT自身信息,能够重组被覆盖的文件记录,从而更好的恢复出相应的删除文件。该方法解决现有技术方案在文件记录被覆盖情况下无法恢复的问题,使得NTFS删除文件的恢复技术得到进一步的完善。
本发明采用如下技术方案:
一种基于日志的NTFS删除文件恢复方法,它包括以下步骤,
S1,解析NTFS卷头信息定位$MFT文件的位置,通过$MFT文件定位$LogFile文件的位置;
S2,解析$LogFile文件获取与$MFT文件操作相关的操作记录列表RS={R1,R2,R3,....,Rn},Ri包括日志序列号LSN、回滚类型undo_op_type、操作类型redo_op_type、操作后数据redo_data、操作后数据长度redo_length、操作目标位置target_pos、记录偏移record_offset和记录长度record_length,i=1,2,3,…,n;
S3,遍历$MFT中的文件记录结合解析到的操作记录列表RS进行删除文件的恢复。
进一步的,步骤S1中定位$MFT文件的位置包括以下步骤,
S101,解析NTFS卷头信息,获取$MFT文件的起始位置MFTstart;
S102,读取偏移MFTstart位置的文件记录信息,并做解析获取$MFT文件在分区中占用的区域范围列表DSm={D1,D2,D3,....,Dm},其中Di包括扇区偏移sectoroffseti和占用的扇区数setsectorcounti,i=1,2,3,…,m;
更进一步的,步骤S1中定位$LogFile文件的位置包括以下步骤,
S103,通过$MFT文件的区域范围列表DSm获取MFT号为2的文件记录的起始位置LogFile_RecordOffset;
S104,读取偏移LogFile_RecordOffset位置的文件记录信息并做解析获取$LogFile文件的区域范围列表DSL。
更进一步的,步骤S2具体包括以下步骤,
S201,当前解析的页号CURRENT_PAGE_NUM等于4,跨页数据长度CROSS_LENGTH等于0,操作记录在页中偏移RECORD_OFFSET等于0且根据$LogFile文件的区域范围列表DSL获取日志文件的总页数TOTAL_PAGE_COUNT;
S202,解析第CURRENT_PAGE_NUM页的头部,获取最后一个操作记录偏移last_record_offset;
S203,判断CURRENT_PAGE_NUM是否等于4,若CURRENT_PAGE_NUM等于4,将RECORD_OFFSET赋值为last_record_offset,若否则将RECORD_OFFSET赋值为CROSS_LENGTH+64;
S204,解析RECORD_OFFSET处的操作记录信息Ri,并设target_pos为操作记录的操作目标位置,判断相应操作目标位置即第target_pos个扇区是否属于DSm,若是则将Ri元素加入到操作记录列表RS中;
S205,判断RECORD_OFFSET是否等于last_record_offset,若否转到步骤S210,若是则继续下一步;
S206,判断RECORD_OFFSET+record_length是否大于4096,若否将CROSS_LENGTH赋值为0,若是则将CROSS_LENGTH赋值为RECORD_OFFSET+record_length-4096;
S207,判断是否第二次解析第4页,若是则结束,若否则CURRENT_PAGE_NUM=CURRETN_PAGE_NUM+1;
S208,判断CURRENT_PAGE_NUM是否等于TOTAL_PAGE_COUNT,若否则转到步骤S202,若是则将CURRENT_PAGE_NUM赋值为4;
S209,解析第CURRENT_PAGE_NUM页的头部,获取最后一个操作记录偏移last_record_offset,将RECORD_OFFSET赋值为CROSS_LENGTH+64,转到步骤S204;
S210,RECORD_OFFSET等于RECORD_OFFSET+record_length,转到步骤S204。
更进一步的,步骤S204中判断第target_pos个扇区是否属于DSm条件,
DSm是否存在一个元素Di满足target_pos大于等于sectoroffseti且n小于sectoroffseti加上setsectorcounti,存在则属于,否则不属于。更进一步的,
步骤S3包括以下步骤,
S301,当前MFT号CURRENT_FILERECORD_NUMBER等于24并根据$MFT文件的区域范围列表DSm获取总的文件记录数TOTAL_FILERECORD_COUNT;
S302,判断CURRENT_FILERECORD_NUMBER是否比TOTAL_FILERECORD_COUNT小,若否则结束,若是则继续下一步;
S303,判断CURRENT_FILE_RECORD_NUMBER对应的$MFT中的文件记录是否是具有删除的标识,若是则解析相应的文件记录并恢复删除的文件;
S304,根据$MFT文件的区域范围列表DSm计算出MFT号为CURRENT_FILE_RECORD_NUMBER的文件记录对应的扇区号SECTOR_NUM;
S305,在操作记录列表RS中查找target_pos为SECTOR_NUM的所有元素,得到新操作记录列表RSk={R1,R2,R3,....,Rk},k为新操作记录列表RSk元素总数,RSk中元素按照LSN从小到大或从大到小排序;
S306,从新操作记录列表RSk中的LSN最大的元素往前查找第一个undo_op_type等于3或者redo_op_type等于2的元素;
S307,若查找成功,查找到的元素为第i个元素,否则转到步骤S314;
S308,从新操作记录列表RSk中的第i个元素开始往前查找第一个undo_op_type等于2或者redo_op_type等于3的元素;
S309,若查找成功,假设查找到的元素为第j个元素,否则转到步骤S314;
S310,从新操作记录列表RSk中的第j个元素开始往前查找第一个redo_op_type等于2的元素;
S311,若查找成功,假设查找到的元素为第h个元素,否则转到步骤S314;
S312,设LPFILERECORD为一个文件记录块,针对新操作记录列表RSk中的第h到(j-1)个元素,按顺序将相应的redo_data数据应用到LPFILERECORD中;
S313,解析LPFILERECORD文件记录块并恢复删除的文件并将i赋值为h,转到步骤S308;
S314,CURRENT_FILE_RECORD_NUMBER的值加1转到步骤S302。
一种基于日志的NTFS删除文件恢复装置,它包括,
定位单元,用于解析NTFS卷头信息定位$MFT文件的位置,通过$MFT文件定位$LogFile文件的位置;
操作记录单元,用于解析$LogFile文件获取与$MFT文件操作相关的操作记录列表RS={R1,R2R3,....,Rn},Ri包括日志序列号LSN、回滚类型undo_op_type、操作类型redo_op_type、操作后数据redo_data、操作后数据长度redo_length、操作目标位置target_pos、记录偏移record_offset和记录长度record_length,i=1,2,3,…,n;
恢复单元,用于遍历$MFT中的文件记录结合解析到的操作记录列表RS进行删除文件的恢复。
进一步的,定位单元中定位$MFT文件的位置包括以下步骤,
S101,解析NTFS卷头信息,获取$MFT文件的起始位置MFTstart;
S102,读取偏移MFTstart位置的文件记录信息,并做解析获取$MFT文件在分区中占用的区域范围列表DSm={D1,D2,D3,....,Dm},其中Di包括扇区偏移sectoroffseti和占用的扇区数setsectorcounti,i=1,2,3,…,m。
更进一步的,定位单元中定位$LogFile文件的位置包括以下步骤,
S103,通过$MFT文件的区域范围列表DSm获取MFT号为2的文件记录的起始位置LogFile_RecordOffset;
S104,读取偏移LogFile_RecordOffset位置的文件记录信息并做解析获取$LogFile文件的区域范围列表DSL。
更进一步的,操作记录单元中获取与$MFT文件操作相关的操作记录列表RS具体包括以下步骤,
S201,当前解析的页号CURRENT_PAGE_NUM等于4,跨页数据长度CROSS_LENGTH等于0,操作记录在页中偏移RECORD_OFFSET等于0且根据$LogFile文件的区域范围列表DSL获取日志文件的总页数TOTAL_PAGE_COUNT;
S202,解析第CURRENT_PAGE_NUM页的头部,获取最后一个操作记录偏移last_record_offset;
S203,判断CURRENT_PAGE_NUM是否等于4,若CURRENT_PAGE_NUM等于4,将RECORD_OFFSET赋值为last_record_offset,若否则将RECORD_OFFSET赋值为CROSS_LENGTH+64;
S204,解析RECORD_OFFSET处的操作记录信息Ri,并设target_pos为操作记录的操作目标位置,判断相应操作目标位置即第target_pos个扇区是否属于DSm,若是则将Ri元素加入到操作记录列表RS中;
S205,判断RECORD_OFFSET是否等于last_record_offset,若否转到步骤S210,若是则继续下一步;
S206,判断RECORD_OFFSET+record_length是否大于4096,若否将CROSS_LENGTH赋值为0,若是则将CROSS_LENGTH赋值为RECORD_OFFSET+record_length-4096;
S207,判断是否第二次解析第4页,若是则结束,若否则CURRENT_PAGE_NUM=CURRETN_PAGE_NUM+1;
S208,判断CURRENT_PAGE_NUM是否等于TOTAL_PAGE_COUNT,若否则转到步骤S202,若是则将CURRENT_PAGE_NUM赋值为4;
S209,解析第CURRENT_PAGE_NUM页的头部,获取最后一个操作记录偏移last_record_offset,将RECORD_OFFSET赋值为CROSS_LENGTH+64,转到步骤S204;
S210,RECORD_OFFSET等于RECORD_OFFSET+record_length,转到步骤S204。
更进一步的,步骤S204中判断第target_pos个扇区是否属于DSm条件,
DSm是否存在一个元素Di满足target_pos大于等于sectoroffseti且n小于sectoroffseti加上setsectorcounti,存在则属于,否则不属于。
更进一步的,恢复单元中删除文件的恢复包括以下步骤,
S301,当前MFT号CURRENT_FILERECORD_NUMBER等于24并根据$MFT文件的区域范围列表DSm获取总的文件记录数TOTAL_FILERECORD_COUNT;
S302,判断CURRENT_FILERECORD_NUMBER是否比TOTAL_FILERECORD_COUNT小,若否则转到步骤S314,若是则继续下一步;
S303,判断CURRENT_FILE_RECORD_NUMBER对应的$MFT中的文件记录是否是具有删除的标识,若具有删除的标识则解析相应的文件记录并恢复删除的文件;
S304,根据$MFT文件的区域范围列表DSm计算出MFT号为CURRENT_FILE_RECORD_NUMBER的文件记录对应的扇区号SECTOR_NUM;
S305,在操作记录列表RS中查找target_pos为SECTOR_NUM的所有元素,得到新操作记录列表RSk={R1,R2,R3,....,Rk},k为新操作记录列表RSk元素总数,RSk中元素按照LSN从小到大或从大到小排序;
S306,从新操作记录列表RSk中的LSN最大的元素往前查找第一个undo_op_type等于3或者redo_op_type等于2的元素;
S307,若查找成功,查找到的元素为第i个元素,否则转到步骤S314;
S308,从新操作记录列表RSk中的第i个元素开始往前查找第一个undo_op_type等于2或者redo_op_type等于3的元素;
S309,若查找成功,假设查找到的元素为第j个元素,否则转到步骤S314;
S310,从新操作记录列表RSk中的第j个元素开始往前查找第一个redo_op_type等于2的元素;
S311,若查找成功,假设查找到的元素为第h个元素,否则转到步骤S314;
S312,设LPFILERECORD为一个文件记录块,针对新操作记录列表RSk中的第h到(j-1)个元素,按顺序将相应的redo_data数据应用到LPFILERECORD中;
S313,解析LPFILERECORD文件记录块并恢复删除的文件并将i赋值为h,转到步骤S308;
S314,CURRENT_FILE_RECORD_NUMBER的值加1转到步骤S302。
本发明提出了一种基于日志的NTFS删除文件恢复方法。该方法能够解决现有技术在文件记录被覆盖的情况下,无法恢复文件以及处理文件记录被覆盖多次的问题。经实验验证,该方法的恢复效果比现有恢复软件的效果更好。
附图说明
图1是基于日志的NTFS删除文件恢复方法的流程图;
图2是定位$MFT文件和$LogFile文件位置的流程图;
图3是获取与$MFT文件操作相关的操作记录列表的流程图;
图4是删除文件恢复的流程图;
图5是采用R-Studio软件对分区Z进行恢复的效果;
图6是采用本发明对分区Z进行恢复的效果。
具体实施方式
为进一步说明各实施例,本发明提供有附图。这些附图为本发明揭露内容的一部分,其主要用以说明实施例,并可配合说明书的相关描述来解释实施例的运作原理。配合参考这些内容,本领域普通技术人员应能理解其他可能的实施方式以及本发明的优点。图中的组件并未按比例绘制,而类似的组件符号通常用来表示类似的组件。
现结合附图和具体实施方式对本发明进一步说明。
本发明提出了一种基于日志的NTFS删除文件恢复方法,在该方法中包括以下定义:
1)、假设RS={R1,R2,R3,....,Rn}表示操作记录的列表。其中,列表中的每个元素Ri包含十个属性:日志序列号LSN、回滚类型undo_op_type、操作前数据undo_data、操作前数据长度undo_length、操作类型redo_op_type、操作后数据redo_data、操作后数据长度redo_length、操作目标位置target_pos(以扇区为单位)、记录偏移record_offset(以字节为单位相对于target_pos)、记录长度record_length。
2)、假设DS={D1,D2D3,....,Dn}表示一个文件在分区中占用的区域范围列表,该列表中的元素按对应区域在文件中的偏移从小到大排序。其中,列表中的每个元素Di包含两个属性:扇区偏移sectoroffset、占用的扇区数sectorcount。由于,文件可能存在碎片,因此一个文件占用的区域范围可能是一个列表,如果没有碎片则列表只有一个元素。
参阅图1所示,为一种基于日志的NTFS删除文件恢复方法的流程图。它包括以下步骤:
S1,解析NTFS卷头信息定位$MFT文件的位置,通过$MFT文件定位$LogFile文件的位置。
文件/文件夹被删除后,相应的元信息在$MFT只是做了标识并没有清除且$LogFile日志中也会记录相应的元信息改变情况。但$MFT和$LogFile属于系统元文件,无法像普通文件一样直接做访问,需要通过解析卷结构来获取两个文件在分区中占用的区域范围。$MFT和$LogFile文件的获取以及$LogFile文件操作记录的获取,是实现删除数据恢复的基础。
参阅图2所示,为定位$MFT文件和$LogFile文件位置的流程图。其中,$MFT文件的区域范围定位分为如下两个步骤:
S101,解析NTFS卷头信息,获取$MFT文件的起始位置MFTstart;
S102,读取偏移MFTstart位置的文件记录信息,并做解析获取$MFT文件在分区中占用的区域范围列表DSm,其中Di包括扇区偏移sectoroffseti和占用的扇区数setsectorcounti,i=1,2,3,…,m;
$LogFile文件的区域范围定位在DSm定位之后,包括以下步骤,
S103,通过$MFT文件的区域范围列表DSm获取MFT号为2的文件记录的起始位置LogFile_RecordOffset;
S104,读取偏移LogFile_RecordOffset位置的文件记录信息并做解析获取$LogFile文件的区域范围列表DSL。
$LogFile文件记录了文件的创建/删除/修改等信息,这些信息以操纵记录的形式存在日志文件中。由于,文件的元数据信息存在$MFT文件中,因此本文只解析与$MFT文件有关的操作记录。
S2,解析$LogFile文件获取与$MFT文件操作相关的操作记录列表RS。
参阅图3所示,为获取与$MFT文件操作相关的操作记录列表的流程图,具体包括以下步骤:
S201,当前解析的页号CURRENT_PAGE_NUM等于4,跨页数据长度CROSS_LENGTH等于0,操作记录在页中偏移RECORD_OFFSET等于0且根据$LogFile文件的区域范围列表DSL获取日志文件的总页数TOTAL_PAGE_COUNT。
S202,解析第CURRENT_PAGE_NUM页的头部,获取最后一个操作记录偏移last_record_offset。
S203,判断CURRENT_PAGE_NUM是否等于4,若CURRENT_PAGE_NUM等于4,将RECORD_OFFSET赋值为last_record_offset,若否则将RECORD_OFFSET赋值为CROSS_LENGTH+64。
S204,解析RECORD_OFFSET处的操作记录信息Ri,并设target_pos为操作记录的操作目标位置,判断相应操作目标位置即第target_pos个扇区是否属于DSm,若是则将Ri元素加入到操作记录列表RS中。
其中,判断第target_pos个扇区是否属于DSm条件,
DSm是否存在一个元素Di满足target_pos大于等于sectoroffseti且n小于sectoroffseti加上setsectorcounti,存在则属于,否则不属于。
S205,判断RECORD_OFFSET是否等于last_record_offset,若否转到步骤S210,若是则继续下一步。
S206,判断RECORD_OFFSET+record_length是否大于4096,若否将CROSS_LENGTH赋值为0,若是则将CROSS_LENGTH赋值为RECORD_OFFSET+record_length-4096。
S207,判断是否第二次解析第4页,若是则转到步骤S211,若否则CURRENT_PAGE_NUM=CURRETN_PAGE_NUM+1。
S208,判断CURRENT_PAGE_NUM是否等于TOTAL_PAGE_COUNT,若否则转到步骤S202,若是则将CURRENT_PAGE_NUM赋值为4。
S209,解析第CURRENT_PAGE_NUM页的头部,获取最后一个操作记录偏移last_record_offset,将RECORD_OFFSET赋值为CROSS_LENGTH+64,转到步骤S204。
S210,RECORD_OFFSET等于RECORD_OFFSET+record_length,转到步骤S204。
S211,对操作记录列表RS中的记录,按照LSN属性从小到大进行排序。
S3,遍历$MFT中的文件记录结合解析到的操作记录列表RS进行删除文件的恢复。
定位到$MFT文件和获取操作记录RS后,即可对$MFT和操作记录RS中的删除文件记录进行分析并恢复出删除的文件。参阅图4所示,为删除文件恢复的流程图。包括以下步骤,
S301,当前文件记录号即MFT号CURRENT_FILERECORD_NUMBER等于24并根据$MFT文件的区域范围列表DSm获取总的文件记录数TOTAL_FILERECORD_COUNT。
S302,判断CURRENT_FILERECORD_NUMBER是否比TOTAL_FILERECORD_COUNT小,若否则结束,若是则继续下一步。
S303,判断CURRENT_FILE_RECORD_NUMBER对应的$MFT中的文件记录是否是具有删除的标识,若是则解析相应的文件记录并恢复删除的文件。
S304,根据$MFT文件的区域范围列表DSm计算出MFT号为CURRENT_FILE_RECORD_NUMBER的文件记录对应的扇区号SECTOR_NUM。
S305,在操作记录列表RS中查找target_pos为SECTOR_NUM的所有元素,得到新操作记录列表RSk={R1,R2,R3,....,Rk},k为新操作记录列表RSk元素总数,RSk中元素按照LSN从小到大排序。由于RS里面元素按LSN从小到大排序过,因此按顺序查找RSk得到的目标元素序列也是按LSN从小到大排序的
S306,从新操作记录列表RSk中的LSN最大的元素(即第n个元素)往前查找第一个undo_op_type等于3或者redo_op_type等于2的元素。该查找顺序为从大到小查找。
S307,若查找成功,查找到的元素为第i个元素,否则转到步骤S314。
S308,从新操作记录列表RSk中的第i个元素开始往前查找第一个undo_op_type等于2或者redo_op_type等于3的元素。
S309,若查找成功,假设查找到的元素为第j个元素,否则转到步骤S314。
S310,从新操作记录列表RSk中的第j个元素开始往前查找第一个redo_op_type等于2的元素。
S311,若查找成功,假设查找到的元素为第h个元素,否则转到步骤S314。
S312,设LPFILERECORD为一个文件记录块(大小为1024字节),针对新操作记录列表RSk中的第h到(j-1)个元素,按顺序将相应的redo_data数据应用到LPFILERECORD中;针对RSk中的元素Rx,将Rx中的redo_data数据应用到LPFILERECORD中的过程为:将redo_data数据拷贝的LPFILERECORD数据块的record_offset位置,拷贝长度为redo_length。
S313,解析LPFILERECORD文件记录块并恢复删除的文件并将i赋值为h,转到步骤S308;
S314,CURRENT_FILE_RECORD_NUMBER的值加1转到步骤S302。
本发明还提出了一种基于日志的NTFS删除文件恢复装置,它包括,
定位单元,用于解析NTFS卷头信息定位$MFT文件的位置,通过$MFT文件定位$LogFile文件的位置;
操作记录单元,用于解析$LogFile文件获取与$MFT文件操作相关的操作记录列表RS={R1,R2R3,....,Rn},Ri包括日志序列号LSN、回滚类型undo_op_type、操作类型redo_op_type、操作后数据redo_data、操作后数据长度redo_length、操作目标位置target_pos、记录偏移record_offset和记录长度record_length,i=1,2,3,…,n;
恢复单元,用于遍历$MFT中的文件记录结合解析到的操作记录列表RS进行删除文件的恢复。
其中,定位单元中定位$MFT文件的位置包括以下步骤,
S101,解析NTFS卷头信息,获取$MFT文件的起始位置MFTstart;
S102,读取偏移MFTstart位置的文件记录信息,并做解析获取$MFT文件在分区中占用的区域范围列表DSm={D1,D2,D3,....,Dm},其中Di包括扇区偏移sectoroffseti和占用的扇区数setsectorcounti,i=1,2,3,…,m。
而定位单元中定位$LogFile文件的位置包括以下步骤,
S103,通过$MFT文件的区域范围列表DSm获取MFT号为2的文件记录的起始位置LogFile_RecordOffset;
S104,读取偏移LogFile_RecordOffset位置的文件记录信息并做解析获取$LogFile文件的区域范围列表DSL。
操作记录单元中获取与$MFT文件操作相关的操作记录列表RS具体包括以下步骤,
S201,当前解析的页号CURRENT_PAGE_NUM等于4,跨页数据长度CROSS_LENGTH等于0,操作记录在页中偏移RECORD_OFFSET等于0且根据$LogFile文件的区域范围列表DSL获取日志文件的总页数TOTAL_PAGE_COUNT;
S202,解析第CURRENT_PAGE_NUM页的头部,获取最后一个操作记录偏移last_record_offset;
S203,判断CURRENT_PAGE_NUM是否等于4,若CURRENT_PAGE_NUM等于4,将RECORD_OFFSET赋值为last_record_offset,若否则将RECORD_OFFSET赋值为CROSS_LENGTH+64;
S204,解析RECORD_OFFSET处的操作记录信息Ri,并设target_pos为操作记录的操作目标位置,判断相应操作目标位置即第target_pos个扇区是否属于DSm,若是则将Ri元素加入到操作记录列表RS中;
S205,判断RECORD_OFFSET是否等于last_record_offset,若否转到步骤S210,若是则继续下一步;
S206,判断RECORD_OFFSET+record_length是否大于4096,若否将CROSS_LENGTH赋值为0,若是则将CROSS_LENGTH赋值为RECORD_OFFSET+record_length-4096;
S207,判断是否第二次解析第4页,若是则结束,若否则CURRENT_PAGE_NUM=CURRETN_PAGE_NUM+1;
S208,判断CURRENT_PAGE_NUM是否等于TOTAL_PAGE_COUNT,若否则转到步骤S202,若是则将CURRENT_PAGE_NUM赋值为4;
S209,解析第CURRENT_PAGE_NUM页的头部,获取最后一个操作记录偏移last_record_offset,将RECORD_OFFSET赋值为CROSS_LENGTH+64,转到步骤S204;
S210,RECORD_OFFSET等于RECORD_OFFSET+record_length,转到步骤S204。
其中,步骤S204中判断第target_pos个扇区是否属于DSm条件,
DSm是否存在一个元素Di满足target_pos大于等于sectoroffseti且n小于sectoroffseti加上setsectorcounti,存在则属于,否则不属于。
恢复单元中删除文件的恢复包括以下步骤,
S301,当前MFT号CURRENT_FILERECORD_NUMBER等于24并根据$MFT文件的区域范围列表DSm获取总的文件记录数TOTAL_FILERECORD_COUNT;
S302,判断CURRENT_FILERECORD_NUMBER是否比TOTAL_FILERECORD_COUNT小,若否则转到步骤S314,若是则继续下一步;
S303,判断CURRENT_FILE_RECORD_NUMBER对应的$MFT中的文件记录是否是具有删除的标识,若具有删除的标识则解析相应的文件记录并恢复删除的文件;
S304,根据$MFT文件的区域范围列表DSm计算出MFT号为CURRENT_FILE_RECORD_NUMBER的文件记录对应的扇区号SECTOR_NUM;
S305,在操作记录列表RS中查找target_pos为SECTOR_NUM的所有元素,得到新操作记录列表RSk={R1,R2,R3,....,Rk},k为新操作记录列表RSk元素总数,RSk中元素按照LSN从小到大或从大到小排序;
S306,从新操作记录列表RSk中的LSN最大的元素往前查找第一个undo_op_type等于3或者redo_op_type等于2的元素;
S307,若查找成功,查找到的元素为第i个元素,否则转到步骤S314;
S308,从新操作记录列表RSk中的第i个元素开始往前查找第一个undo_op_type等于2或者redo_op_type等于3的元素;
S309,若查找成功,假设查找到的元素为第j个元素,否则转到步骤S314;
S310,从新操作记录列表RSk中的第j个元素开始往前查找第一个redo_op_type等于2的元素;
S311,若查找成功,假设查找到的元素为第h个元素,否则转到步骤S314;
S312,设LPFILERECORD为一个文件记录块,针对新操作记录列表RSk中的第h到(j-1)个元素,按顺序将相应的redo_data数据应用到LPFILERECORD中;
S313,解析LPFILERECORD文件记录块并恢复删除的文件并将i赋值为h,转到步骤S308;
S314,CURRENT_FILE_RECORD_NUMBER的值加1转到步骤S302。
本发明的发明人做了如下实验,实验过程为:
1)新建一个NTFS的格式的分区Z;
2)往分区Z中拷贝两个文件夹名称为“文档”和“图片”,其中两个文件夹中各包含若干文件;
3)删除文件夹“图片”;
4)往分区Z中拷贝一个文件夹,名称为“测试数据”;
5)采用本发明和R-Studio(V7.5)软件对Z分区做数据恢复并进行结果的对比。
参阅图5所示,为采用R-Studio软件对分区Z进行恢复的效果,参阅图6所示,为采用本发明对分区Z进行恢复的效果。
从实验结果可得,本发明的恢复效果较R-Studio软件好。原因分析:新加入一个“测试数据”文件夹以及文件夹中文件对应的文件记录覆盖了“图片”文件夹以及文件夹中文件的文件记录,而现有恢复软件在文件记录被覆盖的情况下无法恢复。
尽管结合优选实施方案具体展示和介绍了本发明,但所属领域的技术人员应该明白,在不脱离所附权利要求书所限定的本发明的精神和范围内,在形式上和细节上可以对本发明做出各种变化,均为本发明的保护范围。
Claims (10)
1.一种基于日志的NTFS删除文件恢复方法,其特征在于:它包括以下步骤,
S1,解析NTFS卷头信息定位$MFT文件的位置,通过$MFT文件定位$LogFile文件的位置;
S2,解析$LogFile文件获取与$MFT文件操作相关的操作记录列表RS={R1,R2,R3,....,Rn},Ri包括日志序列号LSN、回滚类型undo_op_type、操作类型redo_op_type、操作后数据redo_data、操作后数据长度redo_length、操作目标位置target_pos、记录偏移record_offset和记录长度record_length,i=1,2,3,…,n;
步骤S2具体包括以下步骤:
S201,当前解析的页号CURRENT_PAGE_NUM等于4,跨页数据长度CROSS_LENGTH等于0,操作记录在页中偏移RECORD_OFFSET等于0且根据$LogFile文件的区域范围列表DSL获取日志文件的总页数TOTAL_PAGE_COUNT;
S202,解析第CURRENT_PAGE_NUM页的头部,获取最后一个操作记录偏移last_record_offset;
S203,判断CURRENT_PAGE_NUM是否等于4,若CURRENT_PAGE_NUM等于4,将RECORD_OFFSET赋值为last_record_offset,若否则将RECORD_OFFSET赋值为CROSS_LENGTH+64;
S204,解析RECORD_OFFSET处的操作记录信息Ri,并设target_pos为操作记录的操作目标位置,判断相应操作目标位置即第target_pos个扇区是否属于DSm,若是则将Ri元素加入到操作记录列表RS中;
S205,判断RECORD_OFFSET是否等于last_record_offset,若否转到步骤S210,若是则继续下一步;
S206,判断RECORD_OFFSET+record_length是否大于4096,若否将CROSS_LENGTH赋值为0,若是则将CROSS_LENGTH赋值为RECORD_OFFSET+record_length-4096;
S207,判断是否第二次解析第4页,若是则结束,若否则CURRENT_PAGE_NUM=CURRETN_PAGE_NUM+1;
S208,判断CURRENT_PAGE_NUM是否等于TOTAL_PAGE_COUNT,若否则转到步骤S202,若是则将CURRENT_PAGE_NUM赋值为4;
S209,解析第CURRENT_PAGE_NUM页的头部,获取最后一个操作记录偏移last_record_offset,将RECORD_OFFSET赋值为CROSS_LENGTH+64,转到步骤S204;
S210,RECORD_OFFSET等于RECORD_OFFSET+record_length,转到步骤S204;
S3,遍历$MFT中的文件记录并结合解析到的操作记录列表RS进行删除文件的恢复。
2.如权利要求1所述的基于日志的NTFS删除文件恢复方法,其特征在于:所述步骤S1中定位$MFT文件的位置包括以下步骤,
S101,解析NTFS卷头信息,获取$MFT文件的起始位置MFTstart;
S102,读取偏移MFTstart位置的文件记录信息,并做解析获取$MFT文件在分区中占用的区域范围列表DSm={D1,D2,D3,....,Dm},其中Di包括扇区偏移sectoroffseti和占用的扇区数setsectorcounti,i=1,2,3,…,m。
3.如权利要求2所述的基于日志的NTFS删除文件恢复方法,其特征在于:所述步骤S1中定位$LogFile文件的位置包括以下步骤,
S103,通过$MFT文件的区域范围列表DSm获取MFT号为2的文件记录的起始位置LogFile_RecordOffset;
S104,读取偏移LogFile_RecordOffset位置的文件记录信息并做解析获取$LogFile文件的区域范围列表DSL。
4.如权利要求3所述的基于日志的NTFS删除文件恢复方法,其特征在于:所述步骤S204中判断第target_pos个扇区是否属于DSm条件,
DSm是否存在一个元素Di满足target_pos大于等于sectoroffseti且n小于sectoroffseti加上setsectorcounti,存在则属于,否则不属于。
5.如权利要求3所述的基于日志的NTFS删除文件恢复方法,其特征在于:所述步骤S3包括以下步骤,
S301,当前MFT号CURRENT_FILERECORD_NUMBER等于24并根据$MFT文件的区域范围列表DSm获取总的文件记录数TOTAL_FILERECORD_COUNT;
S302,判断CURRENT_FILERECORD_NUMBER是否比TOTAL_FILERECORD_COUNT小,若否则结束,若是则继续下一步;
S303,判断CURRENT_FILE_RECORD_NUMBER对应的$MFT中的文件记录是否是具有删除的标识,若是则解析相应的文件记录并恢复删除的文件;
S304,根据$MFT文件的区域范围列表DSm计算出MFT号为CURRENT_FILE_RECORD_NUMBER的文件记录对应的扇区号SECTOR_NUM;
S305,在操作记录列表RS中查找target_pos为SECTOR_NUM的所有元素,得到新操作记录列表RSk={R1,R2,R3,....,Rk},k为新操作记录列表RSk元素总数,RSk中元素按照LSN从小到大或从大到小排序;
S306,从新操作记录列表RSk中的LSN最大的元素往前查找第一个undo_op_type等于3或者redo_op_type等于2的元素;
S307,若查找成功,查找到的元素为第i个元素,否则转到步骤S314;
S308,从新操作记录列表RSk中的第i个元素开始往前查找第一个undo_op_type等于2或者redo_op_type等于3的元素;
S309,若查找成功,假设查找到的元素为第j个元素,否则转到步骤S314;
S310,从新操作记录列表RSk中的第j个元素开始往前查找第一个redo_op_type等于2的元素;
S311,若查找成功,假设查找到的元素为第h个元素,否则转到步骤S314;
S312,设LPFILERECORD为一个文件记录块,针对新操作记录列表RSk中的第h到(j-1)个元素,按顺序将相应的redo_data数据应用到LPFILERECORD中;
S313,解析LPFILERECORD文件记录块并恢复删除的文件并将i赋值为h,转到步骤S308;
S314,CURRENT_FILE_RECORD_NUMBER的值加1转到步骤S302。
6.一种基于日志的NTFS删除文件恢复装置,其特征在于:它包括,
定位单元,用于解析NTFS卷头信息定位$MFT文件的位置,通过$MFT文件定位$LogFile文件的位置;
操作记录单元,用于解析$LogFile文件获取与$MFT文件操作相关的操作记录列表RS={R1,R2R3,....,Rn},Ri包括日志序列号LSN、回滚类型undo_op_type、操作类型redo_op_type、操作后数据redo_data、操作后数据长度redo_length、操作目标位置target_pos、记录偏移record_offset和记录长度record_length,i=1,2,3,…,n;
所述操作记录单元执行获取与$MFT文件操作相关的操作记录列表RS具体包括以下步骤:
S201,当前解析的页号CURRENT_PAGE_NUM等于4,跨页数据长度CROSS_LENGTH等于0,操作记录在页中偏移RECORD_OFFSET等于0且根据$LogFile文件的区域范围列表DSL获取日志文件的总页数TOTAL_PAGE_COUNT;
S202,解析第CURRENT_PAGE_NUM页的头部,获取最后一个操作记录偏移last_record_offset;
S203,判断CURRENT_PAGE_NUM是否等于4,若CURRENT_PAGE_NUM等于4,将RECORD_OFFSET赋值为last_record_offset,若否则将RECORD_OFFSET赋值为CROSS_LENGTH+64;
S204,解析RECORD_OFFSET处的操作记录信息Ri,并设target_pos为操作记录的操作目标位置,判断相应操作目标位置即第target_pos个扇区是否属于DSm,若是则将Ri元素加入到操作记录列表RS中;
S205,判断RECORD_OFFSET是否等于last_record_offset,若否转到步骤S210,若是则继续下一步;
S206,判断RECORD_OFFSET+record_length是否大于4096,若否将CROSS_LENGTH赋值为0,若是则将CROSS_LENGTH赋值为RECORD_OFFSET+record_length-4096;
S207,判断是否第二次解析第4页,若是则结束,若否则CURRENT_PAGE_NUM=CURRETN_PAGE_NUM+1;
S208,判断CURRENT_PAGE_NUM是否等于TOTAL_PAGE_COUNT,若否则转到步骤S202,若是则将CURRENT_PAGE_NUM赋值为4;
S209,解析第CURRENT_PAGE_NUM页的头部,获取最后一个操作记录偏移last_record_offset,将RECORD_OFFSET赋值为CROSS_LENGTH+64,转到步骤S204;
S210,RECORD_OFFSET等于RECORD_OFFSET+record_length,转到步骤S204;
恢复单元,用于遍历$MFT中的文件记录结合解析到的操作记录列表RS进行删除文件的恢复。
7.如权利要求6所述的基于日志的NTFS删除文件恢复装置,其特征在于:所述定位单元执行定位$MFT文件的位置包括以下步骤,
S101,解析NTFS卷头信息,获取$MFT文件的起始位置MFTstart;
S102,读取偏移MFTstart位置的文件记录信息,并做解析获取$MFT文件在分区中占用的区域范围列表DSm={D1,D2,D3,....,Dm},其中Di包括扇区偏移sectoroffseti和占用的扇区数setsectorcounti,i=1,2,3,…,m。
8.如权利要求7所述的基于日志的NTFS删除文件恢复装置,其特征在于:所述定位单元执行定位$LogFile文件的位置包括以下步骤,
S103,通过$MFT文件的区域范围列表DSm获取MFT号为2的文件记录的起始位置LogFile_RecordOffset;
S104,读取偏移LogFile_RecordOffset位置的文件记录信息并做解析获取$LogFile文件的区域范围列表DSL。
9.如权利要求8所述的基于日志的NTFS删除文件恢复装置,其特征在于:所述步骤S204中判断第target_pos个扇区是否属于DSm条件,
DSm是否存在一个元素Di满足target_pos大于等于sectoroffseti且n小于sectoroffseti加上setsectorcounti,存在则属于,否则不属于。
10.如权利要求8所述的基于日志的NTFS删除文件恢复装置,其特征在于:所述恢复单元执行删除文件的恢复包括以下步骤,
S301,当前MFT号CURRENT_FILERECORD_NUMBER等于24并根据$MFT文件的区域范围列表DSm获取总的文件记录数TOTAL_FILERECORD_COUNT;
S302,判断CURRENT_FILERECORD_NUMBER是否比TOTAL_FILERECORD_COUNT小,若否则转到步骤S314,若是则继续下一步;
S303,判断CURRENT_FILE_RECORD_NUMBER对应的$MFT中的文件记录是否是具有删除的标识,若具有删除的标识则解析相应的文件记录并恢复删除的文件;
S304,根据$MFT文件的区域范围列表DSm计算出MFT号为CURRENT_FILE_RECORD_NUMBER的文件记录对应的扇区号SECTOR_NUM;
S305,在操作记录列表RS中查找target_pos为SECTOR_NUM的所有元素,得到新操作记录列表RSk={R1,R2,R3,....,Rk},k为新操作记录列表RSk元素总数,RSk中元素按照LSN从小到大或从大到小排序;
S306,从新操作记录列表RSk中的LSN最大的元素往前查找第一个undo_op_type等于3或者redo_op_type等于2的元素;
S307,若查找成功,查找到的元素为第i个元素,否则转到步骤S314;
S308,从新操作记录列表RSk中的第i个元素开始往前查找第一个undo_op_type等于2或者redo_op_type等于3的元素;
S309,若查找成功,假设查找到的元素为第j个元素,否则转到步骤S314;
S310,从新操作记录列表RSk中的第j个元素开始往前查找第一个redo_op_type等于2的元素;
S311,若查找成功,假设查找到的元素为第h个元素,否则转到步骤S314;
S312,设LPFILERECORD为一个文件记录块,针对新操作记录列表RSk中的第h到(j-1)个元素,按顺序将相应的redo_data数据应用到LPFILERECORD中;
S313,解析LPFILERECORD文件记录块并恢复删除的文件并将i赋值为h,转到步骤S308;
S314,CURRENT_FILE_RECORD_NUMBER的值加1转到步骤S302。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610073490.7A CN105740103B (zh) | 2016-02-02 | 2016-02-02 | 一种基于日志的ntfs删除文件恢复方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610073490.7A CN105740103B (zh) | 2016-02-02 | 2016-02-02 | 一种基于日志的ntfs删除文件恢复方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105740103A CN105740103A (zh) | 2016-07-06 |
CN105740103B true CN105740103B (zh) | 2018-10-09 |
Family
ID=56244771
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610073490.7A Active CN105740103B (zh) | 2016-02-02 | 2016-02-02 | 一种基于日志的ntfs删除文件恢复方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105740103B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107748705B (zh) * | 2017-11-08 | 2020-04-14 | 厦门市美亚柏科信息股份有限公司 | 系统evt日志碎片恢复的方法、终端设备及存储介质 |
CN109918231B (zh) * | 2019-02-28 | 2021-02-26 | 上海达梦数据库有限公司 | 数据重整的异常修复方法、装置、设备和存储介质 |
CN110334065B (zh) * | 2019-07-11 | 2022-02-11 | 中国联合网络通信集团有限公司 | 一种文件处理方法和系统 |
CN112486734B (zh) * | 2020-12-17 | 2024-09-17 | 深圳软牛科技集团股份有限公司 | 一种ntfs删除文件恢复方法、装置及电子设备 |
CN112486924A (zh) * | 2020-12-17 | 2021-03-12 | 深圳软牛科技有限公司 | 一种ntfs中查找文件删除时间的方法、装置及电子设备 |
CN112631838B (zh) * | 2020-12-31 | 2024-06-28 | 深圳软牛科技有限公司 | 一种NTFS中office文件恢复方法、装置及电子设备 |
CN112733187B (zh) * | 2021-01-11 | 2022-10-11 | 重庆邮电大学 | 一种基于时间属性的数字取证分析鉴别方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102693387A (zh) * | 2012-06-01 | 2012-09-26 | 北京理工大学 | 一种ntfs文件系统的数据擦除方法 |
CN104199909A (zh) * | 2014-08-28 | 2014-12-10 | 上海爱数软件有限公司 | VMware场景中恢复NTFS高级加密文件的方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090094698A1 (en) * | 2007-10-09 | 2009-04-09 | Anthony Lynn Nichols | Method and system for efficiently scanning a computer storage device for pestware |
-
2016
- 2016-02-02 CN CN201610073490.7A patent/CN105740103B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102693387A (zh) * | 2012-06-01 | 2012-09-26 | 北京理工大学 | 一种ntfs文件系统的数据擦除方法 |
CN104199909A (zh) * | 2014-08-28 | 2014-12-10 | 上海爱数软件有限公司 | VMware场景中恢复NTFS高级加密文件的方法 |
Non-Patent Citations (1)
Title |
---|
Windows下数据恢复的研究;龚勇;《中国优秀硕士学位论文全文数据库 信息科技辑》;20090430(第04期);正文第69页第1段-76页第1段 * |
Also Published As
Publication number | Publication date |
---|---|
CN105740103A (zh) | 2016-07-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105740103B (zh) | 一种基于日志的ntfs删除文件恢复方法和装置 | |
US10108544B1 (en) | Dynamic duplication estimation for garbage collection | |
US7401080B2 (en) | Storage reports duplicate file detection | |
CN101369276B (zh) | 一种Web浏览器缓存数据的取证方法 | |
CN104199888B (zh) | 弹性文件系统的数据恢复方法和装置 | |
US8271456B2 (en) | Efficient backup data retrieval | |
CN106598785A (zh) | 文件系统备份与还原的方法及装置 | |
US10769025B2 (en) | Indexing a relationship structure of a filesystem | |
RU2006110525A (ru) | Устройство управления файлами, способ управления файлами, программа способа управления файлами и носитель записи, на котором записана программа способа управления файлами | |
CN109726177A (zh) | 一种基于HBase的海量文件分区索引方法 | |
JP2009048377A (ja) | ファイル差分管理装置、ファイル差分管理方法、及びファイル差分管理プログラム | |
CN102012896B (zh) | 一种实现文件内容批量修改的方法和装置 | |
Laurenson | Performance analysis of file carving tools | |
US20140244582A1 (en) | Apparatus and Methods for Selective Location and Duplication of Relevant Data | |
CN103177022A (zh) | 一种恶意文件搜索方法及装置 | |
CN105068885A (zh) | 一种jpg碎片文件恢复与重组的方法 | |
CN106095808B (zh) | 一种mdb文件碎片恢复的方法和装置 | |
CN111176901B (zh) | 一种hdfs删除文件恢复方法、终端设备及存储介质 | |
CN106126375B (zh) | 一种基于Hash的YAFFS2文件各版本恢复方法 | |
CN113986838B (zh) | 基于文件系统的海量小文件处理方法、系统及存储介质 | |
CN102194071B (zh) | 基于时域的数据取证及交叉分析方法 | |
CN108021472A (zh) | ReFS文件系统的格式化恢复方法及存储介质 | |
Naiqi et al. | Computer forensics research and implementation based on NTFS file system | |
Chen et al. | A novel data recovery algorithm for fat32 file system | |
CN105718334B (zh) | 基于特征的多个文件提取方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |