首页> 中国专利> 基于大华嵌入式安防设备的数据提取方法

基于大华嵌入式安防设备的数据提取方法

摘要

本发明公开了一种基于大华嵌入式安防设备的数据提取方法,属于数据恢复技术领域,包括以下步骤:S1加载磁盘,并读取磁盘第一个扇区数据;S2嵌入式监控设备在初始化磁盘时将标记0x44484653写入磁盘第一个扇区,即0x00偏移地址处,检测S1中读取的数据是否符合上述标记,若符合则跳至S3,否则跳至S1。本发明的有益效果如下:本发明可以快速判断磁盘数据是否为大华厂商的监控视频数据格式;也可以提取出磁盘数据中有效的视频数据文件,包括正常数据文件、丢失数据文件和覆盖数据文件;还可以正确区分视频数据文件正常、丢失、覆盖的状态。

著录项

  • 公开/公告号CN106293791A

    专利类型发明专利

  • 公开/公告日2017-01-04

    原文格式PDF

  • 申请/专利号CN201510288358.3

  • 发明设计人 梁效宁;

    申请日2015-05-29

  • 分类号G06F9/445;

  • 代理机构

  • 代理人

  • 地址 641000 四川省内江市松山南路183号

  • 入库时间 2023-06-19 01:14:33

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2020-02-14

    授权

    授权

  • 2019-05-28

    著录事项变更 IPC(主分类):G06F9/445 变更前: 变更后: 申请日:20150529

    著录事项变更

  • 2017-02-01

    实质审查的生效 IPC(主分类):G06F9/445 申请日:20150529

    实质审查的生效

  • 2017-01-04

    公开

    公开

说明书

技术领域

本发明属于数据恢复领域,具体涉及一种基于大华嵌入式安防设备的数据提取方法。

背景技术

国内经济的蓬勃发展带动了不少行业的发展,安保行业正是受益于经济发展增长趋势最为明显的行业之一。尤其是在视频监控技术不断发展的今天,高清监控视频、多角度视频技术等专业的监控设备在各个行业的多种场所都得到了有效地推广应用。视频监控设备为实现社会的安定和谐做出了巨大贡献。

嵌入式系统是一种完全嵌入受控器件内部,为特定应用而设计的专用操作系统,嵌入式系统监控机则是一个用于控制和监视摄像探头的装置。从整体性能上来看,嵌入式硬盘录像机表现出来了无比强大的优越性能,并且从目前的市场占有率上看,已经成为安防界的主流产品。

在发达国家,不少监控设备上面存储的数据都是经过多重备份以便确保其数据存储具备高度的安全性。然而,在国内,为了节省企业的开支以及降低管理上的难度,很多持有监控设备的单位并没有相应的数据安全措施,这就意味着一旦设备上存储的视频资料丢失或出现其它故障,将使得安防功能无法起到实际性作用。此外,在部分情况下,有不少案件是由于提供了最真实,最可靠的视频证据,成为了法院决断的依据,才得到了公正、高效的判决,因此对监控设备的数据提取与恢复具有重大意义。

由于监控视频的存储是设备厂商自定义的存储格式,比如大华,因此传统的数据恢复技术无法应用到大华监控机的视频数据提取与恢复;市面上现有技术无法恢复大华监控机的未使用区域的丢失文件、已使用区域中未被覆盖的碎片文件;即使能进行视频数据的恢复,但也无法对文件状态属性加以区分。

本发明涉及到的部分专业术语:

磁盘分区:在磁盘上划分几个逻辑部分,每一部分都称之为分区;

块:一个分区被分成大小相等,连续空间的区域;

文件分配表:映射到分区每个块的条目列表,在每个条目中记录了该条目映射的块的使用状况;

正常数据:是指在磁盘分区的文件分配表中有已使用的标记和已使用字节数的块中可正常播放的视频数据;

丢失数据:是指磁盘分区的文件分配表中标识为未使用区域的块所对应的地址中保存的可播放的有效视频数据;

覆盖数据:是指在磁盘分区的文件分配表中有已使用的标记的块中标记为未使用的中可正常播放的视频数据。

发明内容

