玩玩ntfs之新建文件

作 者: ProgmBoy

by:ProgrammeBoy http://hi.baidu.com/programmeboy
环境:首先新建一个512M的文件.然后用filedisk使用这个文件创建一个volume。然后格式化为ntfs格式。我是按每簇512字节格式化的。
目标:在根目录下添加一个名为777.txt的空文件
工具:filedisk、 Runtime's DiskExplorer for NTFS、winhex
1,先找到$mft,保存重要数据
(根据bootsector中数据找)例如我的bootsector如下图所示
 名称:  1.JPG
查看次数: 240
文件大小:  120.4 KB
这里我们用到的有偏移为B、D、30处这里说明下,显示结果都是10进制的,我们计算下$mft的偏移就是(349525)d *( 512)d* 1= (178956800)d 化成16进制就是(AAAAA00)x。注意这里(数字)d是指10进制的数
而(数字)x是指16进制的数.下同
我们来到这个地方
如下图:
 名称:  2.JPG
查看次数: 241
文件大小:  90.4 KB
2,找到并设置$mft的bitmap
先根据$mft中的bitmap属性(B0)找到run再根据run找到其数据区。
 名称:  3.JPG
查看次数: 240
文件大小:  101.5 KB
选中的那个就是B0属性。这里我们用到的就是紫色那个run,根据run我们知道其数据在55554簇处,即偏移(55554)x*(512)d(我的这个盘一个簇就一个扇区) = (AAAA800)x
我们来到这里:
 名称:  4.JPG
查看次数: 240
文件大小:  66.9 KB
看紫色部分。$mft中的bitmap属性数据中的每一位代表这个mft号的使用情况。比如上面第一二字节16位分别代表$MFT、$MftMirr、$LogFile、$volume、…..$Extend下面的一字节就是系统预留的8个mft号
.再接下来就是0F,化成2进制是00001111,这里得说明一下在bitmap中高位代表低的mft号。
例如:

字节序:            1F
二进制:             0 0 0 1   1 1 1 1 
所代表的mft序号:        8 7 6 5   4 3 2 1  (也就是说第12345正在使用78为空闲)
我们就可以找到空闲位写入我们的MFT了就向上图紫色所示第17位为空闲的,但是这是系统预留的我们不能用。接着往下找29位为空闲。那么我们就可以在第29个MFT中写入我们的MFT。我们设置第29位后bitmap数据由FF FF 00 0F 变成了 FF FF FF 1F
3, 创建新的MFT,写入磁盘
我们来到第29号mft处就是: (AAAA800)x (第一个mft的偏移) + (29 – 1) *(1024)d (每个FILERECORD的大小) = (AAB1A00)x
接下来我们就来手动填充这个MFT,这里我添加了3个最基本的属性, 10, 30, 80。
 名称:  5.JPG
查看次数: 242
文件大小:  186.9 KB
这样不好看,这样
 名称:  6.JPG
查看次数: 243
文件大小:  234.5 KB
额,比直接看数据好多了。。。。。
上面那几个带颜色的时必须填对的…还有那个USA你得在这个MFT的每个扇区的末尾都得设置.例如我这里的是01 00 (看上面偏移AAB1A30处),那么我们就得在这个MFT的两个扇区的末尾都设置成这个.如图:
第一个扇区
 名称:  7.JPG
查看次数: 240
文件大小:  18.3 KB
第二个扇区:
 名称:  8.JPG
查看次数: 240
文件大小:  10.1 KB
就是这样了…
唉,..我这里得atributeID忘加了…日志记录也没加。不过对于我们的目标来说无所谓
4,添加index_entry
Mft添加完了我们得到再到索引中添加….
我们先到第五个MFT也就是root中找到其A0属性,找到索引根
 名称:  9.JPG
查看次数: 240
文件大小:  108.4 KB
其run就是上图紫色部分.我们来到其数据处
 名称:  10.JPG
查看次数: 240
文件大小:  64.1 KB
上面紫色是index_entry的总长度,我们在添加index_entry后也要修改这个值。
我添加的index_entry如下图所示:
 名称:  11.JPG
查看次数: 236
文件大小:  84.3 KB
注意最后这个表示末尾的这一行必须得有呀…别的按照结构体格式直接加就行了。
5,就是在$Bitmap中设置这个扇区为正在使用(注意这个不是$mft中的那个bitmap属性)
   $mft中的bitmap表示哪个mft号在使用
   $Bitmap是表示整个盘中每个扇区的使用情况
这里我们得算下我们的mft在哪个扇区? (AAAB1A00)x / (512)d = (5558D)x
         再算下是第几个字节 (558D)x / 8 = AAB1
