NTFS文件结构实习笔记

news/2025/1/12 18:46:01/

 

 

 

定位C盘的index­_root

先读取0扇区,获取第一分区的偏移:3F = 63扇区

这个63扇区是磁盘MBR/EBR使用的扇区数量,从0-6263扇区,不同的磁盘这个值可以不一样。但同一个磁盘这个值是一样的。

63扇区获取MFT参数:每扇区512字节,每簇8扇区,MFT开始簇C0000MFT大小F6

 

定位MFTC0000 = 786432786432*8+63 = 6291519

定位MFT_INDEX_ROOT6291519 + 2*5 = 6291529;转到6291529

 

 

它的30属性里面是文件名称:‘.

 

他的90属性里面有1-2个基本文件;不同机器这里的数量和文件不同,根据文件名称的字母比较结果,以快速确定下一步访问的INDEX缓冲区块:

接下来的A0属性,描述了VCN的开始00簇到02簇结束,共3个簇;运行list11 03 03

表示一个字节的开始LCN=03簇,共03个簇大小;

 

 

LCN簇的大小

 

LCN开始簇 3*8=24=>24+63=87;就是说INDEX87扇区开始的24个扇区里面;11的第一个1表示LCN开始簇的位数,第二个1表示簇的大小的位数。

转到87扇区:

第一个INDEX的位置 = 18H +18H里面的值)40H = 58H

每个INDEX的开始值是该文件在MFT里面的参考号,这里第一个文件的是4;第2个是8

每个INDEX的偏移8的地方的该索引的大小,这里2个都是68H

 

autoexe.bat为例,看看他的文件内容:

他的第一个值MFT号码 = 2E9E => 11943;由于每个MFT文件占用2个扇区,所以就是第11943*2=23868个扇区;这个是在MFT开始后面偏移的扇区数量,于是23868+6291519的值就是文件的开始位置=6315387

 

转到6315387扇区看看,在30属性里面有他的文件名称->autoexe.bat,他的80属性里面是他的内容:REM Dummy file for NTVDM;如果文件内容很大,这里就不是数据,而是runlist 运行数据列表,他的结构和前面一样,分析完LCN的大小和开始位置后就到对应文件里面可以看到数据了。

 

 

 

同样的,可以定位第二个分区:

由分区表链,我们可以方便快速的定位到D盘的OBR =61448688 03A9A1B1H),他的MBR/EBR = 61448625 由于第二分区没有激活(不可引导)所以EBR所在的扇区是全0EBR+63=OBR的位置,这个63扇区与前面第一分区的MBR占用扇区数量相同,根据硬盘的容量的不同,这个值是不同的。比如我这个300G的是63扇区;还有一个1T的是1024扇区。在OBR中可找到MFT的相对偏移C0000*8=6291456扇区;那么MFT = 67740144

在转到MFT的第5#文件(偏移5*2=10扇区),就找到D盘的INDEXroot了。下面的他的A0属性:

这个31里面的1表示接下来的1位数是LCN的簇数=03簇;

这个31里面的3表示在LCN簇数的位数后面的3位数是LCN的开始簇=03D478251000);

