通过“cat”命令从备用数据流中恢复文件


0

我使用以下命令将音频/视频文件隐藏在备用数据流(ADS)中

F:\>type "Message.mp3">"MainFile.txt:Message.mp3"

在尝试从ADS中检索音频/视频文件时,或者换句话说,从ADS中取回文件并将其放回常规文件中时,我使用“cat”命令

cat "f:\MainFile.txt:Message.mp3">"Message.mp3"

上述命令在Windows Powershell中执行时会检索文件,但该文件无法打开或成功播放。另外它的尺寸几乎是检索的两倍。

有人对此有发言权吗?


2
这里的问题是你试图隐藏二进制文件而你正在使用文本命令。请在typeGet-Content命令中查看二进制文件的选项。
schroeder 2016年

Answers:


1

默认情况下,catGet-Content)假定文件的内容是文本,特别是UTF-16LE。当对文本处理的假设应用时,像MP3这样的二进制文件会受到损坏。

命令处理器type保留字节,因此您可以保留该部分。要使用PowerShell提取文件,您应该小心使用字节:

[IO.File]::WriteAllBytes('C:\full\path\to\output.mp3', (cat 'F:\MainFile.txt:Message.mp3" -Encoding Byte))

非常感谢那种善意的回复。我之前通过试验获得了一个解决方案。你说得对,Byte Encoding是解决方案。喜欢将ReadCount参数添加到您的命令中,因为默认情况下它的值为1并且它一次读取一个字节n因此对媒体文件花费的时间更长,所以当ReadCount设置为“0”时,它会立即读取整个文件。[IO.File] :: WriteAllBytes('F:\ output.mp3',(cat'F:\ MainFile.txt:Message.mp3'-Encoding Byte -ReadCount 0))
Khaula

1

以下两个powershell命令将完成契约。

$a = Get-Content f:\MainFile.txt:HANDS.3gp -Encoding Byte -ReadCount 0
Set-Content f:\HANDS.3gp -Encoding Byte -Value $a
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.