NTFS文件结构实习笔记
定位C盘的index_root:
先读取0扇区,获取第一分区的偏移:3F = 63扇区
这个63扇区是磁盘MBR/EBR使用的扇区数量,从0-62共63扇区,不同的磁盘这个值可以不一样。但同一个磁盘这个值是一样的。
在63扇区获取MFT参数:每扇区512字节,每簇8扇区,MFT开始簇C0000,MFT大小F6:
定位MFT:C0000 = 786432,786432*8+63 = 6291519;
定位MFT_INDEX_ROOT:6291519 + 2*5 = 6291529;转到6291529:
它的30属性里面是文件名称:‘.’
他的90属性里面有1-2个基本文件;不同机器这里的数量和文件不同,根据文件名称的字母比较结果,以快速确定下一步访问的INDEX缓冲区块:
接下来的A0属性,描述了VCN的开始00簇到02簇结束,共3个簇;运行list:11 03 03
表示一个字节的开始LCN=03簇,共03个簇大小;
LCN簇的大小
LCN开始簇 3*8=24;=>24+63=87;就是说INDEX在87扇区开始的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所在的扇区是全0,EBR+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的开始簇=03D478(251000);
整个这个runlist 就表示 D盘的索引在偏移(251000*8=)2008000扇区开始的(3*8)=24个扇区里面。
转到63456688(OBR+偏移),看见INDX了,没有错!
关于NTFS系统索引的B+树,很是让我纠结。
先看看B+树的左、中、右三棵树吧:由于我的系统在$root里面有2个文件,所以索引应该有3棵树!!我个ROOT里面的2个文件分别是:config.sys和Users(这个是“用户”文件夹)
但是它对应的runlist却只有1个?
我在这里纠结了,不是应该有3个吗?后来我相当然的认为:他不是有3个簇吗?那是不是一个簇,就是1棵树呢?于是,我人为把第1簇划为左数,第2簇为中树,第3簇为右树。
当要查找的文件字母比config.sys小,比如是aa.txt的时候,到1簇里面找;相同,在config到User之间的在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的!!
再晕一下,微软是怎么做的?微软为什么可以?目前我只有遍历某个树!!纠结中…..狂晕中…………我究竟还有哪里没有分析到呢,求指点,求包养啊…
其实,到这里,我在怀疑微软是不是也是遍历的…。。。号称快速高效而已。。。。当然最大可能是我没有搞懂
NTFS文件结构实习笔记相关推荐
- 实习笔记 —— MyBatis III (输入/输出映射)
系列文章目录 实习笔记 -- Spring基础 实习笔记 -- IOC反转控制(xml配置文件 + 注解) 实习笔记 -- AOP开发I 实习笔记-- AOP开发II(AOP中Advice的类型) 实 ...
- 实习笔记—— AOP开发II(AOP中Advice的类型)
系列文章目录 实习笔记 -- Spring基础 实习笔记 -- IOC反转控制(xml配置文件 + 注解) 实习笔记 -- AOP开发I 文章目录 系列文章目录 一.AOP中Advice的类型的XML ...
- 实习笔记——电力通信网
实习笔记--电力通信网 电力通信网络资源对象的分类定义 网络资源划分要点 基础设施及线路走廊网络 线缆网网络 机房空间及设备 传输网网络 接入网网络 业务系统网络 基础设施及线路走廊网络资源 线缆网络 ...
- 实习笔记 —— Git II(远程提交)
系列文章目录 实习笔记 -- Spring基础 实习笔记 -- IOC反转控制(xml配置文件 + 注解) 实习笔记 -- AOP开发I 实习笔记 -- AOP开发II(AOP中Advice的类型) ...
- 实习笔记 —— SSM三个框架的整合 V (分页功能)
系列文章目录 实习笔记 -- Spring基础 实习笔记 -- IOC反转控制(xml配置文件 + 注解) 实习笔记 -- AOP开发I 实习笔记 -- AOP开发II(AOP中Advice的类型) ...
- 实习笔记 —— MyBatis II (MyBatis基本数据库操作)
系列文章目录 实习笔记 -- Spring基础 实习笔记 -- IOC反转控制(xml配置文件 + 注解) 实习笔记 -- AOP开发I 实习笔记-- AOP开发II(AOP中Advice的类型) 实 ...
- 实习笔记 —— Maven
系列文章目录 实习笔记 -- Spring基础 实习笔记 -- IOC反转控制(xml配置文件 + 注解) 实习笔记 -- AOP开发I 实习笔记 -- AOP开发II(AOP中Advice的类型) ...
- 实习笔记 —— SSM三个框架的整合 III (对后台管理页面进行编写)
系列文章目录 实习笔记 -- Spring基础 实习笔记 -- IOC反转控制(xml配置文件 + 注解) 实习笔记 -- AOP开发I 实习笔记 -- AOP开发II(AOP中Advice的类型) ...
- 实习笔记 —— SSM三个框架的整合 VIII (添加用户)
系列文章目录 实习笔记 -- Spring基础 实习笔记 -- IOC反转控制(xml配置文件 + 注解) 实习笔记 -- AOP开发I 实习笔记 -- AOP开发II(AOP中Advice的类型) ...
最新文章
- DNS服务,A记录,URL转发,MX记录,NS记录,CNAME记录,解释与设置教
- 临沂机器人火锅_临沂知名智能无人火锅前景
- LeetCode 8 字符串转整数 (atoi)
- Jar包反编译后修改源码再编译
- 成功解决 修改pip的默认安装packages包的路径
- 什么是OR MAPPING
- 初学C遇到的一些知识点汇总
- oracle初级系列教程
- 零基础学python-如何从零基础自学Python?
- c语言词法分析程序实验报告,词法分析器实验报告
- java正则表达式双引号_java正则表达式去掉双引号
- 很邪门的事,你知道多少?
- telegram 语音通话语音呼叫一直连接中
- 机械加工中304不锈钢与316不锈钢有什么区别?
- C语言课设——宿舍管理
- 2018看得见的未来:超融合六大趋势
- kafka:默认的分区策略
- matlab的imshow python中cv2.imshow及plt.imshow相关测试
- niosii spi 外部_转载:NIOS II spi详解
- 第十三周 任务三
热门文章
- 佛山机场安装RFID行李跟踪系统 可全流程追踪行李
- 你需要这样一个Ros软路由—— 路由器+外网+一号通ip线路=动态ip的WiFi信号
- 【硬件和驱动相关】wifi设备没有工作 ubuntu18.0.4 无线网卡 intel 6 AX200
- html360全景图原理,html360°全景展示 示例
- java 当前线程 等待_Java 多线程等待
- EPICS记录参考--sub-Array记录(subArray)
- BadBoy录制JMeter脚本
- 医学图像处理——影像组学的建模过程
- C. Edgy Trees---(思维题+并查集的运用)---Codeforces Round #548 (Div. 2)
- IT监控:Grafana vs Datadog详细比较