整个这个runlist 就表示 D盘的索引在偏移(251000*8=2008000扇区开始的(3*8=24个扇区里面。

转到63456688OBR+偏移),看见INDX了,没有错!

 

关于NTFS系统索引的B+树,很是让我纠结。

先看看B+树的左、中、右三棵树吧:由于我的系统在$root里面有2个文件,所以索引应该有3棵树!!我个ROOT里面的2个文件分别是:config.sysUsers(这个是“用户”文件夹)

但是它对应的runlist却只有1个?

我在这里纠结了,不是应该有3个吗?后来我相当然的认为:他不是有3个簇吗?那是不是一个簇,就是1棵树呢?于是,我人为把第1簇划为左数,第2簇为中树,第3簇为右树。

当要查找的文件字母比config.sys小,比如是aa.txt的时候,到1簇里面找;相同,在configUser之间的在2簇里面找;大于User的就到3簇里面找,呵呵,还真让我找到了!

 

文件aa在第1簇(87-94扇区):

文件gg在第2簇(95-102扇区):

 

文件zz在第3簇(103-110扇区):

然而在我的另外一台电脑里面,相同的操作系统,相同的磁盘容量,他的ROOT里面却只有1个文件,也就只有左右2棵树了;而他的runlist却有2个?就按这2个分为2棵树却也是正确的…..

这个问题就这样结局了,我不想在继续纠结。接下来的问题我至今无解啊。。。纠结。。。

树我是分出来了,但是在不同的树里面,比如在左树里面,我要查找一个文件,难道我要遍历整个左树???也许你会说,笨,你就不会用折半查找(也叫二分查找)….大哭晕,我试了。可是我却傻眼了:因为我不知道树里面一共有多少项目(你不会要我去数吧?惊讶),而且每个INDEX项并不一定都是68H大小!!有的是60H,也有70H的!!

再晕一下,微软是怎么做的?微软为什么可以?目前我只有遍历某个树!!纠结中…..狂晕中…………我究竟还有哪里没有分析到呢,求指点,求包养啊害羞

其实,到这里,我在怀疑微软是不是也是遍历的。。。号称快速高效而已。。。。当然最大可能是我没有搞懂大哭


http://www.ppmy.cn/news/517569.html

相关文章

Windows Server 2003 (NT 5.2.3790.0) 操作系统源代码编译构建指南版本 10b,上次更新 2021/10/21

Windows Server 2003 (NT 5.2.3790.0) 构建指南 版本 10b,上次更新 2021/10/21 XP-Tan 指令在 XP SP3 x86、Win7 SP1 x86/x64 & Win10 x64 下测试,其他操作系统下结果可能有所不同。 由无名匿名维护的指南,与任何从事代码工作的小组没…

DOS命令之批处理文件

批处理,顾名思义就是进行批量的处理。批处理的本质,是一堆DOS命令按一定顺序排列而形成的集合。批处理有一个很鲜明的特点:使用方便、灵活,功能强大,自动化程度高。 批处理文件是扩展名为.bat 或.cmd的无格式的文本文件…

批处理文件

批处理,顾名思义就是进行批量的处理。批处理的本质,是一堆DOS命令按一定顺序排列而形成的集合。批处理有一个很鲜明的特点:使用方便、灵活,功能强大,自动化程度高。 批处理文件是扩展名为.bat 或.cmd的无格式的文本文件…

Windows XP 常见的进程列表

Windows XP 常见的进程列表 最基本的系统进程(也就是说,这些进程是系统运行的基本条件,有了这些进程,系统就能正常运行)   smss.exe 系统进程管理 csrss.exe 子系统服务器进程 winlogon.exe 管理用户登录 service…

点击setup.exe程序无响应的问题

今天要更新一款软件,再卸载后重新安装的时候,点击setup.exe程序却没有响应,只是指针转了几圈然后就没有下文了。网上搜了一堆方法:添加权限,管理员身份运行均不行。查看进程,点击的时候setup.exe进程的确启…

SSH上传文件提示encoutered 2 errors during the transfer

今天碰到用SSH连到Linux服务器上,发现无法进行删除和上传,上传提示encoutered 2 errors during the transfer,启动tomcat提示文件系统只读,用more /proc/mounts命令发现root文件夹为只读,用mount -o rw,remount /dev/s…

Linux下的CPU性能瓶颈分析案例

问题描述: 在对notify执行性能测试时发现cpu负载突然飙高,cpu利用率高达95%。这时候就要排查是哪些线程消耗了cpu,并从代码层找到占用cpu的“罪魁祸首”。 步骤: 1. 先用psgrep找到被测试的进程pid。 比如:ps –ef|gre…

汇编学习,错误汇总

一、error A2010: Syntax error 语法错误,写错程序了 二、error A2105: Expected: instruction or directive 这个就是告诉你命令写错了,看看你是不是把某个mov写成moc了(我就是这样找了半天,却不知道masm已经提示了哪行出问题&…