创建一个名为“file.ext:file.ext”的文件到底有什么作用? [关闭]

2023-12-31

我最近开始研究隐写术,并且在网上找到了一个教程,为了将新的文本文件隐藏在另一个文件中,教程提供者使用了类似于以下命令的内容:

    notepad.exe file.ext:textfile.txt

我找到了:在命令行中相当奇怪:记事本将其识别为文件的有效索引,并且原始文件(file.ext)现在在磁盘上增加了空间以包含新文本文件中的数据。由于我对cmd知之甚少,在我的学术生活中也很少使用cmd,所以我想知道这里发生了什么。这是什么特点?它的预期用途是什么?这是 Windows cmd 独有的还是 UNIX 上有等效项?


TL;DR:

您看到的是 NTFS 文件系统 (FS) 中文件的备用数据流 (ADS)。

Details:

在较旧的操作系统 (OS) 中,文件系统 (FS) 中的一个条目代表一组数据,这意味着文件只是一个文件。较新的操作系统具有现代文件系统,允许一个条目代表一组或多组数据。在 NTFS 中,这些称为流,而在其他操作系统中,这些通常称为分叉。对于这种解释,这两个术语是同义词。

在今天的 FS 中,每个文件至少有 1 个流。第一个流没有名称,并且类型为$DATA。第一个流有时称为主流、默认流或匿名流。除第一个之外的所有 ADS 都将具有名称和类型。默认且最常见的流类型是$DATA.

流的全名的形式为:

<filename>:<stream name>:<stream type>

Usage:

在Windows中(自从你提到以来就集中在那里notepad.exe),ADS 有很多用途。人们最常见的 ADS 交互(甚至没有意识到)是Zone.Identifier,它会添加到 Internet Explorer 和其他一些浏览器下载的文件中。操作系统使用这个额外的数据流作为“运行可能不安全”的标志。同样,MS Office 应用程序在打开可能包含恶意宏的文档时将使用相同的流来警告用户。在所有这些情况下,用户都会收到警告,但不会阻止他们打开危险文件。

枚举工具(示例,并非详尽无遗):

dir /r from cmd.exe

Streams.exe来自系统内部

Get-Item from powershell.exe

演示:创建、查看、读取、删除

c:\temp> dir /r ads_test*
File Not Found
c:\temp> echo this is normal text>ads_test.txt
c:\temp> dir /r ads_test*
04/11/2019  01:11 AM                21 ads_test.txt
c:\temp> echo this is text for an ADS>ads_test.txt:myHiddenAds
c:\temp> dir /r ads_test*
04/11/2019  01:12 AM                21 ads_test.txt
                                    25 ads_test.txt:myHiddenAds:$DATA
c:\temp> dir ads_test*
04/11/2019  01:12 AM                21 ads_test.txt
c:\temp> more < ads_test.txt
this is normal text
c:\temp> more < ads_test.txt:myHiddenAds
this is text for an ADS
c:\temp> type nul 2>ads_test.txt:myHiddenAds
c:\temp> dir /r ads_test*
04/11/2019  01:20 AM                21 ads_test.txt
                                     0 ads_test.txt:myHiddenAds:$DATA
c:\temp> echo this is yet another ADS>ads_test.txt:CashMeOutside
c:\temp> dir /r ads_test*
04/11/2019  01:24 AM                21 ads_test.txt
                                    25 ads_test.txt:CashMeOutside:$DATA
                                     0 ads_test.txt:myHiddenAds:$DATA
c:\temp> powershell.exe -c "& {get-item -path 'c:\temp\ads_test.txt' -stream * | ft -property FileName,Stream,Length}"
FileName             Stream        Length
--------             ------        ------
C:\temp\ads_test.txt :$DATA            21
C:\temp\ads_test.txt CashMeOutside     25
C:\temp\ads_test.txt myHiddenAds        0
c:\temp> powershell.exe -c "& {remove-item -path 'c:\temp\ads_test.txt' -stream myHiddenAds}"
c:\temp> powershell.exe -c "& {get-item -path 'c:\temp\ads_test.txt' -stream * | ft -property FileName,Stream,Length}"
FileName             Stream        Length
--------             ------        ------
C:\temp\ads_test.txt :$DATA            21
C:\temp\ads_test.txt CashMeOutside     25

其他用途:

虽然不常见,但目录也可以有 ADS。对于目录,没有默认的数据流,但有默认的目录流。目录是流类型 $INDEX_ALLOCATION。 $INDEX_ALLOCATION 类型(目录流)的默认流名称是 $I30。尽管目录没有默认数据流,但它们可以具有命名数据流。

Issues:

近年来,ADS 因被不良行为者使用和滥用来写入隐藏数据、存储病毒和保持持久性而名声不佳。即使在今天,与 ADS 相比,许多现代病毒扫描程序也更有能力检测来自主流的威胁。 Microsoft Defender、高级威胁防护和 SmartScreen 可以像检测主流威胁一样高效地检测 ADS 威胁。

Demo2 - 不良行为者如何使用 ADS 的无害示例

C:\temp> echo asdf > \\?\c:\temp\COM1.txt
C:\temp> type c:\windows\system32\calc.exe> \\?\c:\temp\COM1.txt:TotallyNotMalware.exe
C:\temp> wmic process call create "\\?\c:\temp\COM1.txt:TotallyNotMalware.exe"
C:\temp> dir /r
04/11/2019  01:30 AM                21 ads_test.txt
                                    25 ads_test.txt:CashMeOutside:$DATA
04/11/2019  02:45 AM                 7 COM1.txt

C:\temp> rem Notice above that the ADS doesn't show - This is because "COM1" is a system reserved name, and many internal and 3rd party programs deal with it wrong.

附加读物:

Microsoft - Windows 协议 https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-fscc/b134f29a-6278-4f3f-904f-5e58a713d2c5

Winitor - NTFS 备用数据流 https://winitor.com/pdf/NtfsAlternateDataStreams.pdf

Enigma0x3 - 使用备用数据流在受感染的计算机上保留 https://enigma0x3.net/2015/03/05/using-alternate-data-streams-to-persist-on-a-compromised-machine/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