本发明针对现有技术的不足,提供了一种基于大华嵌入式安防设备的数据提取方法,能够有效解决现有技术无法恢复监控机的未使用区域的丢失文件、已使用区域中未被覆盖的碎片文件;即使能进行视频数据的恢复,但也无法对文件属性加以区分等问题。

为解决以上问题,本发明采用的技术方案如下:一种基于大华嵌入式安防设备的数据提取方法,包括如下步骤:

S1加载磁盘,并读取磁盘第一个扇区数据;

S2嵌入式监控设备在初始化磁盘时将标记0x44484653写入磁盘第一个扇区,即0x00偏移地址处,检测S1中读取的数据是否符合上述标记,若符合则跳至S3,否则跳至S1;

S3解析主分配记录中每一个分区的起始地址、引导扇区地址,其中主分配记录位于磁盘0x1E扇区,分区表项的起始地址是相对于0x1E扇区起始地址偏移0x48字节,每个分区信息表项的长度为0x40,每个分区信息表项相对表项起始地址偏移0x1C~0x1F记录的值为分区起始地址相对于第一个扇区的偏移值,每个分区信息表项相对于表项起始地址偏移Ox00~00x1记录的值为分区引导记录地址相对于分区起始地址的偏移值;

S4读取正常数据记录:依次解析磁盘划分的每一个分区,在相对分区的引导扇区起始地址偏移0x44长度0x04的地址是该分区的文件分配表的地址,跳转至文件分配表的地址后遍历该表,在文件分配表中每一表项长度为0x20,读取每个表项中相对表项起始位置偏移0x00处的值,当值为01或03时标志着该表项对应的块已经被使用,计算出该表项对应的块地址来获取对应数据。

S5读取非正常数据记录,非正常数据记录包括读取丢失数据和覆盖数据;

S6按照正常数据、丢失数据、覆盖数据三种类别读取数据记录后,结合视频文件的格式结构,分类别提取其对应的有效数据;

作为优选,S4读取正常数据的详细流程如下所述:

S41读取位于磁盘0x1E扇区的主分配记录中的分区的起始地址、分区引导记录地址的信息,然后遍历每一个分区并读取信息;

S42跳至分区引导记录地址,解析分区引导记录信息,读取相对分区引导记录起始地址偏移0x2C长度为0x02的值记为sectorsize、相对分区引导记录起始地址偏移0x30~0x31的值记为blocksectors、相对分区引导记录起始地址偏移0x38~0x3B的值记为data_firstblock、相对分区引导记录起始地址偏移0x44~0x47的值记为FAT、相对分区引导记录起始地址偏移0x48~0x4B的值记为data_firstsector,相对分区引导记录起始地址偏移0x4C~0x4F的值记为blocks;

S43跳至文件分配表FAT地址读取文件分配信息;

S44读取文件分配表中所有数据的值,判断其值是否为0x00,若全部为0x00则跳至S42,否则跳至S45;

S45读取块m的分配记录信息,其中初始值m=0:按文件分配表顺序一一读取表项中的值,读取每个表项中相对表项起始位置偏移0x00处的值记为flag,读取相对表项起始位置偏移0x10~0x13的值记为usedbytes;

S46根据S45中读取的信息中flag与usedbytes来判断该块是否已经被写入数据,当flag值为0x01或者0x03且usedbytes大于0则表示已经写入数据,则跳至S47,否则跳至S411;

S47再次读取文件分配表的表项,读取相对表项起始位置偏移0x01处的值记为channel,读取相对表项起始位置偏移0x04~0x07的值记为starttime,读取相对表项起始位置偏移0x08~0x0B的值记为endtime,读取相对表项起始位置偏移0x0C~0x0F的值记为nextblock,读取相对表项起始位置偏移0x14~0x17的值记为lastblock,读取相对表项起始位置偏移0x10~0x13的值记为usedbytes,并计算出该块对应的数据区地址,读取该地址的相应数据;

S48根据S47读取的nextblock来判读该块的下一个块区域是否存在,若nextblock不等于0则跳至S49,否则跳至S410;

