NTFS中的streams和ADS

1、前言

交换数据流(alternate data streams,以下简称ADS)也不是什么新东西,但用户和管理员对它的认识知之甚少,本文将结合前人的资料对ADS做一番探讨。如有错误,还望高手赐教。

2、概念

先来看看微软对多文件流的解释:
在NTFS 文件系统下,每个文件都可以有多个数据流。值得一提的是,流不是 NTFS 2000 的功能,但是从 Windows NT 3.1 开始流已存在。当在非 NTFS 卷(如 Windows 98 计算机的磁盘分区)下读取文件内容时,只能访问一个数据流。因此,您会觉得它是该文件真正的且"唯一"的内容。这样的主流没有名称,并且是非 NTFS 文件系统可以处理的唯一一个流。但是当在 NTFS 卷上创建文件时,事情可能不一样。参看图 1 了解此重要概念。
【图1】

ADS是NTFS文件系统特有的性质,也就是前面说的多数据流文件除了主流之外的流,但基于API的Win32却不能很好的支持ADS。例如我们可以把一个文件以流的形式附加到另一个文件(载体)中,但是对于Windows资源管理器来说载体文件没有发生任何变化(包括其大小、修改时间等)。由此将会产生一系列问题。
下面就让我们来看看ADS的一些性质及应用吧。

3、性质和应用

3.1 创建
创建ADS很简单,语法是<载体文件名>:<ADS文件名>
看个命令行下面的例子:echo This is lake2's stream > a.txt:stream.txt
通过上面的例子我们就很简单的创建了一个ADS,它在windows下并不可见,不信你可以用资源管理器或者dir命令看看a.txt文件的大小是不是0。打开a.txt,可是里面什么内容都没有。当然没有内容,这里ADS是a.txt:stream.txt,内容应该在这个文件里。注意,这里用type命令并不能显示文件a.txt:stream.txt,但是记事本却可以。还是在命令行下输入notepad a.txt:stream.txt,呵呵,看到"This is lake2's stream"了吧。现在我们用记事本打开a.txt随便修改内容,这并不会影响到流的内容;同样,对a.txt:stream.txt的修改也不会影响到载体文件a.txt。

3.2 删除
删除ADS最为简单,直接删载体文件就是;但是如果只想删ADS而保留载体文件的话最简单的办法就是把载体文件拉到非NTFS分区去走一趟。因为ADS是NTFS的"专利",离开了NTFS文件系统ADS也就烟消云散了。
如果你只想在NTFS分区删除ADS的话,可以用下面这个批处理:
type a.txt > a.txt.bak
rem type不能支持ADS,所以拿它来备份载体
del a.txt
rem 删除载体及ADS
ren a.txt.bak a.txt
rem 恢复载体文件