创建一个名为“file.ext:file.ext”的文件到底有什么作用? [关闭] 的相关文章

  • 提取证书中主题属性的所有值

    我目前正在使用CertGetNameString http msdn microsoft com en us library windows desktop aa376086 28v vs 85 29 aspx提取每个主题属性的值 如下所示
  • 批处理脚本 FOR 循环仅设置输出的第一个字母 wsl --list -q

    我正在编写一个批处理脚本 将文件从 Windows 目录复制到 WSL 发行版 其中一部分是选择将文件复制到哪个发行版 如果我使用命令wsl list q如果给我以下输出 Ubuntu 22 04 Ubuntu 18 04 我正在尝试使用此
  • 在运行时,我如何判断我是否在 WinXP+ 上? win32

    我正在进行一些 win32 字符串 API 调用 并假设字符串以宽字符串形式出现 这在 XP 和更高版本上有效 我该如何断言这一点 这是运行时检查还是编译时检查 我做错了吗 这是一个例子 typedef std basic string
  • 如何创建向后兼容 Windows 7 的缩放和尺寸更改每显示器 DPI 感知应用程序?

    我是 WPF 和 DPI 感知 API 的新手 正在编写一个在 Windows 7 8 1 和 10 中运行的应用程序 我使用具有不同每个显示器 DPI 设置的多个显示器 并且有兴趣将我的应用程序制作为跨桌面配置尽可能兼容 我已经知道可以将
  • C++ 使用 Windows 命名管道

    由于某种原因 桅杆和从属装置都失败了 但是我可以找到任何关于它们如何工作的好例子 所以我不确定我哪里出了问题 在 ConnectNamedPipe 之后 主设备永远不会退出 WaitForSingleObject 并且从设备在第一个 boo
  • 导致崩溃转储的 Java 错误的解决方法

    我开发的一个程序偶尔会由于这个错误而导致 JVM 崩溃 http bugs java com bugdatabase view bug do bug id 8029516 http bugs java com bugdatabase vie
  • 如何在 Ubuntu VirtualBox 中运行 Meteor 应用程序并使用 Windows 主机上的编辑器进行编辑?

    我希望在运行 Ubuntu 的 virtualbox 来宾中运行一个用于开发目的的流星服务器 该项目将位于主机上的一个文件夹内 该文件夹将共享给来宾 该文件夹本身位于 Dropbox 文件夹内 这样我可以在多个虚拟机和工作站之间共享开发 但
  • 无法加载 JNI 共享库 (JDK)

    当我尝试打开时Eclipse http www eclipse org 弹出对话框指出 无法加载 JNI 共享库 C JDK bin client jvm dll 此后 Eclipse 强制关闭 我想提出以下几点 我检查了这条路径上是否存在
  • 可以读取目标文件吗?

    我很好奇 obj文件 我几乎不知道它们是什么 或者它们包含什么 所以我用 Vim 文本编辑器打开它们 我在里面发现了一种类似外星人的语言 有什么办法可以理解它们代表什么以及它们的内容是什么 另外 它们的用途是什么 Thanks Sure 但
  • 使用 sed 更新 xml 属性(Windows + cygwin 和 Linux)?

    我需要使用 sed 命令对 xml 文件进行更新 但我在这方面遇到了麻烦 它需要在 Windows 使用 cygwin 和 Linux 上运行 XML 具有以下元素
  • 仅在单个端口 8080 上转发到本地主机(Windows)可能吗? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我知道如何在 Windows 上使用 xampp 设置本地网络服务器 我在主机文件 c windows system32 drivers etc ho
  • Windows 上的递归移动命令

    我需要做一个 sh 的 bat 副本 我不太了解 Windows cmd 在 Linux 上我可以做 mv or rsync a SOURCE DEST remove sent files ignore existing whole fil
  • 将目录压缩为单个文件的方法有哪些

    不知道怎么问 所以我会解释一下情况 我需要存储一些压缩文件 最初的想法是创建一个文件夹并存储所需数量的压缩文件 并创建一个文件来保存有关每个压缩文件的数据 但是 我不被允许创建许多文件 只能有一个 我决定创建一个压缩文件 其中包含有关进一步
  • 如何在 Windows 下向 .sh 脚本传递参数?

    我正在尝试在 Windows 下执行 sh 脚本 我安装了 Git 它允许我执行 sh 文件 但是 如果不使用 sh 作为执行前缀 我似乎无法传递任何参数 我的 sh 文件 echo Test 1 如果我用以下命令执行它 gt sh tes
  • Windows:使用 CMD(或 Java)从非特权运行特权命令

    我将有一个以管理员身份运行并侦听端口的服务 我的 GUI 程序将与管理员服务对话以获取需要管理员权限的项目 如果该服务尚未运行 我需要启动它 如何让我的 GUI 程序以管理员身份运行命令 我假设用户会被询问是否要继续 我希望我可以在 CMD
  • Flask 环境变量被忽略(FLASK_ENV 和 FLASK_APP)WINDOWS 10

    After setting the environment variables FLASK ENV and FLASK APP running flask run will give me this error 该代码片段显示了命令提示符
  • 如何在拥有句柄时检查给定进程是否正在运行

    我在用ShellExecuteEx启动应用程序 成功开始阅读后TShellExecuteInfo hProcess获取已启动进程的句柄 我想定期检查我的应用程序启动的进程是否仍在运行 两个或多个同名进程可以同时运行 我想确保我的应用程序正在
  • Tkinter - 浮动窗口 - 调整大小

    灵感来自this https stackoverflow com a 22424245 13629335问题 我想为我的根窗口编写自己的调整大小函数 但我刚刚注意到我的代码显示了一些性能问题 如果你快速调整它的大小 你会发现窗口没有像我希望
  • 使用 Windows 套接字的 WriteFile 返回无效参数错误

    我已经在 Windows 套接字上苦苦挣扎了两天 无法像在 Linux 中那样只使用写入套接字 我想编写自己的 shellcode 并且正在研究如何将 stdout stdin 重定向到套接字句柄 这就是我的演奏的来源 如果有必要 我使用
  • 使用 Windows 网络共享目录时 Hg 存储库损坏

    我希望我能在这里得到一些帮助 因为 SO UX 比 Mercurial 邮件列表更好 多年来我一直在家里愉快地使用 Mercurial 我还将它与 Bitbucket Cloud 一起用于一些更严肃 但仍然是爱好 的项目 去年 我将我的团队

