NTFS Alternate Data Stream(ADS)

  1993年微软推出了基于流行的NT平台的Windows NT操作系统。之后,NTFS作为WIndows开发基于NT的操作系统时的首选文件系统,逐步取代被应用于旧版Windows操作系统(比如Windows 9x)的文件系统,即FAT(File Access Table)。

  NTFS中的备用数据流(Alternate Data Stream,ADS)允许将一些元数据嵌入文件或是目录,而不需要修改其原始功能或内容。

  在NTFS中,主数据流指的是文件或目录的标准内容,通常对用户可见,而备用数据流(ADS)则隐藏。如果要查看备用数据流,可以使用dir命令的/R选项,或是Windows提供的streams.exe工具,没有可用的API。

  ADS没有大小限制且多个数据流可以和一个正常文件关联。ADS的内容也不仅限于text文本数据,基本上只要是二进制格式文件都可以被作为ADS备用流嵌入。

使用备用数据流(ADS)

  查阅多篇文章,大致了解了下ADS的命名方式,以及使用ADS的一些方法。

  所有的文件在NTFS中至少包含一个主数据流,也就是用户可见的文件或是目录,一个文件在NTFS中真正的文件名称格式:

<文件名>:<流名>:<流种类>

  1. 文件ADS

  默认的数据流没有名字,一个文件test.txt在NTFS中的全名为test.txt::$DATA,可以在命令行中执行如下命令查看test.txt文件内容:

notepad test.txt::$DATA

  也可以用一下命令创建test.txt:

echo "test.txt file content." test.txt::$DATA

  对于已经存在的文件test_1.txt创建备用数据流:

echo "test_1.txt ads data stream" > test_1.txt:test_1.txt_ADS 或

echo "test_1.txt ads data stream" > test_1.txt:test_1.txt_ADS:$DATA

  查看ADS数据:

notepad test_1.txt:test_1.txt_ADS 或

notepad test_1.txt:test_1.txt_ADS:$DATA

  同样可以使用创建备用数据流的方式顺带新创建一个文件,但是输出的数据被存放于ADS中,新文件则为空:

echo "test_2.txt ads data stream" > test_2.txt:test_2.txt_ADS 或

echo "test_2.txt ads data stream" > test_2.txt:test_2.txt_ADS:$DATA

  数据被存储于test_2.txt:test_2.txt_ADS:$DATA备用流中,而被创建的test_2.txt则为空。

  1. 文件夹ADS

  文件夹没有默认的数据流(也就是没有主数据流),但是有一个默认的目录流为$INDEX_ALLOCATION,默认的流名为$I30。比如文件夹testDir全名为testDir:$I30:$INDEX_ALLOCATION,可以使用以下特殊方式进入testDir:

cd testDir:$I30:$INDEX_ALLOCATION 或

cd testDir::$INDEX_ALLOCATION(忽略了流名)

  也可以使用以下命令创建目录testDir

md "testDir::$INDEX_ALLOCATION" 或

md "testDir:$I30:$INDEX_ALLOCATION"

  经过测试可以为已存在的目录创建ADS,比如testDir

echo "i am testDir:testDir_ADS:$DATA data stream" > testDir:testDir_ADS 或

echo "i am testDir:testDir_ADS:$DATA data stream" > testDir:testDir_ADS:$DATA

  但是没法正常打开,使用winhex查看硬盘倒是可以确定数据流的存在。

  删除备用流所删除的文件或文件夹时,相应的备用流也会被删除。

参考

  NTFS Alternate Data Stream (ADS)

  NTFS格式下的Alternate Data Streams