我们去第AAB1字节去设置去,$bitmap的数据区在1000BE00(就是在mft中找到$bitmap的FILERECORD然后再找到run就能找到数据区了)
 名称:  12.JPG
查看次数: 238
文件大小:  142.2 KB
我们的MFT的扇区是(AAB1)x + (1000BE00)x = (100168B1)x
 名称:  13.JPG
查看次数: 237
文件大小:  66.1 KB
已经使用了….
基本就是这样了…
我不会刷新缓存,但是重启很麻烦.。这里就体现出用filedisk的方便之处了.首先卸载磁盘,然后重新创建这个磁盘.缓存就会自动刷新了。新建的文件也就会显示出来了。
 名称:  14.JPG
查看次数: 235
文件大小:  99.3 KB

要想加data的话在其FILERECORD得80中加就行了。。
切记。这个程序只对上面说的环境有效。不可在真实磁盘中做实验呀。。。用filedisk创建个虚拟磁盘玩玩还是可以的。。。

下面是添加文件的程序的源代码和doc文件。。本来想写成cmd形式的了,还没写完。。。

NTFS文件系统中,每一个文件或目录都拥有一个MFT记录,MFT记录中记录了文件或目录的基本信息,对于普通文件来说,一般拥有文件序号,文件名,创建时间,文件大小,文件属性,文件数据地址索引等基本文件信息,而一个目录除了拥有基本文件信息,还拥有其目录下的文件索引项信息,文件与其父目录之间通过该文件的MFT记录中的父目录信息和目录中的索引项来建立隶属关系,这两种信息唯一地确定了文件与父目录之间的对应关系,由此可知,要在一个指定目录下生成一个文件,除了要创建目标文件本身的MFT记录,还需在其父目录的MFT记录或者其索引分配中建立目标文件的索引。在NTFS系统中,文件索引是一个比较复杂的内容,文件的索引采用了树型结构,这给NTFS系统带来了查找文件速度快的优点,但却给当索引结点增加或减少时,如何维护树的平衡带来了难题。在NTFS系统中,小目录的索引直接存放在目录本身MFT记录的90H属性中,而大目录的索引则需另外开辟新的索引分配区来存放相关的索引。原程序中只考虑了小目录的情况,即将文件的索引直接存放在90H属性中,并不考虑大目录的索引情况。除此之外,NTFS系统对于每一个文件操作都会写入日志文件中,以便一致性检查,但由于这方面的内容尚未研究清楚,本程序中也未涉及这方面的内容。
### 实现和配置Kerberos身份验证 #### 准备工作 为了成功部署并使用Kerberos身份验证,需确保环境满足特定需求。例如,在Windows Server环境中,准备阶段涉及确认服务器拥有静态IP地址、NTFS格式的磁盘分区以及足够的存储间来容纳SYSVOL文件夹[^4]。 #### 安装与初始化KDC (Key Distribution Center) 1. **安装MIT KDC** 对于Linux系统而言,可以通过包管理器安装MIT Kerberos Key Distribution Center(KDC),命令如下所示: ```bash sudo apt-get install krb5-kdc krb5-admin-server ``` 2. **编辑krb5.conf 文件** 编辑`/etc/krb5.conf`以定义领域名称和服务位置等参数。此操作对于客户端正确连接到KDC至关重要。 3. **创建数据库** 使用`kdb5_util create -s`指令建立新的密钥分发中心数据库,并启动相关服务。 #### 用户账户及策略设定 利用命令行工具如`addprinc`向KDC注册新用户或主机实体。这些主体可以被赋予不同的权限级别以便更好地控制资源访问。当涉及到SolrCloud集群时,则应考虑同步开启ZooKeeper的安全措施以增强整体防护水平[^2]。 #### 应用程序集成 为了让应用程序能够顺利运用Kerberos进行认证,通常需要调整其配置文件使之指向正确的KDC路径并且指定适当的Realm信息。比如Java应用可通过JGSS-API完成这一过程;而对于Web服务来说可能还需要额外设置SPN(Service Principal Name)。另外值得注意的是,如果是在微软生态系统内部署的话,那么Active Directory本身就集成了对Kerberos的支持,因此只需按照官方指南适当修改即可。 #### 测试验证流程 最后一步是对整个架构的有效性进行全面测试。这包括但不限于尝试获取票据授予票据(TGT)、请求服务票据(ST)以及实际发起受保护的服务调用等活动。任何异常都应及时排查直至所有组件均能正常协作为止。 ```python import kerberos service_name = "HTTP@hostname" _, ctx = kerberos.authGSSClientInit(service_name) print(f"Initialized context for service {service_name}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值