基于元神操作系统实现NTFS文件操作(六)

news2024/11/30 6:43:56

1. 背景

本文主要介绍$Root元文件属性的解析。先介绍元文件各属性的属性体构成,然后结合读取到的元文件内容,对测试磁盘中目标分区的根目录进行展示。

2. $Root元文件属性的解析

使用每个属性头偏移0x04-0x07处的值可以从第一个属性开始依次定位下一个属性,即30H属性的开始位置为10H属性的开始位置加上10H属性头偏移0x04-0x07处的值,40H属性的开始位置为30H属性的开始位置加上30H属性头偏移0x04-0x07处的值,依此类推。

(1)10H属性

10H属性体的偏移0x00-0x07表示文件创建时间;偏移0x08-0x0F表示文件最后修改时间;偏移0x10-0x17表示文件的MFT修改的时间;偏移0x18-0x1F表示文件的最后访问时间;偏移0x20-0x23表示DOS文件属性;偏移0x24-0x27表示文件可用的最大版本号;偏移0x28-0x2B表示文件版本号;偏移0x2C-0x2F表示类ID;偏移0x30-0x33表示文件所有者ID;偏移0x38-0x3F表示本文件所占用的字节数;偏移0x40-0x47表示更新序列号。

结合下图所示的$Root元文件内容,10H属性头偏移0x08处的值为00,表示该属性为常驻属性;属性头偏移0x14-0x15处的值为18 00(即0x0018),表示属性体开始于偏移0x18处;属性体偏移0x00-0x07处的值为06 67 3D 2E EC 41 CA 01;偏移0x08-0x0F处的值为EA D4 59 F8 76 64 DA 01;偏移0x10-0x17处的值为EA D4 59 F8 76 64 DA 01;偏移0x18-0x1F处的值为92 40 1A C8 73 64 DA 01;偏移0x20-0x23处的值为06 00 00 00(即0x00000006),表示本文件为隐藏的(0x02)系统(0x04)文件;偏移0x24-0x27处的值为00 00 00 00,表示禁用;偏移0x28-0x2B处的值为00 00 00 00;偏移0x2C-0x2F处的值为00 00 00 00,表示类ID为0。

(2)30H属性

30H属性体的偏移0x00-0x07表示父目录的MFT记录的索引;偏移0x08-0x0F表示文件的创建时间;偏移0x10-0x17表示文件的最后修改时间;偏移0x18-0x1F表示文件的MFT修改的时间;偏移0x20-0x27表示文件的最后访问时间;偏移0x28-0x2F表示文件的分配大小;偏移0x30-0x37表示文件的实际大小;偏移0x38-0x39表示DOS文件属性;偏移0x3C-0x3F表示文件的扩展属性;偏移0x40表示文件名的字符数;偏移0x41表示文件名命名空间;偏移0x42开始为文件名称。

结合下图所示的$Root元文件内容,30H属性头偏移0x08处的值为00,表示该属性为常驻属性;属性头偏移0x14-0x15处的值为18 00(即0x0018),表示属性体开始于偏移0x18处;属性体偏移0x00-0x07处的值为05 00 00 00 00 00 05 00;偏移0x28-0x2F处的值为00 00 00 00 00 00 00 00,表示文件的分配大小为0;偏移0x30-0x37处的值为00 00 00 00 00 00 00 00,表示文件的实际大小为0;偏移0x38-0x39处的值为06 00(即0x0006),表示本文件为隐藏的系统文件;偏移0x40处的值为01,表示该文件的文件名只有一个字符;偏移0x41处的值为03,表示文件名的命名空间为Win32 & DOS,即Win32和DOS文件名都存放在同一个文件名属性中;偏移0x42开始的值为2E 00 00 00 00 00,其中的文件名只有一个字符,即2E(对应字符点“.”,表示当前目录),后面的00都是无效数据。

(3)40H属性

40H属性体的偏移0x00-0x0F表示文件的GUID;偏移0x10-0x1F表示文件建立时所在卷的ID;偏移0x20-0x2F表示文件的原始ID;偏移0x30-0x3F表示对象创建时所在域的ID。结合下图可以解析40H属性体的各项内容。

(4)50H属性

