分析NTFS文件系统得到特定文件的内容
找某一个文件的内容(如要读取文件D:\dir\dir2\text.txt,详细过程例如以下:
(1)读取分区表/分区链表信息,找到磁盘F的起始扇区。
(2)读取D盘的第一个扇区(分区的BOOTSETOR)取得分区的每簇大小,MFT表起始簇号等信息。
(3)读取MFT表的第五个记录(根文件夹)找到文件夹索引所在簇号。
(4)读取根文件夹索引,查找dir文件夹所在的MFT记录号
(5)读取dir文件夹的MFT记录,找到文件夹索引所在簇号。
(6)读取dir文件夹的索引,查找dir2文件夹所在MFT记录号
(7)读取dir2文件夹的MFT记录。找到文件夹索引所在簇号。
(8)读取dir2文件夹的索引,查找test.txt 所在MFT记录号
(9)读取test.txt文件的MFT记录。找到它的DATA属性。
(10)依据DATA属性中指定的文件数据存放位置读取出test.txt文件的数据。
以下我们借助工具Winhex来找到D:\dir\dir2\text.txt的内容
1.读取分区表/分区链表信息。找到磁盘F的起始扇区。
打开磁盘0号扇区
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGl5dW4xMjNneA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
红线部分是D分区的信息。蓝色方框内是D分区的物理起始扇区 0XEA58BC。
2.读取D盘的第一个扇区(分区的BOOTSETOR)取得分区的每簇大小,MFT表起始簇号等信息。
打开物理扇区号为0XEA58BC的扇区,例如以下图,红线是每簇的扇区数(0X1,每簇一个扇区)。
蓝线部分是$MFT的逻辑簇号(0X00 00 00 00 02 0A F3,是相对于D分区開始的簇号)
紫线部分是一个MFT记录所占的簇数(0X00 00 00 02)
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGl5dW4xMjNneA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
3.读取MFT表的第五个记录(根文件夹)找到文件夹索引所在簇号。
打开$MFT表,相对于D分区的簇号是0X00 00 00 00 02 0A F3,相对于整个磁盘的簇号是 0XEA58BC + 0X00 00 00 00 02 0A F3 = 0XEC63AF。
由于从D分区第一个扇区得到每簇扇区数是1,所以$MFT在D分区的偏移是0X020AF3扇区。
每一个MFT记录所占簇数是2。根文件夹是MFT中的第5个记录(记录从0開始的),根文件夹的MFT记录项所在的簇数是 0X020AF3 + 5 * 2 = 0X20AFD。
所在扇区数是 0X20AFD *每簇扇区数1 = 0X20AFD
4.读取根文件夹索引,查找dir文件夹所在的MFT记录号
打开D分区偏移扇区0X20AFD,找到属性0X90。在0415FB80一行,偏移0X08是0X01,说明是很驻属性,得到Data run, 31 08 BB 10 03,即在D分区偏移簇数0X0310BB,长度是0X8簇。
查看D分区偏移簇号0X0310BB,会看到根文件夹下的索引项,当中可看到$AttrDef,$BadClus,$Bitmap,$Boot等系统文件的索引项。
找到dir的索引项。例如以下图,红框部分是本索引项的名称dir。
前8字节是文件的MFT索引记录号(前6个字节48位是父文件夹的文件记录号。0X0375,后2个字节为序列号)
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGl5dW4xMjNneA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
5.读取dir文件夹的MFT记录,找到文件夹索引所在簇号。
以下计算dir 的MFT表项在$MFT中的簇号:
一个MFT表项占两个簇,第0X0375项是相对于$MFT的第0X0375*2= 0X6EA簇,也就是相对于D分区的第 0X02 0A F3 + 0X6EA = 0X211DD簇(扇区是0X211DD)
6.读取dir文件夹的索引,查找dir2文件夹所在MFT记录号
打开扇区0X211DD,例如以下图。
0423BB00一行。偏移0位置是0X00。说明是常驻属性,从紫色框中得到dir2的MFT记录项的记录号是0X0376
7.读取dir2文件夹的MFT记录,找到文件夹索引所在簇号。
如今来确定dir2的MFT记录项所在的簇数
$MFT開始簇数 + 0X0376*每记录簇数
0X020AF3 + 0X0376 *2 = 0X211DF
8.读取dir2文件夹的索引,查找test.txt 所在MFT记录号
打开D分区偏移 0X211DF 簇
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGl5dW4xMjNneA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
可看到test.txt 的MFT记录号是 0X0377
9.读取test.txt文件的MFT记录,找到它的DATA属性。
得到test.txt 的MFT记录项在D分区的偏移簇号
=$MFT表的偏移簇数 + test.txt记录号*每MFT记录簇数
=0X020AF3 + 0X0377 *2
= 0X211E1(簇号)
= 0X211E1(扇区号)
打开0X211E1(扇区号):
从0x30文件名称属性能够看到test.txt的文件名称。
0X80数据属性中能够得到文件内容
10.依据DATA属性中指定的文件数据存放位置读取出test.txt文件的数据。
从0X80数据属性中能够知道此属性是常驻属性。直接看到test.txt的文件内容,“This is test for NTFS!”.
另外,假设我继续向test.txt 写入数据。DATA属性中的数据会添加。下图中红线之间的数据是后来添加的。
可是当文件内容在增多时。0X80数据属性从常驻属性改为很驻属性,文件内容不会直接存储在此属性中。而是其它簇中,依据Data run能够定位到。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbGl5dW4xMjNneA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
OX80数据属性。0X01说明是很驻属性。
Data run,31 02 4C 0D 01;说明内容从分区偏移簇号0X010D4C開始。长度是0X02个簇。
打开簇号是0X010D4C的扇区,能够看到test.txt的文件内容:
(本文如有错误。请指正。多谢。)
分析NTFS文件系统得到特定文件的内容的更多相关文章
- NTFS文件系统的单个文件最大到底有多大?
于NTFS文件系统的单个文件最大到底有多大? 闲来无事突然想到这个问题,到网上搜索了一下也没有一个固定的解释. 于是到微软官方知识库去寻找答案: 注意:基础硬件限制可能会对任何文件系统施加额外的分区大 ...
- node遍历给定目录下特定文件,内容合并到一个文件
遍历目录用了fs.readdir这个异步方法,得到当前目录下所有的文件和目录的一个数组.然后判断: if文件,并且后缀符合设定的规则(本文例子是符合后缀ts,js)直接用同步方法写入, if目录,继续 ...
- 解决NTFS文件系统下的文件/文件夹属性中没有安全选项卡的问题
注册表项: HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer 键:NoSecurityTab ...
- 详解NTFS文件系统
一.分析NTFS文件系统的结构 当用户将硬盘的一个分区格式化为NTFS分区时,就建立了一个NTFS文件系统.NTFS文件系统同FAT32文件系统一样,也是用“簇”为存储单位,一个文件总是占用一个或多个 ...
- NTFS文件系统详细分析
NTFS文件系统详细分析 第一部分 什么是NTFS文件系统 想要了解NTFS,我们首先应该认识一下FAT.FAT(File Allocation Table)是“文件分配表”的意思.对我们来说 ...
- 在/proc文件系统中增加一个目录hello,并在这个目录中增加一个文件world,文件的内容为hello world
一.题目 编写一个内核模块,在/proc文件系统中增加一个目录hello,并在这个目录中增加一个文件world,文件的内容为hello world.内核版本要求2.6.18 二.实验环境 物理主机:w ...
- 使用QFileInfo类获取文件信息(在NTFS文件系统上,出于性能考虑,文件的所有权和权限检查在默认情况下是被禁用的,通过qt_ntfs_permission_lookup开启和操作。absolutePath()必须查询文件系统。而path()函数,可以直接作用于文件名本身,所以,path() 函数的运行会更快)
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/Amnes1a/article/details/65444966QFileInfo类为我们提供了系统无 ...
- 【Linux学习】Linux文件系统5—查看文件内容命令
Linux文件系统5-查看文件内容命令 cat: 由第一行开始显示文件内容 more: 一页一页地显示文件内容,空格键可以继续翻页显示下一页内容 less:与more类似,但是可以往前翻页 head: ...
- Git始终忽略特定文件的某一行内容
笔者在编写Z Shell文件的时候经常会使用到set -x来开启调试,但不希望提交到仓库 解决方案 Git提供了一种文件过滤器,此方法可以帮助在提交时移除set -x 我们先来编写脚本,如何移除这一行 ...
随机推荐
- [Redux] Passing the Store Down Explicitly via Props
n the previous lessons, we used this tool to up level variable to refer to the Redux chore. The comp ...
- 使用Win32::OLE操作Excel——Excel对象模型
像VBA操作Excel一样,Win32::OLE模块也是通过对象操作来控制Excel. 如果想自动化操作和控制Excel应用程序,则必须要与Excel对象模型所提供的对象进行交互.理解和熟悉Excel ...
- gnuplot常用技巧
一. 基础篇: 在linux命令提示符下运行gnuplot命令启动,输入quit或q或exit退出. 1.plot命令 gnuplot> plot sin(x) with l ...
- MySql 跟踪命令
SHOW ; SHOW FULL PROCESSLIST; ; USE table1; ; SHOW PROFILES; ; SHOW TABLES; SHOW PROFILES; SHOW PROF ...
- sql 合并列
1.合并一列用“ ,”号隔开. 如下图: 这样的一列我想直接在sql里面合并最后变成:586,444,444,444,444这样的效果,平常的做法是直接把这列数据取出来,在前端循环加上逗号,但其实是可 ...
- 访问MySQL数据库时,报“找不到请求的 .net Framework 数据提供程序。可能没有安装。”的解决方案
最近开发了一个系统,在测试环境上进行部署(win7环境)并测试,没有发现问题:但是把系统部署到win Server2008R2上之后,部分页面就报“找不到请求的 .net Framework 数据提供 ...
- birt报表图标中文显示为框框的解决方法
birt报表中图标部分的中文显示为框框,其他部分中文显示正常 解决办法:修改jdk中的字体设置/jdk1.6.0_13/jre/lib /fonts/fonts.dir 1.将宋体字体copy到/jd ...
- 浅析 JavaScript 组件编写
之前因项目需要也编写过一些简单的JS组件,大多是基于JQuery库的,一直也没有过总结,导致再次写到的时候还去Google, 近日看到一个文章总结的挺好,拿过整理一下做个备忘. 此次同样是基于jque ...
- 获取本机CPU,硬盘等使用情况
早上的时候接到主管的一个任务,要获取服务器上的cpu,硬盘, 数据库等 的使用情况,并以邮件的方式发给boss, = =没办法,公司的服务器真是不敢恭维,顺便吐槽一下公司的网速,卡的时候30k左右徘徊 ...
- web api简单验证实现办法
需要使用WEBAPI,但是有验证问题没解决.后来参考网上文章做了一下DEMO 思路: 就是根据用户的账号在服务端加密一个字符串,然后返回给用户端. 具体: 一个用户编号用于唯一身份识别,密码,一个密钥 ...