首页
社区
课程
招聘
[献丑]本人突破性进展,NTFS分区数据静态恢复
发表于: 2008-3-13 21:15 27338

[献丑]本人突破性进展,NTFS分区数据静态恢复

2008-3-13 21:15
27338
【献丑】本人突破性进展,NTFS分区数据静态恢复

花了5天,终于写出了NTFS分区静态数据恢复扫描引擎。看看如图演示,跟WINHEX分析的结果一样

[课程]Linux pwn 探索篇!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (33)
雪    币:
能力值: (RANK: )
在线值:
发帖
回帖
粉丝
2
试试还原一个多Run兼有部分全0数据的的文件.
2008-3-13 21:26
0
雪    币: 168
活跃值: (233)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
3
我的扫描恢复引擎支持多Data Runs性质,但是你说如果 在 多Data Runs描述时,出现破坏痕迹,你是无法猜测 Data Runs的链。 不过还有一种补救方法,就是 扫描Bitmap,来组合数据链。 运气好的话,可以组合成功,运气不好的话,那就没有办法。
2008-3-13 21:31
0
雪    币: 112
活跃值: (16)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
4
支持猪兄,搞不懂,高科技!
2008-3-13 21:39
0
雪    币:
能力值: (RANK: )
在线值:
发帖
回帖
粉丝
5
我没说Data Run被破坏, 我只是指你贴的例子只有一个Run, 并不能证明完全达到目的, 建议你试试对多Run的文件或其他极端的例子而已.
2008-3-13 22:09
0
雪    币: 168
活跃值: (233)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
6
确实是照片显示一个数据信息,多Data Run的分析,在我的引擎是已经成功分析的,这个难度不大。只是演示图片没有全部打印完。任何静态数据恢复软件都有它的限制性。极端的例子,有太多,不是所有极端的例子,你都可以恢复。 我在写这个引擎的时候,是参考了现有的国外商业数据恢复软件,没有任何一款,能在所谓的极端例子进行恢复。这类软件,需要的是一个平衡性和科学性。根据当前的环境,做最好的恢复,就可以了。

还有就是,数据恢复重点就是Data Runs的分析,你分析出来了,你的目的也就达到了。 理论上是不受文件格式恢复的。呵呵.....
2008-3-13 22:16
0
雪    币: 116
活跃值: (38)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
能提供源码吗?学习一下!谢谢!
2008-3-14 09:48
0
雪    币: 381
活跃值: (140)
能力值: ( LV13,RANK:330 )
在线值:
发帖
回帖
粉丝
8
至少也要提供个Demo
2008-3-14 13:19
0
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
9
支持三哥大作
2008-3-14 13:39
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
请问下如果多个RUN位于两个扇区交界处你是如何处理的啊?谢谢
2008-3-18 14:01
0
雪    币:
能力值: (RANK: )
在线值:
发帖
回帖
粉丝
11
你是想问怎么处理 UPDATE_SEQUENCE_ARRAY 吧?
在读入扇区后, 正式处理前, 要把 UPDATE_SEQUENCE_ARRAY 的内容填回原来的地方才能还原成真正的原始数据.
2008-3-18 21:53
0
雪    币: 161
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
PFC
12
开源吗?兄弟。

我的网站
2008-3-18 21:55
0
雪    币: 168
活跃值: (233)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
13
我的引擎似乎没有分析到这种特例。不过按照我的理论来设计,应该也兼容这种布局。Data Run的描述都是在FILE RECORD里面,其中有一个字节是专门描述Data Run数据布局,所以,你只要先把FILE RECORD数据读取到内存中,就不存在你说的扇区交界处这样说法。不过实际情况很有很多种,我目前遇到的有5种情况,如果这5中情况处理不当,会出现扫描错误。
2008-3-18 22:07
0
雪    币: 168
活跃值: (233)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
14
你说的UPDATE_SEQUENCE_ARRAY属性,我没有看过资料有介绍。不过,倒是让我学到新的东西。我去研究研究
2008-3-18 22:08
0
雪    币:
能力值: (RANK: )
在线值:
发帖
回帖
粉丝
15
UPDATE_SEQUENCE_ARRAY(简称USA) 不是属性, 而是表结构中的一个结构字段, 这是NTFS使用的一种校验技术, 简单的说就是对需要存放多扇区的记录(如MFT或是INDX表), 在每个扇区的最后一个WORD写上一个相同的值(UPDATE SEQUENCE NUMBER, 简称USN), 而相应位置上原来的值则依次保存在一个指定的位置上, 这个位置就叫UPDATE_SEQUENCE_ARRAY, 它的第一项就是USN, 后续的项就是从各扇区相同位置保存过来的原始值.
当读入一个MFT表(或INDX表)时, 如果各扇区的最后一个WORD的值与USN不同, 则表示写入时有问题, 这个MFT表可能已被损坏.
如果你的程序没处理USA, 说明你对NTFS的理解还不够深入.  
或者, 你已经处理了USA, 只不过不知道它的正式名称叫USA? 
BTW: 我碰见过几个搞NTFS的人, 但没一个人知道要处理USA, 希望你不是又一个.
2008-3-18 22:33
0
雪    币: 168
活跃值: (233)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
16
我明白你说什么了。你说的是 Update Sequence Array(usa) 吧。 你用结构描述我一时反应不出来,后来搜索 UPDATE_SEQUENCE_ARRAY 才发现msdn 有个描述,这个是FILE RECORD 头里面一个字段[透露太多了]。

