【问题标题】:Retrieve data from NTFS alternative data stream从 NTFS 替代数据流中检索数据
【发布时间】:2021-03-18 06:51:04
【问题描述】:

我的文件中有一个 ADS:

17/03/2021  17:27               100 test2.txt
                                 10 test2.txt:1:$DATA
               1 File(s)            100 bytes
               0 Dir(s)  some bytes free

我通过type somefile > test2.txt:1 得到的结果是正确的 10 字节 ADS。

但是当我将它从 ADS 中 DonaldTrump 到单独的文件时,我得到了额外的 2 个字节 (0d0a):

findstr /V /L W3AllLov3DonaldTrump <test2.txt:1>test.exe

如何避免这种情况(并获得像原始文件一样的 10 字节文件而不是 12 字节文件)?

【问题讨论】:

    标签: cmd stream ads binaryfiles ntfs


    【解决方案1】:

    它是findstr,它添加了行尾(CRLF0d0a)。与findtypemore 相同。所以你不能使用这些命令之一。 Copy /b 是一个解决方案,但它不接受 ADS 名称。

    如果 ADS 中只有一行(我假设是这样):

    set /p "x="<"test2.txt:1"
    <nul set /p "=%x%" >test.exe
    

    注意:set 命令有一个长度限制,我不确定它对不可打印字符(尤其是NUL (0x00))有何反应(这在任何情况下都很常见,我会期望在.EXE),所以这可能是有限的使用。

    【讨论】:

    • 是的,这是我放入 ADS 并查看原始文件提取的二进制文件;一种组织方法,而不是将文件放在文件夹中以节省桌面混乱。除了 CRLF 问题,findstr 出现 line too long 错误,这可能是 set 的问题。
    • variable length limit 8,191,findstr line length limit 8,191set /p has even a limit of 1023!。不过我可以想象,这两个额外的字节在正确构建的.exe 中不会受到伤害。你试过吗? (所有涉及的命令都是为文本构建的,因此请仔细检查二进制数据是否发生了疯狂的事情。fc /b 原始文件和结果文件)
    • 是的,我发现额外的 2 个字节是什么,fc /b,这不是问题;我可以轻松删除它们;只是我必须为它执行另一个命令。正在寻找一种无需额外处理即可提取原始文件的方法来删除 2 个冗余字节。另一个问题是我还没有发现任何东西可以删除原始文件而没有错误:setfind 有行限制,more 只是冻结,可能在一个屏幕之后期待一些输入。 for 也可能有缓冲区限制。 Powershell [IO.File]::WriteAllBytes 也会冻结。
    猜你喜欢
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    • 2019-06-04
    • 1970-01-01
    • 2013-08-06
    • 2019-11-19
    相关资源
    最近更新 更多