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

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.rhkb.cn/news/439674.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一款基于 Java 的可视化 HTTP API 接口快速开发框架,干掉 CRUD,效率爆炸(带私活源码)

平常我们经常需要编写 API,但其实常常只是一些简单的增删改查,写这些代码非常枯燥无趣。 今天给大家带来的是一款基于 Java 的可视化 HTTP API 接口快速开发框架,通过 UI 界面编写接口,无需定义 Controller、Service、Dao 等 Jav…

在线教育的未来:SpringBoot技术实现

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理微服务在线教育系统的相关信息成为必然。开…

【可答疑】基于51单片机的PWM控制智能台灯设计(含仿真、代码、报告、演示视频等)

✨哈喽大家好,这里是每天一杯冰美式oh,985电子本硕,大厂嵌入式在职0.3年,业余时间做做单片机小项目,有需要也可以提供就业指导(免费)~ 🐱‍🐉这是51单片机毕业设计100篇…

什么软件能指定usb端口禁用?五款电脑USB端口禁用软件!(热门分享)

什么软件能指定usb端口禁用? USB端口,作为电脑与外部设备连接的重要接口,其安全性日益受到企业的重视。 为了有效防止数据泄露和未经授权的设备接入,指定USB端口禁用成为了许多企业的迫切需求。 本文,将介绍五款热门…

MySQL 用户管理

一.用户信息 MySQL中的用户,都存储在系统数据库mysql的user表中。 host: 表示这个用户可以从哪个主机登陆,如果是localhost,表示只能从本机登陆user: 用户名authentication_string: 用户密码通过password函…

Python | Leetcode Python题解之第457题环形数组是否存在循环

题目: 题解: class Solution:def circularArrayLoop(self, nums: List[int]) -> bool:n len(nums)def next(cur: int) -> int:return (cur nums[cur]) % n # 保证返回值在 [0,n) 中for i, num in enumerate(nums):if num 0:continueslow, fas…

中小企业做网站需要考虑哪些因素?

中小企业在建设网站时,需要考虑的因素有很多。以下是一些主要考虑因素的介绍: 明确建站目的:中小企业需要明确自己建立网站的目的。是为了展示企业形象、推广产品,还是提供客户服务?不同的目的将决定网站的设计和功能…

MOELoRA —— 多任务医学应用中的参数高效微调方法

人工智能咨询培训老师叶梓 转载标明出处 在医疗场景中,LLMs可以应用于多种不同的任务,如医生推荐、诊断预测、药物推荐、医学实体识别、临床报告生成等。这些任务的输入和输出差异很大,给统一模型的微调带来了挑战。而且LLMs的参数众多&…

微信朋友圈实况照片需要注意隐私

微信朋友圈现在可以发实况了。 一直不怎么发朋友圈,就这几天发现朋友圈可以发实况照片了。 实况照片可让用户在声音和动作丰富的互动体验中捕捉美好瞬间,为传统的静态照片增添活力感。 当实况照片可用时,“相机” App 可在用户拍照之前和之…

服务器数据恢复—raid磁盘故障导致数据库文件损坏的数据恢复案例

服务器存储数据恢复环境&故障: 存储中有一组由3块SAS硬盘组建的raid。上层win server操作系统层面划分了3个分区,数据库存放在D分区,备份存放在E分区。 RAID中一块硬盘的指示灯亮红色,D分区无法识别;E分区可识别&a…

Pytorch基础:网络层

文章目录 1.卷积层-Convolution Layers1.1 1d/2d/3d卷积1.2卷积--nn.Conv2d1.3转置卷积(实现上采样) 2.池化层3.线性层—Linear Layer4.激活函数层—Activate Layer 1.卷积层-Convolution Layers 卷积运算:卷积运算在输入信号(图像)上滑动,相应位置上进行乘加. 卷积核:又称过滤…

开源AI智能名片链动2+1模式S2B2C商城小程序的内容营销易读性策略

摘要:在数字化时代,内容营销已成为企业吸引用户、促进转化的关键手段。然而,面对“懒”这一普遍的人性弱点,如何使内容更加易读、减少用户思考负担,成为提升营销效果的重要议题。本文基于“别让我思考”的可用性设计原…

Jupyter Notebook 更换主题

1、安装 Jupyter 主题 pip install jupyterthemes 2、更新 Jupyter 主题 (可选) pip install --upgrade jupyterthemes 3、查看可用的 Jupyter 主题 jt -l 4、更换 Jupyter 主题 选择你喜欢的主题后,可以使用以下命令来应用它。更换主题后…

html+css+js实现step进度条效果

实现效果 代码实现 HTML部分 <div class"box"><ul class"step"><li class"circle actives ">1</li><li class"circle">2</li><li class"circle">3</li><li class&quo…

MySQL 表的操作

温馨提示&#xff1a;非特殊情况不要修改和删除表 创建表 第一种方式 第二种方式 第三种方式 简单查看 查看表 查询当前数据库&#xff1a;select database(); 查询当前数据库中具有的表&#xff1a;show tables; 查看表的简略信息&#xff1a;desc 表名1&#xff1b; 查看表的…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-05

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-04 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-04目录1. LLM-Augmented Symbolic Reinforcement Learning with Landmark-Based Task Decomposition摘要研究背景问题与挑战如何…

Junit和枚举ENUM

断言机制&#xff0c;JAVA中的断言机制是一种用于检查程序中某个条件是否为真的机制。它可以在程序运行时检查某个条件是否满足&#xff0c;如果不满足则会抛出AssertionError异常。 在java中,断言机制默认是关闭的。所以会输出u。 断言机制只是为了用来吃调试程序的&#xff0…

Windows 11将新增基于AI的搜索、生成式填充和其它AI功能

微软正在扩展 Windows 11 的内置 AI 功能列表&#xff0c;增加了几项新功能&#xff0c;例如由 AI 支持的 Windows 搜索、“Click to Do”、生成填充和擦除以及照片中的超级分辨率等功能。 Click to Do 在您按下 Windows 键并单击鼠标时触发。 它可以扫描屏幕上显示的内容&…

【复习】JS中的数据类型

文章目录 数据类型UndefinedNullBooleanNumberStringSymbolBigIntObjectArrayFunctionDateRegExp 数据类型 其实就两种&#xff0c;原始数据类型&#xff08;Primitive Types&#xff09;和引用数据类型&#xff08;Reference Types&#xff09; JS将数据分为七种数据类型&…

Java 注释新手教程一口气讲完!ヾ(≧▽≦*)o

Java 注释 Java面向对象设计 - Java注释 什么是注释&#xff1f; Java中的注释允许我们将元数据与程序元素相关联。 程序元素可以是包&#xff0c;类&#xff0c;接口&#xff0c;类的字段&#xff0c;局部变量&#xff0c;方法&#xff0c;方法的参数&#xff0c;枚举&…