本人已经处理了,但是在实战过程中,发现这个标志位阻碍了静态数据恢复的做大恢复效果。分析的过程中,即使usa校验不一致,但是FILE RECORD里面还有是有残留的Data Run描述,我个人认为还是不校验USA好。不过,这样会遇到各种变态的Data Run描述。应该以 FILE 标志 来校验,就可以了。

BTW: 我是新手,你是牛人。相互切磋,就OK 。 NTFS数据结构庞大,我得慢慢熟悉
2008-3-19 00:09
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
谢谢,我明白了
2008-3-19 11:54
0
雪    币: 248
活跃值: (26)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
18
arab正解,不过,这兄弟少见啊? 不是大号吧.
猪头三如果没处理的话,就等着出错吧.
狙剑的磁盘文件管理最早的版本也没处理这个,直到5.X才开始处理,汗,所以早期有的会出总题.
2008-3-19 14:27
0
雪    币: 168
活跃值: (233)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
19
arab很少见。
我在写代码的时候,是处理这个USA标志位。后来我发现少了很多信息。后续的版本,我就没有处理了。只在扫描时做兼容性处理。
不过,等我完成FAT32部分,在看看NTFS的稳定性测试,如果稳定性跟USA标志位有关系,那么可以在恢复这部分的校验。

之前的回复如下:

本人已经处理了,但是在实战过程中,发现这个标志位阻碍了静态数据恢复的做大恢复效果。分析的过程中,即使usa校验不一致,但是FILE RECORD 里面还有是有残留的Data Run描述,我个人认为还是不校验USA好。不过,这样会遇到各种变态的Data Run描述。应该以 FILE 标志 来校验,就可以了。
2008-3-19 15:05
0
雪    币: 101
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
弱弱的问下:资料和WINHEX上都显示引导扇区偏移0x40位置记录的是每file recorder所使用的簇数。这个值是否可信。为什么看NTFS分区上都显示的是0xF6呢?
还有,关于NTFS的资料除 linux的ntfs doc外,还有什么较好的资料没?
貌似MSDN上没什么关于NTFS的资料,还是我没找到?
再问个外行的话,NTFS的数据恢复是不是遍历MTF中的file recorder来查找文件?
2008-3-19 20:05
0
雪    币:
能力值: (RANK: )
在线值:
发帖
回帖
粉丝
21
除非你认为这个扇区被破坏了, 否则应该当做是可信的.
至于为什么是F6, 那是因为NTFS的特殊计算方式: 它本来代表的是每个MFT记录的簇数, 但当这个数大于8时, 它改用2^(-x)的方式来表示每个MFT记录的字节数, 即F6=-10, 所以就是2^(-(-10)) = 1024


MSDN上肯定没有这么详细的内容. 如果你有当年泄露的NT/2000的源码的话, 那倒是个好参考.


这种RAW方式是最后的方式.
2008-3-19 22:41
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
arab这么热情的回答,怎么没有人加威望呢?

另外请问:数据恢复技术应掌握哪些方面的知识,麻烦提供些经典的资料
2008-3-19 22:49
0
雪    币:
能力值: (RANK: )
在线值:
发帖
回帖
粉丝
23
你指不把USA后面的项填回去? 那肯定会出错~~~~


做为恢复软件, 当然可以忽视USN校验. 而且NTFS还有一个好处就是, MFT空间是在格式化时分配好的, 除非曾经遇到过磁盘空间不足, 否则MFT空间会是永久保留给MFT使用的.


不管你信不信, 我是新来的, 没有大号. 你不妨看看我发贴所涉及领域, 找找看雪中有谁和我兴趣/知识一样, 我倒愿意认识那个"大号".
2008-3-19 22:54
0
雪    币:
能力值: (RANK: )
在线值:
发帖
回帖
粉丝
24
首先是磁盘引导区的基本结构, 象BPB, 分区表, MBR, BootSector, 这些知识必不可少.
其次是文件系统的基本格式, 这个就多了, FAT, NTFS, Ext2/3/4, 等等, 主要看你的目标系统是什么, 而且最好能找到相应的实现. 用WinHex之类的工具对照着看进步会快些.
至于资料嘛, Linux Kernel的fs源码是一个很好的参考. 另外市面上好象有一堆的关于数据恢复的书, 中文的, 可以先了解个大概, 再看英文资料, 要不然一下看英文的钻进那堆专用术语中就晕了.
2008-3-19 23:06
0
雪    币: 168
活跃值: (233)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
25
引用:
最初由 猪头三发布 查看帖子
我在写代码的时候,是处理这个USA标志位。后来我发现少了很多信息。后续的版本,我就没有处理了。只在扫描时做兼容性处理。
你指不把USA后面的项填回去? 那肯定会出错~~~~

引用:
最初由 猪头三发布 查看帖子
即使usa校验不一致,但是FILE RECORD 里面还有是有残留的Data Run描述,我个人认为还是不校验USA好。不过,这样会遇到各种变态的Data Run描述。应该以 FILE 标志 来校验,就可以了
做为恢复软件, 当然可以忽视USN校验. 而且NTFS还有一个好处就是, MFT空间是在格式化时分配好的, 除非曾经遇到过磁盘空间不足, 否则MFT空间会是永久保留给MFT使用的


难怪呢,我说着看得郁闷:静态数据恢复还要回填USA数值?  USA是一个保护校验标志位,就如你所说的。害我想了一天,我以为理解错了。 静态数据恢复时不用扫描USA标志位,可以最大榨取信息*_*。 而且我做的就是数据恢复软件呀。 看标题呀[静态数据恢复]......呵呵, 技术切磋愉快。

这个帖子,讨论得不错!也引发一个牛人出来。
2008-3-19 23:32
0
游客
登录 | 注册 方可回帖
返回
//