NTFS ADS(备用数据流)的更多相关文章

  1. SVN二次开发——让SVN、TSVN(TortoiseSVN)支持windows的访问控制模型、NTFS ADS(可选数据流、NTFS的安全属性)

    SVN二次开发 ——让SVN.TSVN(TortoiseSVN)支持windows的访问控制模型.NTFS ADS (可选数据流.NTFS的安全属性) SVN secondary developmen ...

  2. NTFS的交换数据流ADS应用

    NTFS的交换数据流ADS应用   NTFS是Windows常用的文件系统格式.该格式支持交换数据流(Alternate Data Streams,缩写ADS)特性.该特性可以让多个文件流使用同一个文 ...

  3. NTFS系统的ADS交换数据流

    VC++ 基于NTFS的数据流创建与检测 What are Alternate Streams?(交换数据流) NTFS alternate streams , 或者叫streams,或者叫ADS(w ...

  4. Windows 备用数据流(ADS)的妙用___转载

    NTFS交换数据流(Alternate Data Streams,简称ADS)是NTFS磁盘格式的一个特性,在NTFS文件系统下,每个文件都可以存在多个数据流.通俗的理解,就是其它文件可以“寄宿”在某 ...

  5. NTFS ADS带来的web安全问题

    有关ADS的简单说明请看http://www.xfocus.net/articles/200212/466.html 可以看到ADS在很久以前就被一些安全人员所关注,并且也提出了一些经典的利用,比如隐 ...

  6. UNCTF杂项题Hidden secret 之NTFS交换数据流隐写

    ---恢复内容开始--- 做这道题目的经历比较坎坷,题目中用于隐藏flag的jpg文件出了问题,导致不能被交换数据流隐写所以出题人换了一次题目,最后做法也换了,不过出题人一开始的考察点还是基于NTFS ...

  7. NTFS格式下的Alternate Data Streams

    今天我写点NTFS的交换数据流以及其带来的安全问题(Alternate Data Stream/ADS) =============================================== ...

  8. windows7命令帮助大全

    有关某个命令的详细信息,请键入 HELP 命令名ASSOC 显示或修改文件扩展名关联.ATTRIB 显示或更改文件属性.BREAK 设置或清除扩展式 CTRL+C 检查.BCDEDIT 设置启动数据库 ...

  9. DOS命令详解

    DOS命令详解 命令 \? 可以进入命令帮助 1.md命令创建目录. MKDIR [drive:]pathMD [drive:]path 如果命令扩展被启用,MKDIR 会如下改变: 如果需要,MKD ...

随机推荐

  1. Java在linux环境下和windows环境下日期字符串显示不同

    图片如果损坏,点击链接: https://www.toutiao.com/i6511565147322974724/ 出现的现象: 在Java中我想要将当前的时间格式化为需要的字符串,然后存放到数据库 ...

  2. docker创建mysql容器时挂载文件路径后无法启动(已解决)

    系统centos7 docker版本: 解决方法: 在docker run中加入 --privileged=true  给容器加上特定权限,如下 docker run --privileged=tru ...

  3. 备忘录——基于rdlc报表实现打印产品标签

    目录 0. 背景说明 1. 条形码生成 2. 获取产品的小程序码 3. 报表设计器设计标签模版 3.1 为WinForm控件工具箱添加ReportViewer控件 3.2 为VS2019安装RDLC报 ...

  4. spring内嵌cglib包,这里藏着一个大坑

    问题发现 2022-01-21 早上 9 点,订单系统出现大面积的"系统未知错误"报错,导致部分用户无法正常下单.查询后台日志,可以看到大量的 duplicate class at ...

  5. 【Vulnhub靶场】EMPIRE: BREAKOUT

    环境准备 下载靶机,导入到vmware里面,这应该不用教了吧 开机可以看到,他已经给出了靶机的IP地址,就不用我们自己去探测了 攻击机IP地址为:192.168.2.15 靶机IP地址为:192.16 ...

  6. NGINX的动静分离;什么是负载均衡

    目录 一:动静分离 二:负载均衡 一:动静分离 动静分离是指在 web 服务器架构中,将静态页面与动态页面或者静态内容接口和动态内容接口分开不同系统访问的架构设计方法,进而提示整个服务的访问性和可维护 ...

  7. linux关闭防火墙与开启防火墙命令

    一:下面是red hat/CentOs7关闭防火墙的命令! 1:查看防火状态 systemctl status firewalld service iptables status 2:暂时关闭防火墙 ...

  8. 运用Spring Aop,一个注解实现日志记录

    运用Spring Aop,一个注解实现日志记录 1. 介绍 我们都知道Spring框架的两大特性分别是 IOC (控制反转)和 AOP (面向切面),这个是每一个Spring学习视频里面一开始都会提到 ...

  9. LoadRunner编写socket性能测试脚本

    利用LoadRunner编写socket性能测试脚本 一.概述 Loadrunner拥有极为丰富的工具箱,供予我们制造出各种奇妙魔法的能力.其中就有此次要讨论的socket套接字操作. 二.socke ...

  10. SQL 中进行递归

    很多时候,我们做Tree的时候会用到递归.但是一般都是从数据库中拿到数据然后再程序中进行递归.昨天一个巧合,一位同事给我看了数据库中的递归,乍一看还不太明白. 表结构是这样的 CREATE TABLE ...