S49根据公式offset=nextblock*0x20计算下一个块nextblock相对于文件分配表起始地址的偏移量,并跳转至该地址,然后跳至S45;

S410创建已读取块的集合Ni,初始值i=0:创建一个集合,在集合中记录已经读取的块的编号,如果2个及以上的块是相互关联的则按照顺序依次写入集合Ni,集合Ni的格式如{0x00,0x01,…,0x0m};

S411使得S45所述的m=m+1,相对该表项起始地址向后跳转0x20字节,获取下一个块的分配记录地址;

S412根据S42中块个数blocks来判断下一个读取的块的地址是否已经达到文件分配表尾部,若当前m≥blocks则跳至S414,若m<blocks则跳至S413;

S413读取该块的编号,并在Ni中验证该块是否已经被读取,若已经被读取则跳至S411,否则跳至S45;

S414创建正常文件集合N,将所有的集合Ni写入到集合N中,其格式如{N0,N1,N2,…,Ni};

S415将所有的正常文件依次写入集合N后,并对其加上正常数据标识N,以便区别其他类型的数据文件。

作为优选,所述S5读取非正常数据记录详细流程如下:

S51读取丢失数据记录:依次解析磁盘划分的每一个分区,在分区的引导扇区中读取该分区的文件分配表的地址,遍历该表读取相对表项起始位置偏移0x00处的值为非01或03的块,并计算出该块对应的数据区地址,判断该地址的内容是否为0x00,不全部为0x00时按照嵌入式监控设备的视频数据结构提取有效的视频数据;

S52读取覆盖数据记录:依次解析磁盘划分的每一个分区,在分区的引导扇区中读取该分区的文件分配表的地址,遍历该表读取相对表项起始位置偏移0x10处的值,该值即为块的已使用的字节数,然后计算出该块对应的数据区地址中未使用的字节数,其公式可表示为:块中未使用字节数=blocksectors*sectorsize-usedbytes,读取块中标记为未使用的字节数地址的内容,判断该地址的内容中是否为0x00,不全部为0x00时按照嵌入式监控设备的视频数据结构提取有效的视频数据。

作为优选,S51读取丢失数据的详细流程如下所述:

S511读取磁盘主引导记录:读取位于磁盘0x1E扇区的主分配记录中的分区的起始地址、分区引导记录地址的信息,然后遍历每一个分区并读取信息;

S512跳至分区引导记录地址:解析分区引导记录信息,读取相对分区引导记录起始地址偏移0x2C长度为0x02的值记为sectorsize、相对分区引导记录起始地址偏移0x30~0x31的值记为blocksectors、相对分区引导记录起始地址偏移0x38~0x3B的值记为data_firstblock、相对分区引导记录起始地址偏移0x44~0x47的值记为FAT、相对分区引导记录起始地址偏移0x48~0x4B的值记为data_firstsector,相对分区引导记录起始地址偏移0x4C~0x4F的值记为blocks;

S513跳至FAT地址读取文件分配信息;

S514读取块的分配记录信息,其中初始值m=0,按文件分配表顺序一一读取表项中的值,读取每个表项中相对表项起始位置偏移0x00处的值记为flag;

S515读取块的记录信息flag标记来判断分区是否使用,若flag为0x01或0x03则跳至S519,否则跳至S516;

S516计算出该块对应的数据区地址,读取该地址的数据内容并判断其数据是否为空,若数据内容全部为0x00则跳至S519,否则跳至S517;

S517根据视频数据的格式提取块内容中的有效视频文件;

S518创建已读取块集合Li,在集合中记录已读取块的编号,其格式如{0x00,0x01,…,0x0m};

S519使得S514的m=m+1,相对该表项起始地址向后跳转0x20字节,获取下一个块的分配记录地址;

S5110根据S512中块个数blocks来判断下一个读取的块的地址是否已经达到文件分配表尾部,若当前m≥blocks则跳至S5112,若m<blocks则跳至S5111;

S5111读取该块的编号,并在Li中验证该块是否已经被读取,若已经被读取则跳至S519,若未被读取则跳至S514;

S5112创建丢失文件集合L,将所有的集合Li写入到集合L中,其格式如{L0,L1,L2,…,Li};

