首页 > 其他分享 >NTFS文件系统文件寻址实操记录

NTFS文件系统文件寻址实操记录

时间:2024-05-25 15:58:17浏览次数:13  
标签:文件 00 NTFS 扇区 索引 寻址 MFT 实操 属性

前言

最近在学NTFS,发现网上的博客千篇一律,讲的不够通透,于是决定自己写一篇。

本文章通过寻找文件地址这个任务,讲述了NTFS文件系统$Boot文件、$MFT文件的结构,对$MFT文件中的A0、80属性进行了重点分析。

本文对于NTFS的具体每种属性的字段含义不会详细阐述,因此可以预先了解相关知识,或者在看到文中提到这些知识时使用搜索引擎详细查证一下。

个人认为讲的比较好的博客和资源:

  • https://www.cnblogs.com/lsh123/p/15789479.html
  • https://blog.csdn.net/enjoy5512/article/details/50935972
  • https://www.ntfs.com/ntfs-partition-boot-sector.htm
  • https://github.com/BigGan/Windows-Hack-Programming/issues/3
  • https://www.intohard.com/thread-61790-1-1.html

任务背景

在一块NTFS硬盘中存在如下文件:
在这里插入图片描述
其中demo文件夹中有如下文件:
在这里插入图片描述
目标是,通过解析NTFS底层数据,找到上述所有文件的源数据。

当然,无论是010 editor还是winhex还是各类工具,其实都能够很快的通过程序找到上述文件,但是为了探究系统文件寻址的底层流程,我们认为有必要在不使用解析程序的条件下走一遍这样的流程。

实验过程

使用winhex打开硬盘:
在这里插入图片描述
硬盘的前8个字节告诉我们这是一块NTFS的硬盘。

众所周知,NTFS包含了16个元文件和数据区,其结构如下:
在这里插入图片描述

其中最开头的Boot Sector则对应了$Boot元文件,它从0号扇区开始,向后占用16个扇区。Master File Table则对应了$MFT文件,其开始位置可以在$Boot元文件中找到。要找到硬盘文件的具体位置,主要就分析这两个文件。

1. 分析$Boot文件

$Boot文件(后简称Boot文件)在第一扇区(0号扇区),从偏移量为BH的位置开始,长度为73个字节的数据为文件内的BPB结果,该结构记录了有关文件系统的重要信息。

在样例中,Boot文件内容如下所示,图中勾选内容为其BPB字段。
在这里插入图片描述
BPB中比较重要的是如下几个字段:

Offsets数据含义
BH-CH00 02每个扇区512字节,0.5KB
DH08每个簇8个扇区,4096字节
30H-37H00 00 0C 00 00 00 00 00$MFT文件开始簇号为786432
40H-43HF6 00 00 00每个MFT记录占246簇
44H-47H01 00 00 00每个索引占1簇

此时可以通过上述数据计算$MFT文件所在扇区。由于一个簇8个扇区,因此$MFT文件所在扇区为786432x8=6291456,跳转到该扇区后数据内容如下所示:
在这里插入图片描述

2. 分析$MFT文件

$MFT文件(简称MFT文件)包含了多个文件目录项,每一个文件目录项占用2个扇区,以46 49 4C 45H(FILE)开头。并且,MFT文件中的第一个文件目录项必然是MFT元文件自身,第6个文件目录必然是根目录。为了找到具体的文件,我们需要找到根目录的文件目录项。由于MFT文件目录项所在扇区为786432x8=6291456,因此根目录文件目录项和MFT文件目录项相差5个扇区,在6291456+5x2=6291466扇区,数据内容如下。
在这里插入图片描述
一般而言,根目录的文件目录项中会存在10H、30H、40H、50H、90H、A0H、B0H几种属性,而根目录的具体内容则在A0H属性中解析。图中的A0H属性使用了run list。一般而言,属性的长度如果不够存数据,则会使用run list进行跳转,将数据存在另外的空间中。如果某属性只有1个run list的话,只需按照如下方式解析即可:
在这里插入图片描述
如果有多个run list,解析方式可以看这个链接:
https://github.com/BigGan/Windows-Hack-Programming/issues/3

