您如何使用备用数据流?有哪些好处?

Ben*_*iss 2 winapi alternate-data-stream

我已经阅读了一些文档Alternate Data Streams,我正在考虑在我自己的项目中使用它们.然而,在我决定使用它们之前,我还有很多未知的知识和开放的问题.这就是我提出这个问题清单的原因:

  1. 如果没有Sysinternals工具,你如何枚举Streams streams
  2. 流是否会影响"主机"文件的MD5值?
  3. 如果我将"主机"文件复制/剪切到另一个(NTFS)路径会发生什么?溪流也会自行复制/剪切吗?
  4. 如果我将"主机"文件复制/剪切到非NTFS的另一个路径会发生什么?
  5. 是否可以在现有流中添加另一个流?
  6. 由于每个流都有一个实际的文件句柄,是否可以更改流的属性?
  7. 我可以使用LoadLibraryAPI从流加载DLL吗?
  8. 是否可以执行(例如ShellExecute)流?
  9. 使用有哪些优点/好处/缺点Alternate Data Streams
  10. 如果我使用,我必须谨慎Alternate Data Streams吗?

我期待你的答案/信息/总结.最好的语言是Delphi,但任何其他语言都可以,只要它使用WinAPI.

Fel*_*bek 8

您可以在此处查看许多问题:http://flexhex.com/docs/articles/alternate-streams.phtml

  1. 枚举:使用NtQueryInformationFile,请参阅链接.从Windows Vista开始,您还可以使用命令行枚举流dir /r.

  2. 校验和:由于您通常在按名称访问文件时仅打开未命名的数据流,因此在计算校验和时仅使用此流的内容.

  3. 复制到NTFS:Windows资源管理器和复制命令行实用程序复制所有流.

  4. 复制到其他FS:备用数据流丢失.

  5. 嵌套流:不,文件只包含一个流列表,它们不能嵌套.

  6. 属性:某些属性是基于文件的,有些属性(加密,压缩,稀疏)是基于流的.

  7. LoadLibrary 似乎在备用数据流上工作.

  8. ShellExecuteERROR_FILE_NOT_FOUND我的计算机上的(2)ADS失败了.

    请注意,理论上可以从命令行运行ADS:

    type calc.exe > dummy.txt:calc

    wmic process call create "dummy.txt:calc"

  9. ADS可用于存储与文件关联的一些非关键信息.例如,从Internet下载的可执行文件将具有ADS,这会导致Explorer在执行文件之前显示警告.

  10. 见链接.特别是,不要将它们用于关键数据.

  • NTFS不是唯一支持命名流的文件系统.与文章推荐的内容(安全)相反,应该查询[GetVolumeInformation()](http://msdn.microsoft.com/en-us/library/windows/desktop/aa364993(v = vs.85).aspx )而是FILE_NAMED_STREAMS标志. (3认同)
  • 如果你在@命令行播放,`dir/r`也会列出流 (2认同)