S5113将所有的丢失文件依次写入集合L后,并对其加上丢失数据标识L,以便区别其他类型的数据文件。

作为优选,S52读取覆盖数据的详细流程如下所述:

S521读取位于磁盘0x1E扇区的主分配记录中的分区的起始地址、分区引导记录地址的信息,然后遍历每一个分区并读取信息;

S522解析分区引导记录信息,读取相对分区引导记录起始地址偏移0x2C长度为0x02的值记为sectorsize、相对分区引导记录起始地址偏移0x30~0x31的值记为blocksectors、相对分区引导记录起始地址偏移0x38~0x3B的值记为data_firstblock、相对分区引导记录起始地址偏移0x44~0x47的值记为FAT、相对分区引导记录起始地址偏移0x48~0x4B的值记为data_firstsector,相对分区引导记录起始地址偏移0x4C~0x4F的值记为blocks;

S523跳至文件分配表地址读取文件分配信息;

S524读取文件分配表中所有数据的值,判断其值是否为0x00,若全部为0x00则跳至S522,否则跳至S525;

S525读取当前块m的分配记录信息,其中初始值m=0:从FAT第一个表项开始逐一读取FAT各表项信息,读取每个表项中相对表项起始位置偏移0x00处的值记为flag,读取相对表项起始位置偏移0x10~0x13的值记为usedbytes;

S526根据S525中读取的信息中flag与usedbytes来判断该块是否已经被写入数据,当flag值为0x01或者0x03且usedbytes大于0则表示已经写入数据跳至S527,否则跳至S5211;

S527根据S526中读取的usedbytes进行计算块中未使用字节数,读取块中未使用地址的数据;

S528判断未使用区域的内容是否为空,若全部为0x00则跳至S5211,否则跳至S529;

S529根据视频数据的格式提取块内容中的有效视频文件;

S5210创建已读取块集合Fi,在集合中记录已读取块的编号,Fi的格式入{0x0m};

S5211使得所述S25的m=m+1,相对该表项起始地址向后跳转0x20字节,来获取下一个块的分配记录地址;

S5212根据S522中块个数blocks来判断下一个读取的块的地址是否已经达到文件分配表尾部,若当前m≥blocks则跳至S5214,m<blocks则跳至S5213;

S5213读取该块的编号,并在Fi中验证该块是否已经被读取,若已经被读取则跳至S5211,否则跳至S525;

S5214创建覆盖文件集合F,将所有的集合Fi写入到集合F中,其格式如{F0,F1,F2,…,Fi};

S5215将所有的覆盖文件依次写入集合F后,并对其加上覆盖数据标识F,以便区别其他类型的数据文件。

作为优选,S4所述的计算方法如下所述:

计算公式为:编号为x的块表项对应的块地址=数据区开始扇区+(文件首块号+x)*每块扇区数,其中记录数据区开始扇区地址位于相对分区引导记录起始地址偏移0x48且长度为0x04,记录文件首块号的地址位于相对分区引导记录起始地址偏移0x38且长度为0x04,记录每块扇区数的地址位于相对分区引导记录起始地址偏移0x30且长度为0x04。

作为优选,S47所述的计算方法如下所述:

计算公式:addressx=data_firstsector+(data_firstblock+x)*blocksectors,其中x为文件分配表的编号。

作为优选,S516所述的计算公式:addressx=data_firstsector+(data_firstblock+x)*blocksectors,其中x为文件分配表的编号。

作为优选,S527读取块中未使用地址的数据具体方法如下:

根据计算公式:addressx=data_firstsector+(data_firstblock+x)*blocksectors计算出该块对应的数据区地址,其中x为文件分配表中表项的编号;再根据计算公式:块中未使用的字节=blocksectors*sectorsize-usedbytes来获取块中未使用的字节数,跳至addressx地址的读取相应未使用区域的字节。

