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

时间:2013-08-09 11:26:23

标签: winapi alternate-data-stream

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

  1. 如何在没有Sysinternals工具streams
  2. 的情况下枚举Streams
  3. 流是否会影响“主机”文件的MD5值?
  4. 如果我将“主机”文件复制/剪切到另一个(NTFS)路径会怎样?流也会复制/剪切自己吗?
  5. 如果我将“主机”文件复制/剪切到非NTFS的另一个路径会怎样?
  6. 是否可以在现有流中添加另一个流?
  7. 由于每个流都有一个实际的文件句柄,是否可以更改流的属性?
  8. 我可以使用LoadLibrary API从流加载DLL吗?
  9. 是否可以执行(例如ShellExecute)流?
  10. 使用Alternate Data Streams有哪些优点/好处/缺点?
  11. 如果我使用Alternate Data Streams
  12. ,我该如何保持谨慎?

    我期待你的答案/信息/总结。最好的语言是Delphi,但只要它使用WinAPI,任何其他语言都会这样做。

1 个答案:

答案 0 :(得分: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. 我的计算机上的ShellExecute(2)ADS上的
  9. ERROR_FILE_NOT_FOUND失败。

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

    type calc.exe > dummy.txt:calc

    wmic process call create "dummy.txt:calc"

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

  11. 请参阅链接。特别是,不要将它们用于关键数据。