3.3 检测与提取
关于ADS的检测涉及到API编程了,呵呵,这方面我还在努力学习,这里就抄微软的话:"Win32 备份 API 函数(BackupRead、BackupWrite 等)可用于枚举文件中的流"。
不过好在已经有检测ADS的软件了,下面几个软件都可以检测:
LADS (List Alternate Data Streams) - http://www.heysoft.de/nt/ntfs-ads.htm
Streams v1.1 (Sysinternals) - http://www.sysinternals.com/ntw2k/source/misc.shtml
NT Objectives Forensic Toolkit (sfind.exe) -(http://www.ntobjectives.com/)
要提取ADS必须要第三方工具,NTRootKit工具包里的cp可以做到(cp也可以用于创建流);NTRootKit工具包我一直没有找到,google上一搜全是那个NTRootKit后门,只好自己用C写了一个。这也不会要求你是编程高手,C语言里的文件函数完全可以支持ADS的创建、删除、提取,只需把ADS当成一个文件来处理就是了。

3.4 保存与传输
前面说了,ADS在非NTFS分区就会丢失,那么说来在非NTFS分区就无法保存ADS了吗?直接保存没有办法,我们可以间接保存啊。呵呵,这样需要借助一个软件,你也应该有的,它就是WinRAR。对含有ADS的文件加压时,找到高级选项,那里有一个"保存文件流数据",打上勾(图2),呵呵,你就可以把ADS压缩到rar文件里了。这个rar文件可以保存到非NTFS分区的——注意啊,是保存,不能解压出来的。
【图2】

如果要传输ADS,最好是用资源管理器打开对方的共享再复制粘贴;如果你想用其他方式传输的话大概就只能传输包含ADS的rar文件了。

3.5 信息隐藏
要保密信息,传统的做法是加密。虽然加密后信息内容变成了无法直接读出的密文,不过也等于告诉人家这是秘密,就不安全了;但是如果我把信息藏起来让你找不着不就ok了吗,所以一种叫做"信息隐藏"的技术就被提出来了。
古装戏里常常有隐写术,就是一张白纸在平时就是一张普通的白纸,但在特殊的作用下预先写好的字就会显示出来。用这个来比喻信息隐藏是最为恰当的了。信息隐藏是目前信息安全研究的热门领域,实现方法也很多,最流行的大概就是以bmp图像文件为载体,通过替换文件每个字节无关紧要的最低的一位来实现的。
呵呵,不过有一种实现简单的信息隐藏技术就在我们眼前。对,就是利用ADS!既然Windows不能很好的察觉ADS,那么我们就可以把要保密的文件以ADS方式保存。不过这里提醒一下,利用ADS实现信息隐藏的安全性不是很高,不过也不是很低——我想应该没有人没事就花大量时间用lads.exe检测着玩吧。
另外,大多数杀毒软件并不能检测ADS,所以我们可以利用流让杀毒软件pass后门。例:type nc.exe > a.txt:nc.exe
原文件nc.exe会被金山毒霸查出来,处理之后尽管a.txt:nc.exe内容与nc.exe完全一样,但并不会被金山毒霸发现。

3.6 运行
前面说了可利用ADS让后门躲避杀毒软件,但如果不能运行的话还不是没用。那怎么运行呢?
命令行下面直接运行a.txt:nc.exe是不行的,应该用start命令。关于这个命令的详细用法你自己打help start看看吧。
start命令运行可执行的ADS时要用绝对路径或者当前路径用./加文件名。看例子:start ./a.txt:nc.exe or start c:\a.txt:nc.exe
在Win2000下查看进程只能看到载体文件,而XP下则可以发现整个ADS。图3是在XP下用tlist的截图。
【图3】
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
摘要:NTFS是Microsoft公司开发的一种有着良好安全性和稳定性的高性能文件系统,NTFS的文件或文件夹附加多个额外的数据流,但是其访问一直没有很好的解决办法,本文使用VB2003实现NTFS文件附加数据流的读写类,提供.Net框架下NTFS文件附加数据流的完整解决方案。 关键词:VB.Net NTFS 数据流 类 在项目选择添加引用->浏览->选择“JWBStreamOP.dll”文件->确定,即可成功引用。 4.1 类的声明: Dim myStreamOP As New ClassJWBStreamOP(“NTFS文件完整路径”) 4.2 属性: 该类共有3个只读属性 属性名 返回值类型 备注 FileName String 只读,在成功声明后使用 Ready Boolean 只读,该类可操作时为True Ver String 只读,类版本、版权信息 4.3 方法 该类共有6个方法: 4.3.1 OpenNTFSStream(ByVal sStreamName As String) As System.IO.FileStream 打开指定文件(声明时指定)的指定数据流,返回值为指定数据流的FileStream接口。 参数列表 类型 传递方式 参数说明 sStreamName String Byval 流文件名 4.3.2 GetNTFSStreamSize(ByVal sStreamName As String) As Long 获取指定数据流的大小,返回实际大小,执行失败返回-1 参数列表 类型 传递方式 参数说明 sStreamName String Byval 流文件名 4.3.3 AddNTFSStream(ByVal toHidName As String, ByRef percentDone As Double) As Boolean 添加附加数据流,返回执行结果。 参数列表 类型 传递方式 参数说明 toHidName String ByVal 待添加的文件路径 percentDone Double ByRef 传递一个完成百分比的参数 4.3.4 SaveNTFSStream(ByVal sStreamName As String, ByVal outFileName As String, ByRef percentDone As Double) As Boolean将指定的数据流保存为文件,返回执行结果。 参数列表 类型 传递方式 参数说明 sStreamName String ByVal 流文件名 outFileName String ByVal 保存文件路径 percentDone Double ByRef 传递一个完成百分比的参数 4.3.5 ReadNTFSStreamsName() As String() 获取文件的所有附加数据流名称,返回名称数组。 4.3.6 DeleteNTFSStream(ByVal sStreamName As String) As Boolean 删除指定数据流,返回执行结果。 参数列表 类型 传递方式 参数说明 sStreamName String Byval 流文件名
NTFS流信息(NTFS Streams Info)指的是NTFS文件系统的一种特性,可以将附加的数据存储在文件的属性。在NTFS文件系统,每个文件都具有一个主要数据流,用于存储文件的内容。除了主数据流,文件还可以具有多个附加数据流,用于存储其他类型的信息。 附加数据流可以用来存储文件的元数据、备份信息、索引数据或其他自定义信息。通过利用附加数据流,可以将多个相关的文件和信息存储在一个文件,提高文件的组织性和管理性。 NTFS流信息有助于提高数据的安全性和隐私性。通过将敏感信息存储在附加数据流,可以隐藏这些信息并防止非授权用户访问。这样可以增加数据的保密性和安全性,确保只有特定的用户才能访问到这些附加数据流。 NTFS流信息的使用相对较少,主要用于特定的应用场景,例如文件备份和恢复、软件开发和数字取证等。在实际应用,开发人员可以利用NTFS流信息提供更好的文件管理和资源利用方式。但同时需要注意,NTFS流信息使用不当可能会导致文件不稳定或数据丢失等问题,因此在使用NTFS流信息时需要谨慎操作。 总结而言,NTFS流信息是NTFS文件系统的一种特性,用于存储附加的文件信息。它可以提高文件的组织性、隐私性和安全性,但在使用过程需要注意合理使用,以免造成文件损坏或数据丢失的风险。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值