本发明的有益效果如下:本发明采用了按照磁盘的分区逐一读取的方法,在读取每一个分区时按照正常数据文件、丢失数据文件、覆盖数据文件进行分类解析。在读取正常数据文件时,解析分区的文件分配记录表,从该表中解析已经使用的块记录,并读取其中视频数据;在读取丢失数据文件时,解析分区的文件分配记录表,从该表中解析未使用的块记录,并读取其中视频数据判断其是否为空,不为空时按照嵌入式监控设备的视频数据结构提取有效的视频数据;在读取覆盖数据文件时,解析分区的文件分配记录表,从该表中解析已使用的块记录及已使用块的字节数,然后读取其中未使用字节的视频数据,判断其是否为空,不为空时按照嵌入式监控设备的视频数据结构提取有效的视频数据。基于上述方法,本发明可以快速判断磁盘数据是否为大华的监控视频数据格式,也可以提取出磁盘数据中有效的视频数据文件,包括正常数据文件、丢失数据文件和覆盖数据文件;还可以正确区分视频数据文件正常、丢失、覆盖的状态。

附图说明

图1为磁盘数据解析主流程图;

图2为S4读取正常数据记录流程图;

图3为S51读取丢失数据记录流程图;

图4为S52读取覆盖数据记录流程图;

图5为磁盘分区结构示意图。

具体实施方式

为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明做进一步详细说明。

针对上述提出的问题,本发明提出了一种基于大华嵌入式安防设备的数据提取方法,该发明不仅能高效地提取正常的视频数据,还能将非正常的数据进行有效的恢复。

本发明是针对大华监控设备提出的解决方法,因此先介绍大华嵌入式监控设备在存储文件时的基本结构。监控设备在初始化磁盘时,磁盘被划分为n(n=0,1,2…)个区域(划分的区域以下简称为分区),每一个分区被划分成大小相同的块(类似于windows操作系统中fat32文件系统的簇)来作为存储数据基本单元,每一个块是有固定数量的扇区组成,在存储视频数据时依次使用每个分区,并且在分区中写入数据时会在该分区产生与之对应的块分配记录,来管理该分区空间的使用情况。

基于上述的存储文件的逻辑,本发明所采用的数据解析的原理如下:按照磁盘的分区逐一读取,在读取每一个分区时按照正常数据文件、丢失数据文件、覆盖数据文件进行分类解析。在读取正常数据文件时,解析分区的文件分配记录表,从该表中解析已经使用的块记录,并读取其中视频数据;在读取丢失数据文件时,解析分区的文件分配记录表,从该表中解析未使用的块记录,并读取其中视频数据判断其是否为空,不为空时按照大华嵌入式监控设备的视频数据结构提取有效的视频数据;在读取覆盖数据文件时,解析分区的文件分配记录表,从该表中解析已使用的块记录及已使用块的字节数,然后读取其中未使用字节的视频数据,判断其是否为空,不为空时按照大华嵌入式监控设备的视频数据结构提取有效的视频数据。

为了详细说明本专利的发明方法,结合附图进一步阐述。

为了更为方便的阐述本发明中的方法,本例使用大华文件系统4.1版本(DHFS4.1)为例进行阐述,该格式的磁盘结构如图5所示,各部分的详细意义如下:

磁盘标记:记录磁盘所使用的大华文件系统版本信息,该标记位于磁盘0x0扇区,偏移地址0x00~0x07;

主分配记录:记录磁盘划分分区的信息,该记录位于磁盘0x1E扇区,第一个分区表项的相对0x1E扇区起始偏移地址为0x48,每个分区信息表项的长度为0x40,每个分区信息表项包含了分区的起始地址和分区引导记录相对起始地址的偏移地址;

分区结构:在磁盘中每个分区结构是完全一致的,在此仅针对一个分区的结构进行阐述,分区的结构主要包括分区引导记录、文件分配表、数据存储区,分区引导记录中主要记录了每扇区字节数、每块扇区数、文件首块号、目录文件位图开始扇区、文件分配表的开始扇区、数据存储区开始扇区、块个数、数据存储区备份的开始扇区、通道个数等信息,文件分配表是对数据存储区是否使用的一个管理区域,文件分配表项的长度为0x20,一个表项对应数据存储区的一个块,每个表项中记录对应块的是否使用标记、块中记录的视频数据的通道、块中记录的视频数据的开始时间、块中记录的视频数据的结束时间、块中记录的视频数据上一个块序号、块中记录的视频数据下一个块序号,数据存储区记录真实的视频数据文件。

