基于存储特征的Oracle数据文件恢复软件的设计

2012-04-24 10:37徐国天
中国刑警学院学报 2012年1期
关键词:数据文件状态机扇区

徐国天

(中国刑警学院 计算机犯罪侦查系 辽宁 沈阳 110854)

基于存储特征的Oracle数据文件恢复软件的设计

徐国天

(中国刑警学院 计算机犯罪侦查系 辽宁 沈阳 110854)

本文研究了通过$Bitmap元文件确定NTFS硬盘分区空闲空间的方法,设计了可以统计硬盘分区空闲空间的状态机。研究了根据存储特征在硬盘分区空闲空间内搜索Oracle数据块的方法,设计了可以识别Oracle数据块的状态机。研究了数据块恢复模块的设计方法,设计了数据块恢复的链表存储结构。本文设计的恢复软件可以根据Oracle数据块的存储特征最大限度地提取分布在硬盘分区空闲空间上的数据块碎片,将这些数据块组合成一个数据文件,再利用自行开发的检验软件从中检验出有效的数据记录。

OracleNTFS $Bitmap 数据块 恢复

目前Oracle数据库以其强大的功能、稳定的表现成为各大公司、企事业单位、大型网站的首选数据库软件。Oracle数据库具备多个独立的数据文件,例如system01.dbf文件,数据库中所有的数据记录均保存在这些数据文件中。犯罪分子为了逃避法律的制裁,可能会将数据文件删除或直接格式化硬盘。由于被删除的数据文件并没有真正从硬盘消失,通常情况下可以使用恢复软件 (如:Final Data、EasyRecovery)来恢复这些被删除的数据文件。但是随着嫌疑人计算机的使用,硬盘上“被删除”数据文件的部分内容可能被“其它文件”覆盖,同时某些恢复数据所必须的关键信息(如:$MFT元文件中的信息)也可能遭到破坏,这些因素将导致恢复操作失败;即使恢复出部分数据,也会因为数据文件内容的残缺,而无法正常查看。因此最大限度地恢复“被删除”的数据文件,从恢复出的残缺数据文件中准确提取数据记录对公安机关的电子数据检验工作至关重要。

本文开发的Oralce数据文件恢复软件可以根据Oracle数据块的存储特征最大限度地提取分布在硬盘分区上的数据块碎片,然后将这些数据块组合成一个文件,再利用自行开发的检验软件从中检验出有效的数据记录。

1 根据$Bitmap元文件确定NTFS硬盘分区的空闲空间

NTFS文件系统的元文件$Bitmap记录了硬盘分区的使用情况,该元文件中每个二进制位代表硬盘分区中一个簇的使用情况,1表示占用、0表示空闲。课题的开发思路是首先通过BPB参数表定位$Bitmap元文件,通过扫描$Bitmap元文件可以快速标识出硬盘中的所有空闲空间。然后在硬盘分区空闲空间中根据存储特征寻找被删除的Oracle数据文件碎片,将它们重新整合成一个原始文件。下面分析通过BPB参数表定位$Bitmap元文件的方法。

1.1 通过BPB参数表定位$Bitmap元文件记录

NTFS硬盘分区的BPB参数表位于硬盘分区的第一个扇区,其中保存了重要的信息。图1是某个NTFS硬盘分区的BPB参数表,0-10字节记录了硬盘格式描述,3-6字节保存的是“NTFS”的ASCII码,通过读取这个数值可以确定硬盘分区类型为NTFS。11-12字节表示每扇区字节个数,0x0200表示每扇区512字节。第13字节是每簇扇区个数,本例为0x08,即每簇8个扇区、4096字节。40-47字节表示硬盘分区的扇区总数,本例为0x0000000004E1E7FF,即共81913855个扇区,可以计算出这个硬盘分区的大小约为39.06GB。48-55字节为$MFT元文件的起始逻辑簇号,本例为0x000C0000,即第786432簇。$MFT是NTFS文件系统第一个元文件记录,其它14个元文件记录在其后依次存放,$Bitmap是其中的第7个元文件记录,每个元文件记录占用1024字节,因此$Bitmap元文件记 录 的 存 储 位 置 是 786432×4096+6× 1024=3221250048,在该位置可以定位$Bitmap元文件记录。

图1 BPB参数表

1.2 通过$Bitmap元文件记录定位位图数据

$Bitmap元文件的位图数据记录了硬盘分区的占用情况,通过$Bitmap元文件记录可以定位位图数据。下面以图2为例分析$Bitmap元文件记录结构。$Bitmap元文件记录由头部结构(0-55字节)、标准属性(56-151字节)、文件名属性(152-255字节)、数据流属性(256-327字节)组成,其中数据流属性可以定位位图数据,下面详细分析这个属性。

图2 $Bitmap元文件记录

