数据恢复之路(老帖勿喷)

2013/10/27 DataRecovery

格式化数据恢复感想

  目前还在开发中,给老板的那部分已经接近尾声,不过我有时间会酝酿世界顶级的数据恢复软件。可能有些人很不屑,凭啥你顶级,高手那么多,用得着你开发吗。还确实是这样,到目前为止,我所能见过的软件对于格式化恢复的能力都不尽人意。而我自己开发的这个采用了逐扇区扫描,并采用签名树提速(我自己发明的)。除此之外最强大的地方是它是可以扩展的,用户可以自己编写某种格式的dll来扩充软件功能。由于采用逐扇区扫描,尽管我已经优化了不少耗时io操作,然而速度仍然达不到superrecovery的1/2,不过欣慰的是我搜到的文件却比他多得多,这才是关键,当你听说你格式化掉别人的重要磁盘数据,曾经有一款软件可以达到存在即找到的效力,你没有珍惜,到后来追悔莫及。
  以前数据恢复知识没怎么用上,我开始对各大著名软件的格式化恢复功能进行了分析,以为大家都是逐扇区搜索,不过到目前为止我错了,因为他们居然可以解析出文件名,也就是他们利用的是硬盘上残留的目录信息,格式化的时候并没有删掉有些信息,对于目录恢复我暂时不做,不过打算以后有机会会研究。目前我的工作就是解析doc xls ppt pdf docx pptx xlsx这7种格式,然后做一个可以扩展的工具。我的这个工具无论未来多少人为特定格式编写dll给我的程序用,都不会有很大的性能损耗。目前的初步磁盘文件查找速度为30s/G 深度解析文件速度取决于文件格式和文件大小。此格式化恢复工具分几步:

  • 程序搜索ext文件夹下的dll,dll的GetSupportExtension提供该dll能识别的文件类型,主模块将所有支持的类型给用户显示。
  • 程序列出所有支持的(介质)磁盘类型,目前支持本地硬盘、移动硬盘、u盘、以后可能支持内存文件恢复,列出给用户显示的介质是各个非隐藏分区和所有硬盘的设备链接符号。
  • 用户选择需要搜索的文件类型和要恢复的介质,点击搜索开始搜索。
  • 主模块将用户选择的文件类型加入搜索,其中对于简单文件签名直接加入搜索树中,对于复杂文件签名则把函数地址加入一个链表。
      以下为初步文件搜索:
  • 主模块打开设备,从0扇区开始搜索,先搜索简单签名树,如果没有则在复杂文件签名列表中搜索,如果都没有直接进入下一个扇区。如果找到则跳转到⑥。
  • 将搜索到的初步信息显示到列表控件,如果能快速获取文件大小则可以加速遍历,否则按簇遍历(每次向后0x1000),记录每个找到的文件相关信息用于后面深度解析。
      以下为深度文件搜索:
  • 对于搜到的每一项获取信息,定位到文件,把文件数据交给dll获取详细信息,这些信息包括精确后缀名,有效性,长度,和文件的特定信息。
  • 深度文件搜索完成后,右键点击列表控件会弹出2个菜单,一个是恢复,点击就开始恢复所有选择的文件,文件名为序号,后缀为识别出来的后缀,目录为选择的目录。另一个菜单是查看文件信息,选择后可以查看dll在深度搜索时提供的特定文件信息

纯文本格式文件恢复

  看看题目,可能会觉得,这个有点太简单了吧,全磁盘都是啊,其实不然,看似最简单的东西,想做好是很难的。

  • 首先,纯文本格式可以有很多后缀,比如java h cpp hpp c txt rtf 源代码基本上都是纯文本。如何区分呢,我看到有的软件应该是利用特定标志,比如Java的import h的include rtf的rtf 。这种文本的结束符是_T(‘\0’) 因此很容易判断大小。不过区分后缀这个我并没做,因为我都把他们看成txt。
  • 其次,每种格式又有编码方式,比如最常用的UNICODE ANSI UTF-8 如何区分,如何在恢复的时候认为他们都是纯文本呢。 再次,如果在磁盘上进行纯文本检索,搜到的数据势必是海量的,如何找到真正有用的也就是真正的用户文件而不是垃圾数据和无关数据呢。 最后,如何保证高效性,因为很多数据都看似合法的,每簇都要进入txt的循环判断,如何能最大程度保证效率
Show Disqus Comments

Search

    Table of Contents