一种基于大华嵌入式安防设备的数据提取方法,包括如下步骤:

S1加载磁盘,并读取磁盘第一个扇区数据;

S2嵌入式监控设备在初始化磁盘时将标记0x44484653写入磁盘第一个扇区,即0x00偏移地址处,检测S1中读取的数据是否符合上述标记,若符合则跳至S3,否则跳至S1;

S3解析主分配记录中每一个分区的起始地址、引导扇区地址,其中主分配记录位于磁盘0x1E扇区,分区表项的起始地址是相对于0x1E扇区起始地址偏移0x48字节,每个分区信息表项的长度为0x40,每个分区信息表项相对表项起始地址偏移0x1C~0x1F记录的值为分区起始地址相对于第一个扇区的偏移值,每个分区信息表项相对于表项起始地址偏移Ox00~00x1记录的值为分区引导记录地址相对于分区起始地址的偏移值;

S4读取正常数据记录:依次解析磁盘划分的每一个分区,在相对分区的引导扇区起始地址偏移0x44长度0x04的地址是该分区的文件分配表的地址,跳转至文件分配表的地址后遍历该表,在文件分配表中每一表项长度为0x20,读取每个表项中相对表项起始位置偏移0x00处的值,当值为01或03时标志着该表项对应的块已经被使用,计算出该表项对应的块地址来获取对应数据。

S5读取非正常数据记录,非正常数据记录包括读取丢失数据和覆盖数据;

S6按照正常数据、丢失数据、覆盖数据三种类别读取数据记录后,结合视频文件的格式结构,分类别提取其对应的有效数据;

进一步地:

S4读取正常数据的详细流程如下所述:

S41读取位于磁盘0x1E扇区的主分配记录中的分区的起始地址、分区引导记录地址的信息,然后遍历每一个分区并读取信息;

S42跳至分区引导记录地址,解析分区引导记录信息,读取相对分区引导记录起始地址偏移0x2C长度为0x02的值记为sectorsize、相对分区引导记录起始地址偏移0x30~0x31的值记为blocksectors、相对分区引导记录起始地址偏移0x38~0x3B的值记为data_firstblock、相对分区引导记录起始地址偏移0x44~0x47的值记为FAT、相对分区引导记录起始地址偏移0x48~0x4B的值记为data_firstsector,相对分区引导记录起始地址偏移0x4C~0x4F的值记为blocks;

S43跳至文件分配表FAT地址读取文件分配信息;

S44读取文件分配表中所有数据的值,判断其值是否为0x00,若全部为0x00则跳至S42,否则跳至S45;

S45读取块m的分配记录信息,其中初始值m=0:按文件分配表顺序一一读取表项中的值,读取每个表项中相对表项起始位置偏移0x00处的值记为flag,读取相对表项起始位置偏移0x10~0x13的值记为usedbytes;

S46根据S45中读取的信息中flag与usedbytes来判断该块是否已经被写入数据,当flag值为0x01或者0x03且usedbytes大于0则表示已经写入数据,则跳至S47,否则跳至S411;

S47再次读取文件分配表的表项,读取相对表项起始位置偏移0x01处的值记为channel,读取相对表项起始位置偏移0x04~0x07的值记为starttime,读取相对表项起始位置偏移0x08~0x0B的值记为endtime,读取相对表项起始位置偏移0x0C~0x0F的值记为nextblock,读取相对表项起始位置偏移0x14~0x17的值记为lastblock,读取相对表项起始位置偏移0x10~0x13的值记为usedbytes,并计算出该块对应的数据区地址,读取该地址的相应数据;

S48根据S47读取的nextblock来判读该块的下一个块区域是否存在,若nextblock不等于0则跳至S49,否则跳至S410;

S49根据公式offset=nextblock*0x20计算下一个块nextblock相对于文件分配表起始地址的偏移量,并跳转至该地址,然后跳至S45;

