-
-
[原创]玩玩ntfs之新建文件
-
发表于: 2009-10-26 15:46 12403
-
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如下图所示
这里我们用到的有偏移为B、D、30处这里说明下,显示结果都是10进制的,我们计算下$mft的偏移就是(349525)d *( 512)d* 1= (178956800)d 化成16进制就是(AAAAA00)x。注意这里(数字)d是指10进制的数
而(数字)x是指16进制的数.下同
我们来到这个地方
如下图:
2,找到并设置$mft的bitmap
先根据$mft中的bitmap属性(B0)找到run再根据run找到其数据区。
选中的那个就是B0属性。这里我们用到的就是紫色那个run,根据run我们知道其数据在55554簇处,即偏移(55554)x*(512)d(我的这个盘一个簇就一个扇区) = (AAAA800)x
我们来到这里:
看紫色部分。$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。
这样不好看,这样
额,比直接看数据好多了。。。。。
上面那几个带颜色的时必须填对的…还有那个USA你得在这个MFT的每个扇区的末尾都得设置.例如我这里的是01 00 (看上面偏移AAB1A30处),那么我们就得在这个MFT的两个扇区的末尾都设置成这个.如图:
第一个扇区
第二个扇区:
就是这样了…
唉,..我这里得atributeID忘加了…日志记录也没加。不过对于我们的目标来说无所谓
4,添加index_entry
Mft添加完了我们得到再到索引中添加….
我们先到第五个MFT也就是root中找到其A0属性,找到索引根
其run就是上图紫色部分.我们来到其数据处
上面紫色是index_entry的总长度,我们在添加index_entry后也要修改这个值。
我添加的index_entry如下图所示:
注意最后这个表示末尾的这一行必须得有呀…别的按照结构体格式直接加就行了。
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就能找到数据区了)
我们的MFT的扇区是(AAB1)x + (1000BE00)x = (100168B1)x
已经使用了….
基本就是这样了…
我不会刷新缓存,但是重启很麻烦.。这里就体现出用filedisk的方便之处了.首先卸载磁盘,然后重新创建这个磁盘.缓存就会自动刷新了。新建的文件也就会显示出来了。
要想加data的话在其FILERECORD得80中加就行了。。
切记。这个程序只对上面说的环境有效。不可在真实磁盘中做实验呀。。。用filedisk创建个虚拟磁盘玩玩还是可以的。。。
下面是添加文件的程序的源代码和doc文件。。本来想写成cmd形式的了,还没写完。。。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!