随机推荐

  • 无法运行 H2o 功能

    我能够很好地安装 h2o 在 R 中 但是当我运行 h2o init 时出现以下错误 h2o init H2O 尚未运行 现在开始 值错误 3L 您有 32 位版本的 Java H2O 在 64 位 Java 上运行效果最佳 请从以下网址下
  • 使用 BS4“lxml”抓取 XML 数据

    尝试解决与此非常相似的问题 使用 beautifulsoup 抓取 XML 元素属性 https stackoverflow com questions 37968565 scraping xml element attributes wi
  • AngularJS Masonry 用于动态改变高度

    我有点击时会展开和收缩的 div Masonry 库对于初始化页面非常有效 我遇到的问题是 通过 Masonry 和下面的指令进行绝对定位 当 div 展开时 它们会与下面的 div 重叠 我需要将扩展 div 下面的 div 向下移动以处
  • 我可以在 Jquery 中组合变量和选择器吗?

    假设我有这个 HTML div class top top div class middle middle div class bottom bottom div middle div top div div class middle ou
  • 是否有 Android 测试服务可以用来为我提供来自设备的真实调试信息? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • .Net矩阵[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • jQuery UI Datepicker:对齐下面的标签问题

    http jsfiddle net r7D2x http jsfiddle net r7D2x 我正在尝试在标签上使用 jQuery Datepicker span 而不是输入字段 这是代码 javascript placeholder d
  • 无法使用 Python/opencv 关闭/打开 CameraCapture:设备或资源繁忙

    当我尝试使用 Python 重新打开 opencv Camera Capture 时 我得到 libv4l2 error setting pixformat Device or resource busy HIGHGUI ERROR lib
  • rvm在centos 5.5上安装1.8.7-head错误

    我在 CentOS 5 5 上以 root 身份成功安装了 rvm 然后我尝试安装 ruby 1 8 7 head rvm 安装 1 8 7 head 并收到这样的错误 将 Ruby 从源代码安装到 usr local rvm rubies
  • 未找到 vtkRenderer/ vtkRenderWindow 的覆盖

    我是 vtk 的新手 当我运行一个小示例时 它会生成两个错误 找不到 vtkRenderer 的覆盖 找不到 vtkRenderWindow 的覆盖 我用谷歌搜索了这个问题 但找不到合适的解决方案 当我尝试在没有 CMake 的情况下创建
  • python 只记录到文件

    我有一个运行 python 脚本的 cronjob 我添加了一个logging但由于这是一项日常工作 我每天都会收到有关其功能的电子邮件 这真的很烦人 但我似乎找不到一个设置 这将使其仅记录到日志文件中 usr bin python imp
  • 使用“__dict__”或“vars()”?

    内置功能vars 对我来说看起来更像Pythonic 但我明白了 dict 使用更频繁 Python 文档表明它们是等效的 一位博主声称 dict 比vars http pythondoeswhat blogspot com 2012 01
  • 从 Bash 函数返回布尔值

    我想编写一个 bash 函数来检查文件是否具有某些属性并返回 true 或 false 然后我可以在我的脚本中的 if 中使用它 但我应该返回什么 function myfun return 0 else return 1 fi 然后我像这
  • static_casting 的结果是 constexpr void* 常量表达式吗?

    clang 拒绝 gcc 允许的这段代码 int main static constexpr const void vp nullptr static constexpr const char cp static cast
  • 未捕获异步 javascript 中引发的异常

    基本上 为什么这个异常没有被捕获 var http require http options host www crash boom bang please com port 80 method GET try var req http r
  • 如何使用 Google Cloud Composer 设置 dbt?

    我正在尝试在 Google Cloud Composer 上安装 dbt 但遇到了依赖性问题 我已按照本文的说明进行操作 https blog doit intl com setup dbt with cloud composer ab70
  • Twitter 登录崩溃并出现 TWTRInvalidInitializationException

    当我尝试使用 Twitter 登录时 我的应用程序崩溃并显示错误消息 在应用程序设置中未设置有效的 Twitter Kit URL 方案的情况下尝试登录或点赞推文 请参见https dev twitter com twitterkit io
  • 鼠标悬停时更改 html 中的字体颜色和背景

    我使用一小段内联 HTML 代码来更改鼠标悬停时表格中单元格颜色的背景 我仅在特定的表格单元格上使用此功能 因此并非所有单元格都需要这样做 td 这很好用 但我还想更改字体颜色 因此默认情况下它是带有白色文本的黑色单元格 但是当鼠标悬停时
  • 自升级到 Rails 3.1 以来,form_for 参数数量错误(3 为 2)

    在我将应用程序移植到 Rails 3 1 之前 这个 form for 曾经可以工作 div class form box style padding left 1em div
  • 创建一个名为“file.ext:file.ext”的文件到底有什么作用? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我最近开始研究隐写术 并且在网上找到了一个教程 为了将新的文本文件隐藏在另一个文件中 教程提供者使用了类似于以下命令的内容 notepad