S410创建已读取块的集合Ni,初始值i=0:创建一个集合,在集合中记录已经读取的块的编号,如果2个及以上的块是相互关联的则按照顺序依次写入集合Ni,集合Ni的格式如{0x00,0x01,…,0x0m};

S411使得S45所述的m=m+1,相对该表项起始地址向后跳转0x20字节,获取下一个块的分配记录地址;

S412根据S42中块个数blocks来判断下一个读取的块的地址是否已经达到文件分配表尾部,若当前m≥blocks则跳至S414,若m<blocks则跳至S413;

S413读取该块的编号,并在Ni中验证该块是否已经被读取,若已经被读取则跳至S411,否则跳至S45;

S414创建正常文件集合N,将所有的集合Ni写入到集合N中,其格式如{N0,N1,N2,…,Ni};

S415将所有的正常文件依次写入集合N后,并对其加上正常数据标识N,以便区别其他类型的数据文件。

进一步地:

所述S5读取非正常数据记录详细流程如下:

S51读取丢失数据记录:依次解析磁盘划分的每一个分区,在分区的引导扇区中读取该分区的文件分配表的地址,遍历该表读取相对表项起始位置偏移0x00处的值为非01或03的块,并计算出该块对应的数据区地址,判断该地址的内容是否为0x00,不全部为0x00时按照嵌入式监控设备的视频数据结构提取有效的视频数据;

S52读取覆盖数据记录:依次解析磁盘划分的每一个分区,在分区的引导扇区中读取该分区的文件分配表的地址,遍历该表读取相对表项起始位置偏移0x10处的值,该值即为块的已使用的字节数,然后计算出该块对应的数据区地址中未使用的字节数,其公式可表示为:块中未使用字节数=blocksectors*sectorsize-usedbytes,读取块中标记为未使用的字节数地址的内容,判断该地址的内容中是否为0x00,不全部为0x00时按照嵌入式监控设备的视频数据结构提取有效的视频数据。

进一步地:

S51读取丢失数据的详细流程如下所述:

S511读取磁盘主引导记录:读取位于磁盘0x1E扇区的主分配记录中的分区的起始地址、分区引导记录地址的信息,然后遍历每一个分区并读取信息;

S512跳至分区引导记录地址:解析分区引导记录信息,读取相对分区引导记录起始地址偏移0x2C长度为0x02的值记为sectorsize、相对分区引导记录起始地址偏移0x30~0x31的值记为blocksectors、相对分区引导记录起始地址偏移0x38~0x3B的值记为data_firstblock、相对分区引导记录起始地址偏移0x44~0x47的值记为FAT、相对分区引导记录起始地址偏移0x48~0x4B的值记为data_firstsector,相对分区引导记录起始地址偏移0x4C~0x4F的值记为blocks;

S513跳至FAT地址读取文件分配信息;

S514读取块的分配记录信息,其中初始值m=0,按文件分配表顺序一一读取表项中的值,读取每个表项中相对表项起始位置偏移0x00处的值记为flag;

S515读取块的记录信息flag标记来判断分区是否使用,若flag为0x01或0x03则跳至S519,否则跳至S516;

S516计算出该块对应的数据区地址,读取该地址的数据内容并判断其数据是否为空,若数据内容全部为0x00则跳至S519,否则跳至S517;

S517根据视频数据的格式提取块内容中的有效视频文件;

S518创建已读取块集合Li,在集合中记录已读取块的编号,其格式如{0x00,0x01,…,0x0m};

S519使得S514的m=m+1,相对该表项起始地址向后跳转0x20字节,获取下一个块的分配记录地址;

S5110根据S512中块个数blocks来判断下一个读取的块的地址是否已经达到文件分配表尾部,若当前m≥blocks则跳至S5112,若m<blocks则跳至S5111;

S5111读取该块的编号,并在Li中验证该块是否已经被读取,若已经被读取则跳至S519,若未被读取则跳至S514;

S5112创建丢失文件集合L,将所有的集合Li写入到集合L中,其格式如{L0,L1,L2,…,Li};

S5113将所有的丢失文件依次写入集合L后,并对其加上丢失数据标识L,以便区别其他类型的数据文件。