基于这种方式,由于上图的run list为11 01 24H,解析结果说明run list指向的起始簇号为24H=36簇,即36x8=288扇区,且大小为1簇,即4KB。跳转到288扇区得到根目录的具体数据(索引缓冲区)如下:
在这里插入图片描述

3. 分析根目录索引缓冲区

文件目录索引缓冲区的阅读方法类似于单向链表的遍历方式,系统需要先从索引头开始,读取第一个索引项的起始位置,并且结合索引项的长度计算下一个索引项的起始位置。为了方便表述先假设上述缓冲区开始的偏移是0H(本来是24000H)。

索引缓冲区索引头以49 4E 44 58H(INDX)开头,在其偏移为18H处保存了第一个索引项的偏移地址,即图中的40H,因此得到第一个文件的索引项的开始位置为18H+40H=58H。从索引项的开头向后数的第9个字节,即偏移为8H的位置的一个字节,为该索引项的长度,图中为68H,因此得到该索引在68H+58H=C0H处结束,此时可以确定第一个文件的索引项内容如下:
在这里插入图片描述
以此类推,可以得到根目录中所有文件索引项的起始位置和大小:

文件ID开始位置索引项大小文件信息
158H68H
258H+68H=C0H68H
3C0H+68H=128H60H
134F0H68HCLEAN.PY
14558H60Hdemo文件夹
155B8H78Hpytorch_model.bin

解析根目录中索引项的目的在于读取文件的MFT参考号,这一数据项的含义在于确定该文件在MFT文件中是第几个文件记录。在索引项中,MFT参考号为索引项的第一个字节。以demo文件夹为例,其索引项如下所示:
在这里插入图片描述
得到其MFT参考号为29H,即41。这说明该文件夹是MFT文件中第41个文件记录。由于MFT文件在6291456扇区,而一个文件记录占用2个扇区,因此该文件夹的MFT文件记录在磁盘中的位置为6291456+41x2=6291538扇区,具体内容如下:
在这里插入图片描述

4.寻找demo文件夹和demo.txt

此时我们已经找到了demo文件夹的具体内容。为了找到demo文件夹中的demo.txt,我们需要解析其中的90H属性。

90H属性是索引根属性,A0H是索引分配属性。为什么之前根目录没有分析90H属性,而在demo文件夹这个目录中我们就要分析90H属性呢?
这和目录大小有关。当一个目录很小时,就可以完全存放在索引根属性(90H属性)中,这时该目录就只需要一个属性来描述。但是有的目录太大不能完全存放在索引根中时,这时就要用到$INDEX_ALLOCATION(A0H)索引分配属性来存放它的索引项。
而上面的demo文件夹中不存在A0H属性,说明90H属性足够存放目录内容

解析上述90H属性,发现其中只存在一个索引项,MFT参考号为2AH,即40,这意味着demo.txt存储在MFT文件的第40个文件记录中,计算得到该文件所在扇区编号为6291540,数据内容如下所示。
在这里插入图片描述
能很清楚的看到文本中的内容,说明数据读取无误。

5.寻找pytorch_mode.bin

在根目录索引缓冲区中,pytorch_model.bin的索引项如下所示:
在这里插入图片描述
其MFT参考号为为27H,用前文所述方法可以计算出文件的MFT目录项在6291534扇区,内容如下:
在这里插入图片描述
由于该文件是一个大文件,因此数据属性(80H属性)使用了run list。

第一个run list的内容为23 83 88 01 88 15,解析结果为,数据大小为018883H(100483),起始簇号为1588H(即5512簇,5512*8=44096扇区)。跳转到44096扇区,可以看到该文件的第一部分:

在这里插入图片描述
第二个run list为11 01 25,解析得出该文件在37簇,内容如下:

在这里插入图片描述

至此所有文件在底层的位置已经全部找到。

标签:文件,00,NTFS,扇区,索引,寻址,MFT,实操,属性
From: https://blog.csdn.net/weixin_43907802/article/details/139195889