50H属性体的各项内容可以结合下图进行解析。

(5)90H属性

90H属性体由索引根、索引头、索引项组成,其中的索引项可能不存在,也可能存在多个索引项。

索引根的偏移0x00-0x03表示属性的类型;偏移0x04-0x07表示整理规则;偏移0x08-0x0B表示目录项分配尺寸;偏移0x0C表示每个目录项占用的簇数。

索引头的偏移0x00-0x03表示第一个目录项的偏移;偏移0x04-0x07表示目录项的总尺寸;偏移0x08-0x0B表示目录项分配的尺寸;偏移0x0C处为标志位,值为00时表示小目录,值为01时表示大目录。

索引项的偏移0x00-0x07表示该文件的MFT参考号;偏移0x08-0x09表示索引项的大小;偏移0x0A-0x0B表示文件名属性体的大小;偏移0x0C-0x0D表示标志,值为00时表示普通文件项,值为01时表示有子项,值为02时表示当前项为结束项,值为03时表示包含子节点且为结束项;偏移0x10-0x17表示父目录的MFT文件参考号;偏移0x18-0x1F表示文件的创建时间;偏移0x20-0x27表示文件的最后修改时间;偏移0x28-0x2F表示文件记录的最后修改时间;偏移0x30-0x37表示文件的最后访问时间;偏移0x38-0x3F表示文件的分配大小;偏移0x40-0x47表示文件的实际大小;偏移0x48-0x4F表示文件标志,值为1时表示只读,值为2时表示隐藏,值为4时表示系统,值为20H时表示存档;偏移0x50表示文件名长度;偏移0x51表示文件命名空间;偏移0x52开始为文件名。

结合下图所示的$Root元文件内容,90H属性头偏移0x08处的值为00,表示该属性为常驻属性;偏移0x09处的值为04,表示属性名的长度为4;偏移0x0A-0x0B处的值为18 00(即0x0018),表示属性名开始于偏移0x18处;偏移0x10-0x13处的值为A8 00 00 00(即0x000000A8),表示属性体的长度为0xA8字节,即168字节;偏移0x14-0x15处的值为20 00(即0x0020),表示属性体开始于偏移0x20处;偏移0x18处开始的8个字节为24 00 49 00 33 00 30 00,将ASCII码转换成字符为“$I30”。偏移0x20处开始为索引根,16个字节之后的0x30处开始为索引头。

索引头的偏移0x00-0x03处的值为10 00 00 00(即0x00000010),表示第一个索引项的偏移为0x10;偏移0x04-0x07处的值为98 00 00 00(即0x00000098),表示索引项的总尺寸为0x98字节,即152字节。所以第一个索引项起始于索引头的偏移0x10处,总尺寸为152字节。

第一个索引项的偏移0x00-0x07处的值为9B 0D 00 00 00 00 01 00;偏移0x08-0x09处的值为70 00(即0x0070),表示索引项的大小为0x70;偏移0x0A-0x0B处的值为52 00(即0x0052),表示文件名属性体的大小为0x52;偏移0x0C-0x0D处的值为01 00(即0x0001),表示有子项;偏移0x50处的值为08,表示文件名的长度为8;偏移0x51处的值为02,表示文件名的命名空间为DOS;偏移0x52处开始的16字节值为44 00 4F 00 43 00 55 00 4D 00 45 00 7E 00 31 00,将ASCII码转换成字符为“DOCUME~1”,是目录Documents and Settings在DOS下的短文件名。文件名是UNICODE编码的,每个字符占2个字节,第一个字节为对应字符的ASCII码,第二个字节为00,文件名的长度为8个字符,即16个字节。

解析上图的90H属性,得到分区根目录下的第一个文件DOCUME~1,即Documents and Settings子目录。受限于空间,90H属性中只能存放一个文件的信息(即一个索引项),根目录下的其它文件和子目录存放于A0属性中。

(6)A0H属性

