【问题标题】:Accessing hidden ini file sections (colon on file name) [duplicate]访问隐藏的ini文件部分(文件名上的冒号)[重复]
【发布时间】:2021-07-09 23:50:42
【问题描述】:

我刚刚偶然发现了一段代码,它做了我以前从未见过的事情,我在任何地方都找不到有关此的信息。

程序创建了一个常规的ini 文件并写了一些东西,没什么花哨的。

文件创建后,代码进一步向文件写入数据,它在ini文件转储一个完整的7MB二进制文件,如下所示:

FileWrite(inifile:binary:$DATA)

就是这样。二进制文件被转储到文件中,我找不到访问它的方法。如果我右键单击该文件并转到属性,它会显示“大小:808bytes”和“磁盘大小:7mb”,显然二进制文件在某处。

我尝试做类似的事情并在 CMD 上写了这个:

notepad anyname.ini:WTH

记事本被执行并询问我是否要保存文件“anyname.ini:WTH”。我点击“是”,在其中写了几个字符并保存了文件

确实创建了一个名为“anyname.ini”的文件,但如果我打开它,它是空的!

问题:这是什么行为,如何访问这些数据?

【问题讨论】:

  • 这段带有“FileWrite()”的代码是用什么语言编写的?如果您在 Notepad++ 或(更好的测试)十六进制编辑器中打开文件会发生什么?
  • 自动热键。但是您可以自己执行此操作,只需键入“notepad file.ini:blabla”并回车即可。然后写几兆的文本,保存并关闭。
  • 这称为备用数据流。它们都有很好的记录,在 Google 上搜索该确切术语会找到有关该主题的大量信息。
  • 忘了回答您的其他问题 - 您可以像创建它一样使用 notepad anyname.ini:$WTH 访问它(IIRC,$ 是必需的,但我可能错了)。
  • @KenWhite $ 不需要在 ADS 流名称中

标签: windows winapi ini


【解决方案1】:

在 NTFS 文件系统上,一个文件可以包含 1 个或多个 Alternate Data Streams。 ADS 由以下命名格式标识:

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

每个 ADS 在逻辑上彼此独立,但在同一个文件中组合在一起。 CreateFile() 可以在传递它们的完全限定名称时将HANDLE 分别返回给每个 ADS。

在您的示例中,inifile:binary:$DATA 在文件 inifile 中创建了一个名为 binary 类型为 $DATA 的 ADS。在 Windows 资源管理器中,它仅向您显示文件的 main ADS 的大小,以及整个文件的总大小,包括其中的所有 ADS。

同样,anyname.ini:WTH 在文件anyname.ini 中创建一个名为WTH 的默认类型为$DATA 的ADS。

每个文件都有一个主 ADS。例如,sample.txt 有一个名为 sample.txt::$DATA 的主 ADS - 一个没有名称的 $DATA 类型的 ADS。这是用户和应用通常使用的主要 ADS。

当文件在 NTFS 系统周围复制时,其关联的 ADS 将与文件保持一致。但是如果将文件复制到非 NTFS 系统,则除主 ADS 之外的所有 ADS 都将丢失。

有关详细信息,请参阅 MSDN 的 [MS-FSCC]: File System Control Codes 文档中的 Appendix A: NTFS Alternate Streams

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-08
    • 1970-01-01
    • 2016-02-04
    • 1970-01-01
    • 2018-08-08
    • 2010-11-26
    • 2010-12-12
    • 1970-01-01
    相关资源
    最近更新 更多