|
|
揭开NTFS下真正的隐藏文件--'流'的奥秘 |
|
|
作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站 |
揭开NTFS下真正的隐藏文件--'流'的奥秘
[ 作者: 陆麟 添加时间: 2001-9-4 14:21:15 ]
作者:陆麟 来源:http://lu0.126.com
NTFS下,支持一个特殊概念,那就是'流'.怎么个流法呢?先看'流'的定义: stream A sequence of bits, bytes, or other small structurally uniform units. BIT的序列,或者小的统一结构单元.当然,小的统一结构单元并不意味着一定要大小统一,格式统一. 流依附于文件而存在,你可以在流中存储2进制数据,文字或者其他一些东西.就象文件一样.文件存什么,流就能存什么.每个文件可以含有多个流.但是流又和文件有些不同.每个流的打开需要单独的一个CreatFile(...)操作,并不是打开文件就打开了流. 流的名字和文件名以':'分隔.例如:ABC:A. ABC就是文件名,而流的名字为A.当我们操作流时,可以用如下简单方法: ECHO STREAM1>ABC:STREAM1 ECHO STREAM2>ABC:STREAM2 现在,ABC就有了:STREAM1和:STREAM2共2个流. 而读出流可以用: MORE <ABC:STREAM1 MORE <ABC:STREAM2 这样,内容就被读出了.CreateFile("ABC:STREAM1",...); 如果用编程的方法.操作就和文件操作一样. 那么为什么要用流呢?流的好处就是隐蔽.WINNT没有任何一个工具用来发现流的存在.我们看 C:\>ECHO "Hi Reader" > XX.TXT:MyStream C:\>DIR XX.TXT Volume in drive C is Wizard Volume Serial Number is 40E5-92D4 Directory of C:\ 03/18/98 08:36a 0 XX.TXT 1 File(s) 0 bytes 0 Dir(s) 3,399,192,576 bytes free 这就是好处.所以,在绿色兵团里有一篇文章专门介绍了流.说是一种隐藏很深的文件存取格式. 的确深,但是NT只不过没有提供工具而已.而我们仍然有探测到流的存在.那就是,Inside Programming为大家提供的Stream.Exe.该工具可以看到含有流的文件以及所有的流的名字. 当然,NT提供一个API,BackupRead(...)用于流名的读出.既然是Inside Programming,介绍这个API显然不能提供更多帮助,接下来介绍的是一个NATIVE API:NtQueryInformationFile(...) 下面给出该API涉及流的部分: /*+++ Streaminfo.h author: lulin date: 2000.8.25 Abstract: interface to NtQueryInformationFile stream portion. ---*/ #ifndef __STREAMINFO_H__ #define __STREAMINFO_H__ #include <windef.h> extern "C"{ typedef LONG NTSTATUS;
typedef struct { union { NTSTATUS Status; PVOID Pointer; };
ULONG *Information; } IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
typedef struct { //infoclass 22 ULONG NextEntryOffset; ULONG StreamNameLength; LARGE_INTEGER EndOfStream; LARGE_INTEGER AlloCationSize; WCHAR StreamName[1]; }FILE_STREAM_INFORMATION,*PFILE_STREAM_INFORMATION;
__declspec(dllimport) NTSTATUS __stdcall NtQueryInformationFile( HANDLE handle, PIO_STATUS_BLOCK io_status_block, PVOID FileInFormation, ULONG FileInformationLength, int FileInfomationClass ); }
#endif //__STREAMINFO_H__ NTFS真正存储流名时,名字里会加上:$DATA,例如:ABC:STREAM1在存储时,流名被存为了:STREAM1:$DATA,所以在查询结果中需要去除:$DATA.在这里,我不详细讨论STREAM.EXE如何运作,需要源程序的朋有同样可以购买.20元/份.付款信息件UTILITY页里的信息.

|
|
相关文章:相关软件: |
|