相关文章

  • 1、交换与寻址转发
    1.1从交换谈起如下图,数据通过接口板发送和接收。数据从任意接口进来,从任意接口出去,如果用通信线缆连接,需要N*(N+1)/2根线。为了解决需要大量线连接的问题,引入了交换网板。交换网属于“三无”部件,即与设备配置无关、与协议无关、与数据包类型无关。交换网专注于在入接口和出......
  • 「璞华易表」重磅发布2.0版本!企业数据资产入表的实操业务进入精细化运作阶段(附视频)
    数据资产作为经济社会数字化转型进程中的新兴资产类型,正日益成为推动数字中国建设和加快数字经济发展的重要战略资源。财政部会计司2023年8月正式发布《企业数据资源相关会计处理暂行规定》(简称《暂行规定》),为企业数据资产“入表”提供了操作指引,标志着我国数据资产入表完成了......
  • Poco框架实操:对节点可实施的操作
    此文章来源于项目官方公众号:“AirtestProject”版权声明:允许转载,但转载必须保留原链接;请勿用作商业或者非法用途一、前言之前我们介绍了Poco的节点关系,以及获取节点属性的一些方法,具体详情可以点击查看我们历史推文~今天我们就来看看我们对Poco节点还能进行什么操作吧!二、Po......
  • ntfs
    储备:首先需要明白什么是文件系统。 文件系统是系统对文件的存放排列方式,不同格式的文件系统关系到数据是如何在磁盘进行存储,文件名、文件权限和其他属性也存在不同。Windows操作系统支持NTFS,FAT32,andexFAT三种不同文件系统。NTFS是目前Windows系统中一种现代文件系统,目......
  • AT89S52单片机寻址时未用到的地址线同时设置为‘1’或‘0’的原因
    AT89S52单片机寻址时未用到的地址线同时设置为‘1’或‘0’的原因在AT89S52单片机或其他类似微控制器中,未用到的地址线需要设置为同为0或同为1的原因主要与以下几个方面有关:1.确定性和稳定性确保未用到的地址线设置为同一电平(全为0或全为1)可以避免这些未使用的引脚在悬空状态......
  • hashMap寻址算法
    hashMap寻址算法计算对象的hashCode()。再进行调用hash()方法进行二次哈希,hashcode值右移16位再异或运算,让哈希分布更为均匀。最后(capacity-1)&hash得到索引。为何HashMap的数组长度一定是2的次幂计算索引时效率更高:如果是2的n次幂可以使用位与运算代替取模。扩容时......
  • 已卸载Tuxera NTFS for Mac后仍在ntfs磁盘插入后仍有提示
    “Microsoft NTFS by Tuxeracouldnotvalidateyourproductkey.PleasecontactTuxera'semailsupportforhelp.”我之前安装过MicrosoftNTFS但是过期了,我就给它卸载了,但是每次插入u盘还是会弹出上面一行内容的提示框。于是我找到这个朋友发的[文章](https://zhuanla......
  • FAT32与NTFS的区别
    FAT32与NTFS的区别FAT32是较旧的文件系统,而NTFS是较新的文件系统。NTFS支持更大的文件和分区,提供了更好的安全功能,如文件加密和访问权限。NTFS支持高级功能,如磁盘配额和文件压缩,而FAT32不提供这些选项。FAT32主要用于小型磁盘,如U盘和存储卡,而NTFS用于大中型空间容量的......
  • 直播预约丨《袋鼠云大数据实操指南》No.2:实时开发,如何成为数据智能化的有效驱动力
    近年来,新质生产力、数据要素及数据资产入表等新兴概念犹如一股强劲的浪潮,持续冲击并革新着企业数字化转型的观念视野,昭示着一个以数据为核心驱动力的新时代正稳步启幕。面对这些引领经济转型的新兴概念,为了更好地服务于客户并提供切实可行的实践指导,自3月20日起,袋鼠云将推出全新......
  • 面实操2
    华为赛意16jvm运行时内存栈帧的动态链接arrayList初始化及扩容arraylist按照某实例字段分组求个数springBean的循环依赖问题springioc的扩展点,实例化、初始化配置中心实现原理mysql索引失效mysql#$区别,一对多映射线程池主要参数,拒绝策略kafka速度快的机制mq消息堆积......