以下介绍的是利用NTFS隐藏一个文件。
如果 在 Win2k中采用NTFS文件系统就可以在一个文件中包含多个数据流,而且每个流都有其各自独立的分配空间、数据长度、文件锁。访问NTFS文件时如果不指定流的名称则实际访问的是一个缺省的数据流。应用程序可以在NTFS文件中创建其他具有名称的数据流,并且可以通过指定名称来访问该数据流,指定流名称的规则是在文件名后加上“:”再加上数据流的名字。
下面 以实例来说明如何使用多数据流来隐藏文件:
(1)生成一包含两个流的文件testfile
HANDLE hFile, hStream;
DWORD dwRet;
//不指定流名称打开的是默认的流,在其中写入“This is test file"
hFile = CreateFile("testfile", GENERIC_WRITE,
FILE_SHARE_WRITE, NULL,OPEN_A LWAYS,0, NULL);
If( hFlle = =I NVALID_HANDLE_VALUE){printf("Cannot open testflle\n");}
Else { WriteFile(hFile,”This is testfile”,16,&dwRet,Null); }
//在文件中再生成一个流,名称为”stream",并在其中写入“This is testfile:stream"
hStream = CreateFile("testfile:stream",GENERIC_WRITE,
FILE_SHARE_WRITE,NULL,OPEN_ALWAYS,0, NULL);
If( hStream==INVALID_HANDLE_VALUE)
printf("Cannot open testfile:stream\n");
else WriteFile(hStream,"This is testfile:stream",23,&dwRet,NULL);
(2)以上代码会在当前目录下生成的多流文testfile,在文件管理器中或者命令行下查看,发现其长度仅为16byte。这只是缺省流的长度,流"stream”的长度未显示出来。
(3)在命令行下运行命令“type testfile”或者在文件管理器中打开多流文件testfile,显示的内容都是“Thisis te stfile",也显示了是缺省流的内容。
(4)使用“more < testfile:stream”可以正确地显示,"stream',流的内容“This is testfile:stream".
注意:不要试图运行 命令“type testfile:stream’来显示it"stream'的内容,否则会得到下面的提示信息,'The filename syntax is incorrect".
至此 我 们 已经成功地在"testfile"中隐藏了流“stream",使得无论在文件管理器中查看文件属性还是显示文件内容均不能发现其踪迹,但是对于开发者来说仍然可以通过指定流名称来顺利地使用该数据流.类似,我们也可以将可执行文件隐藏起来。
不过这个方法,如果你被加入流的文件被删了的话,你的加入的隐藏的文件也没有了。