A0H属性体为Data Runs。结合下图所示的$Root元文件内容,A0H属性头偏移0x08处的值为01,表示该属性为非常驻属性;偏移0x09处的值为04,表示属性名的长度为4;偏移0x0A-0x0B处的值为40 00(即0x0040),表示属性名开始于偏移0x40处;偏移0x20-0x21处的值为48 00(即0x0048),表示Data RUN开始于偏移0x48处,即属性体开始于偏移0x48;偏移0x40处开始的8个字节为24 00 49 00 33 00 30 00,将这些ASCII码转换成字符为“$I30”,由于名称是UNICODE编码的,所以每个字符占用2个字节,第一个字节为对应字符的ASCII码,第二个字节为0;偏移0x48处开始的值为31 02 53 03 2F 00 01 00,根据Data RUN的编码规则,第一个字节31表示簇0x2F0353(3个字节53 03 2F)开始的2个簇(02)用于存放文件数据,之后的一个字节00表示Data RUNs结束,后续没有Data RUN了,即后续为无效数据。

(7)B0H属性

B0H属性体的各项内容可以结合下图进行解析。

3. 总结

本文介绍了$Root元文件各属性的属性体结构,然后结合读取的内容对$Root元文件的各个属性分别进行解析。重点解析了10H、30H、90H、A0H属性。

安装元神操作系统的工具“元神操作系统安装器”可去网站www.gnxxkj.com进行下载。安装账号可去网址http://www.gnxxkj.com/app/wuziqi/register.php 进行注册。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2188851.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Jupyter | jupyter notebook 使用 conda 环境

博客使用更佳 点我进入博客 创建虚拟环境 在 Anaconda Prompt 里面输入: conda create -n env-name并且输入 y 确认。例如我们创建环境名为 jupyter 激活环境 conda activate env-name激活之后发现环境从 base 变为 jupyter(笔者用的 env-name 为 jupyter) …

python-求一个整数的质因数/字符串的镜像/加数

一:求一个整数的质因数 题目描述 编写一个程序,返回给定整数的质因数。 定义函数get_prime_factors(),该函数接受一个参数num(正整数)。 该函数应返回传入参数的质因数列表,且从小到大排序。 比如150的质因数分解如…

Spring MVC__HttpMessageConverter、拦截器、异常处理器、注解配置SpringMVC、SpringMVC执行流程

目录 一、HttpMessageConverter1、RequestBody2、RequestEntity3、ResponseBody4、SpringMVC处理json5、SpringMVC处理ajax6、RestController注解7、ResponseEntity7.1、文件下载7.2、文件上传 二、拦截器1、拦截器的配置2、拦截器的三个抽象方法3、多个拦截器的执行顺序 三、异…

数据结构——计数、桶、基数排序

目录 引言 计数排序 1.算法思想 2.算法步骤 3.代码实现 4.复杂度分析 桶排序 1.算法思想 2.算法步骤 3.代码实现 4.复杂度分析 基数排序 1.算法思想 2.算法步骤 3.代码实现 4.复杂度分析 排序算法的稳定性 1.稳定性的概念 2.各个排序算法的稳定性 结束语 引…

初识Linux · 自主Shell编写

目录 前言: 1 命令行解释器部分 2 获取用户命令行参数 3 命令行参数进行分割 4 执行命令 5 判断命令是否为内建命令 前言: 本文介绍是自主Shell编写,对于shell,即外壳解释程序,我们目前接触到的命令行解释器&am…