数据流属性从第256字节位置开始,长度为72字节。1-4字节是属性类型,0x80代表这是数据流属性。5-8字节为属性长度,本例为0x48,即72字节。第9字节是长驻标志,本例为0x01,表示数据流属性非长驻。第17-24字节表示起始VCN,第25-32字节表示结束VCN,本例起始VCN是0,结束VCN是312,即这个$Bitmap元文件的位图数据占用313簇,即313×4096=1282048字节,每个字节含8个二进制位,一个二进制位记录一簇的使用情况,因此位图数据共可记录1282048×8=10256384簇的使用情况,即可以表示39.125GB硬盘空间的使用情况。这个数值一定略大于BPB参数表看到的硬盘分区大小。第40-47字节是位图数据占用空间大小,本例为0x139000,即1282048字节,这个数值与我们之前的计算结果相同。

第65-72字节是数据运行属性,通过这个属性可以定位位图数据,本例为0x32 39 01 C5 FE 0B。其中第一个字节0x32中的3表示后面5个字节中的后3个字节是数据运行的起始簇号,本例为0x 0B FE C5,即786117。第一个字节0x32中的2表示后面5个字节中的前2个字节是数据运行的大小,本例为0x 01 39,即313簇。从而可知位图数据的起始簇号为 786117,结束簇号为786117+312=786429。这个$Bitmap元文件的位图数据是连续存放的,因此只占用一个数据运行。

如果文件数据是不连续存放的,则数据流属性会包含多个数据运行。例如:0x 31 41 C5 BE 0B 21 01 33 18 31 01 55 79 37 00,其中包含3个数据运行,分别是:0x 31 41 C5 BE 0B、0x 21 01 33 18和0x 31 01 55 79 37。整个文件数据由三块空间组成,每个数据运行标识一块空间。第一块空间的起始簇号是0x 0B BE C5=769733,空间大小为0x 41=65簇。第二块空间的起始簇号是0x 18 33,但这是与第一个数据运行的相对地址,因此第二块空间的起始簇号是0x 0B BE C5 + 0x 18 33 = 0x 0B D6 F8 = 775928,空间大小是0x 01 = 1簇。同理第三块空间的起始簇号也是与第二个数据运行的相对地址,因此第三块空间的起始簇号是0x 0B D6 F8 + 0x 37 79 55 = 0x 43 50 4D = 4411469,空间大小是0x01=1簇。

通过$Bitmap元文件记录定位了位图数据,接下来可以通过位图数据确定硬盘分区的空闲空间。

1.3 通过位图数据确定硬盘分区的空闲空间

$Bitmap元文件的位图数据记录了硬盘分区簇的占用情况,每一个二进制位代表一簇,字节的低位代表前面的簇。例如假设位图数据的第一个字节为0x 9E=1001 1110,代表硬盘分区的0、5、6簇是空闲状态,1-4、7簇是占用状态。

为了计算硬盘分区的空闲空间,本文设计了如图3所示的状态机。我们将位图数据作为一个二进制数据流输入到状态机。这里遇到一个如何确定二进制字节流大小的问题,我们最初想到利用$Bitmap元文件记录中保存的位图数据大小,以图2为例,这个位图数据大小是313簇,即313×4096×8=10256384个二进制位,即共可表示10256384个簇的占用情况。而根据BPB参数可知硬盘分区共81913855个扇区,即81913855/8=10239231.875簇。可以看出两种计算方法相差10256384——10239231=17153个簇,这是由于位图数据最后一簇中的空闲空间导致的。因此我们采用第二种计算方法,即根据BPB参数表中记录的硬盘分区大小来计算二进制字节流长度,以图2为例二进制数据流共包括(81913855 /8)/8 = 1279903个二进制位。

图3 计算空闲空间的状态机

我们将位图数据作为一个二进制数据流输入到状态机,即可得出对应的空闲空间。

2 根据存储特征在硬盘分区空闲空间内搜索Oracle数据块

随着计算机的使用,被删除Oracle数据文件的MFT文件记录可能被覆盖,在这种情况下就不能通过MFT文件记录来进行文件恢复。但由于Oracle数据文件通常容量较大,以GB为单位,被删除的数据文件在短时间内不会从硬盘完全消失。本文提出一种不依靠MFT文件记录、根据Oracle数据块存储特征在硬盘分区空闲空间内搜索、恢复Oracle数据文件的方法。

2.1 Oracle数据文件的数据块组成

Oracle中数据存储的基本单位是数据块,数据文件(*.dbf)的磁盘空间可以从逻辑上划分成若干个数据块(从0到n连续编号),每个数据块的默认大小是8KB。数据块是磁盘IO操作的基本单位。

数据块的物理存储结构如图4所示,每个数据块开头20字节是缓冲区头,用于存储块类型、块格式和校验和等信息。接下来48字节是事务头,用于存储块编号、拥有该块的对象的ID和事务ID等重要信息。再下面14字节是数据头,用于存储表个数、行个数、块内空闲空间、块内已用空间等信息。数据头后面是长度可变的表目录,其后是长度可变的行目录,对于数据区域中的每一行记录,行目录都包含一个2字节的条目。每个条目记录对应行的第一个字节与块首的距离。行目录中的条目的顺序与数据区域中行记录的存储顺序相反。行目录之后是具体的数据区域。在每个数据块的结尾都存放了四个字节的尾部校验和,用于保证数据块内数据的完整性。