进一步地:

S52读取覆盖数据的详细流程如下所述:

S521读取位于磁盘0x1E扇区的主分配记录中的分区的起始地址、分区引导记录地址的信息,然后遍历每一个分区并读取信息;

S522解析分区引导记录信息,读取相对分区引导记录起始地址偏移0x2C长度为0x02的值记为sectorsize、相对分区引导记录起始地址偏移0x30~0x31的值记为blocksectors、相对分区引导记录起始地址偏移0x38~0x3B的值记为data_firstblock、相对分区引导记录起始地址偏移0x44~0x47的值记为FAT、相对分区引导记录起始地址偏移0x48~0x4B的值记为data_firstsector,相对分区引导记录起始地址偏移0x4C~0x4F的值记为blocks;

S523跳至文件分配表地址读取文件分配信息;

S524读取文件分配表中所有数据的值,判断其值是否为0x00,若全部为0x00则跳至S522,否则跳至S525;

S525读取当前块m的分配记录信息,其中初始值m=0:从FAT第一个表项开始逐一读取FAT各表项信息,读取每个表项中相对表项起始位置偏移0x00处的值记为flag,读取相对表项起始位置偏移0x10~0x13的值记为usedbytes;

S526根据S525中读取的信息中flag与usedbytes来判断该块是否已经被写入数据,当flag值为0x01或者0x03且usedbytes大于0则表示已经写入数据跳至S527,否则跳至S5211;

S527根据S526中读取的usedbytes进行计算块中未使用字节数,读取块中未使用地址的数据;

S528判断未使用区域的内容是否为空,若全部为0x00则跳至S5211,否则跳至S529;

S529根据视频数据的格式提取块内容中的有效视频文件;

S5210创建已读取块集合Fi,在集合中记录已读取块的编号,Fi的格式入{0x0m};

S5211使得所述S25的m=m+1,相对该表项起始地址向后跳转0x20字节,来获取下一个块的分配记录地址;

S5212根据S522中块个数blocks来判断下一个读取的块的地址是否已经达到文件分配表尾部,若当前m≥blocks则跳至S5214,m<blocks则跳至S5213;

S5213读取该块的编号,并在Fi中验证该块是否已经被读取,若已经被读取则跳至S5211,否则跳至S525;

S5214创建覆盖文件集合F,将所有的集合Fi写入到集合F中,其格式如{F0,F1,F2,…,Fi};

S5215将所有的覆盖文件依次写入集合F后,并对其加上覆盖数据标识F,以便区别其他类型的数据文件。

进一步地:

S4所述的计算方法如下所述:

计算公式为:编号为x的块表项对应的块地址=数据区开始扇区+(文件首块号+x)*每块扇区数,其中记录数据区开始扇区地址位于相对分区引导记录起始地址偏移0x48且长度为0x04,记录文件首块号的地址位于相对分区引导记录起始地址偏移0x38且长度为0x04,记录每块扇区数的地址位于相对分区引导记录起始地址偏移0x30且长度为0x04。

进一步地:

S47所述的计算方法如下所述:

计算公式:addressx=data_firstsector+(data_firstblock+x)*blocksectors,其中x为文件分配表的编号。

进一步地:

S516所述的计算公式:addressx=data_firstsector+(data_firstblock+x)*blocksectors,其中x为文件分配表的编号。

进一步地:

S527读取块中未使用地址的数据具体方法如下:

根据计算公式:addressx=data_firstsector+(data_firstblock+x)*blocksectors计算出该块对应的数据区地址,其中x为文件分配表中表项的编号;再根据计算公式:块中未使用的字节=blocksectors*sectorsize-usedbytes来获取块中未使用的字节数,跳至addressx地址的读取相应未使用区域的字节。

本领域的普通技术人员将会意识到,这里所述的实施例是为了帮助读者理解本发明的实施方法,应被理解为本发明的保护范围并不局限于这样的特别陈述和实施例。本领域的普通技术人员可以根据本发明公开的这些技术启示做出各种不脱离本发明实质的其它各种具体变形和组合,这些变形和组合仍然在本发明的保护范围内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号