基于vue框架的大学生四六级学习网站设计与实现i8o8z(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目功能:学生,训练听力,学习单词,单词分类,阅读文章,文章类型,学习课程 开题报告内容 基于Vue框架的大学生四六级学习网站设计与实现开题报告 一、研究背景与意义 随着全球化进程的加速和国际交流的日益频繁,英语作为国际通用语言…

22.3 解读k8s服务发现源码

本节重点介绍 : discovery.Manager服务发现管理员 注册各个服务发现源启动各个服务发现源处理服务发现的结果 k8s服务发现 k8s-client informer机制 架构图补充 注册各个服务发现源 位置 D:\go_path\src\github.com\prometheus\prometheus\discovery\manager.go去掉部分细节…

ConcurrentHashMap 中的并行性

ConcurrentHashMap 在多线程应用程序中被广泛使用。多线程应用程序的示例包括在线游戏应用程序、聊天应用程序,它为应用程序增加了并发性的好处。为了使应用程序本质上更具并发性,ConcurrentHashMap 引入了一个名为“并行性”的概念。 在本文中&#xf…

飞机导航数据库资料

以上是从网上收集的飞机导航数据库的一些资料。现在放在百度网盘中。 链接:https://pan.baidu.com/s/1fDYuaB0DuyKmYt6C_lXvZQ?pwdkcqj 提取码:kcqj

ZTE RRC重建优化案例

ZTE RRC重建优化案例 随着移动通信网络的不断发展,用户对网络的稳定性和覆盖质量提出了更高的要求。尤其在LTE网络中,RRC(Radio Resource Control)连接的稳定性直接影响用户体验和业务连续性。然而,在实际网络环境中&a…

案例-表白墙简单实现

文章目录 效果展示初始画面提交内容后画面&#xff08;按键按下&#xff09; 代码区 效果展示 初始画面 提交内容后画面&#xff08;按键按下&#xff09; 代码区 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8">…

C++输⼊输出

1.<iostream> 是 Input Output Stream 的缩写&#xff0c;是标准的输⼊、输出流库&#xff0c;定义了标准的输⼊、输 出对象 2.std::cin 是 istream 类的对象&#xff0c;它主要⾯向窄字符&#xff08;narrow characters (of type char)&#xff09;的标准输 ⼊流。 3…

STL之priority_queue篇——深入剖析C++中优先队列的实现原理、核心特性及其底层机制

文章目录 前言一、补充内容&#xff1a;堆1.1 什么是堆1.2 堆的分类与性质1.3 堆的向下调整算法&#xff08;小根堆&#xff09;实现流程&#xff1a;代码&#xff1a; 1.4 堆的向上调整算法&#xff08;小根堆&#xff09;实现流程&#xff1a;代码&#xff1a; 1.5 数组建堆算…

eclpsexxx

Copyright?2001-2004 International Business Machines Corp. Guidelines Eclipse 用户界面指南 2.1 版 查看目录 作者&#xff1a;Nick Edgar, Kevin Haaland, Jin Li , Kimberley Peter 译者&#xff1a;Bobbie Wang&#xff0c;Qi Liang 最新更新: 2004年2月 注意 您…

kaggle实战2信用卡反欺诈逻辑回归模型案例1

信用卡欺诈案例 数据集下载地址 https://storage.googleapis.com/download.tensorflow.org/data/creditcard.csv 参考不平衡数据的分类 文章目录 只进行特征衍生&#xff0c;未进行数据标准化、上才样处理数据不平衡问题&#xff0c;得到的准确率和召回率居然很高如果不处理数据…

李宏毅 X 苹果书 自注意力机制 学习笔记上

self attention 是一种network架构使用场景&#xff1a;输入一组向量&#xff0c;这组向量的性质&#xff1a;数量有变化&#xff0c;序列长度不一 模型输入 文字处理&#xff1a; 模型输入&#xff1a;句子&#xff08;句子的长度&#xff0c;单词都不一样&#xff09;&am…

qt QMainWindow 自定义标题栏

可以使用setMenuWidget 来将自定义的标题栏 QWidget 设置进去就可以&#xff0c; 用来替代setMenu 菜单栏单一&#xff0c;自定义不高的问题

node_exporter使用textfile collector收集业务数据

上一篇文章讲了使用Pushgateway收集业务数据的方法&#xff0c;今天讲另外一种方式textfile collector The textfile collector is similar to the Pushgateway, in that it allows exporting of statistics from batch jobs. The Pushgateway should be used for service-leve…

解决ModuleNotFoundError: No module named ‘torchcrf‘

运行深度学习程序时候&#xff0c;出现报错&#xff1a;ModuleNotFoundError: No module named torchcrf 将 from torchcrf import CRF 改为 from TorchCRF import CRF

无设计器简单实例

目录 1、界面设计Qt5元对象系统1. **QObject 类**2. **QMetaObject**3. **信号和槽机制**4. **宏&#xff1a;Q_OBJECT**5. **动态属性**6. **反射机制**7. **元对象编译器&#xff08;MOC&#xff09;** 2、完成程序功能 1、界面设计 不点创建界面 在dialog.h中 #ifndef DIA…