Oracle数据文件由一系列数据块组成,保存实际数据的数据块有明显的特征值,根据这些特征值扫描整个磁盘的未使用空间,即可将所有未被覆盖的数据块一一提取出来。但这些数据块组成的文件可能是残缺不全的,不能利用Oracle数据库管理系统正常查看,因此必须自行开发检验软件,从恢复出的残缺数据文件中检验出有效数据。

图4 数据块的物理结构

2.2 根据数据块存储特征在硬盘分区空闲空间内搜索Oracle数据块

通过$Bitmap元文件我们可以确定硬盘分区内的各个空闲空间,接下来就是在这些空闲空间内搜索、恢复Oracle数据块。

为了搜索Oracle数据块我们设计了如图5所示的状态机。因为Oracle数据文件的基本存储单位是数据块,每个数据块的默认大小是8K,因此将每个空闲空间划分成若干个8K大小的数据块,然后将这些数据块流输入到状态机,即可自动识别出其中包含的Oracle数据块。由于硬盘分区空闲空间内的数据量非常大,如果单存为数据块指定一组特征值作为识别条件很容易导致误报,为了防止出现错误识别的问题,本文设计的识别方法要求数据块要满足一组基本特征(basic feature),同时与其前后相临数据块要满足一组关联特征(related feature),这样才能识别其为Oracle数据块,该方法经过大量测试实际识别结果准确。

图5 识别Oracle数据块的状态机

3 将在硬盘分区空闲空间内找到的Oracle数据块恢复成数据文件

3.1 数据块恢复的链表存储结构

Oracle数据库由一系列数据文件组成(例如:system01.dbf、example01.dbf、等等),数据库中的所有对象(如数据表、索引、查询、存储过程、等等)都保存在这些数据文件中,每个数据文件都有唯一的FILE-ID(例如:system01.dbf是1、example01.dbf是5)。图6是用于数据块恢复的链表存储结构,其中包含一个Oracle File List和多个Block List。Oracle File List中每个结点代表一个数据文件,FILE-ID字段保存了这个数据文件的ID,block指针指向了一个Block List链表,LENGTH字段保存了Block List链表中结点的个数。有几个数据文件,就有几个对应的Block List,Block List中的每个结点记录在硬盘分区空闲空间中找到的一组Oracle数据块,begin sec是这组数据块的起始扇区,sec num是扇区个数。

通过图5所示的状态机可以找出硬盘分区空闲空间中的Oracle数据块,每找到一组Oracle数据块,就将这组Oracle数据块的存储信息作为一个结点插入到某个Block List中,同时对应的LENGTH字段值加1。状态机工作结束之后,图6所示的链式存储结构就形成了。接下来可以根据用户的选择恢复某个数据文件。

图6 用于数据块恢复的链表存储结构

3.2 恢复模块的执行流程

图6所示的链式存储结构形成之后,接下来可以根据FILE-ID来恢复某个数据文件。恢复模块的执行流程如图7所示。首先读取FILE-ID,如果Oracle File List中不存在对应的结点或对应结点的Block List链表为空,则模块结束,否则将P指针指向Block List链表的头结点,恢复该结点对应的Oracle数据块,接下来将P指针沿着Block List向后移动,并恢复每个结点对应的Oracle数据块,直至P指针为NULL,即到达Block List链表尾部。至此这个数据文件恢复结束。

图7 恢复模块的执行流程图

4 总结

本文研究了通过Oracle数据块存储特征来恢复Oracle数据文件的方法。得到的结论是Oracle数据文件由一系列8K大小的数据块组成,这些数据块均有明显的特征值,可以根据数据块的存储特征值将分布在硬盘分区空闲空间中的数据块一一提取出来,并恢复成一个数据文件。但由于某些数据被覆盖,因此恢复出的数据文件可能是残缺不全的,不能利用Oracle数据库管理系统正常查看,但大量的用户数据仍然存在,接下来课题组计划自行开发检验软件,从恢复出的残缺数据文件中检验出有效的数据记录。

1.戴士剑,涂彦晖.数据恢复技术(第二版).北京:电子工业出版社,2005

2.汪中夏,刘伟.数据恢复高级技术.北京:电子工业出版社,2005

3.严蔚敏.数据结构(C语言版).北京:清华大学出版社.2008

4.萨师煊.数据库系统概论.北京高等教育出版社.2003

猜你喜欢
数据文件状态机扇区
分阶段调整增加扇区通行能力策略
基于有限状态机的交会对接飞行任务规划方法
空中交通管制扇区复杂网络建模与特性分析
空域扇区网络级联失效抗毁性及优化策略
基于Spring StateMachine的有限状态机应用研究
基于表空间和数据文件探讨MIS中数据库架构设计
U盘故障排除经验谈
基于网络环境的社区协同办公问题探讨(二)
气象数据文件异机备份程序浅析
基于反熔丝FPGA的有限状态机加固设计