使用Powershell读取/解析二进制文件

use*_*295 25 binary powershell parsing

我正在尝试解析二进制文件,我需要一些帮助.我在网上寻找"解析二进制文件","阅读二进制文件","阅读二进制文件内的文本"等等,我没有运气.

例如,我如何从这个二进制文件中读取这个文本?任何帮助将非常感激.我正在使用PowerShell.

在此输入图像描述

Fer*_*ntl 32

您似乎有一个二进制文件,其中包含固定或其他可推导位置的文本.Get-Content可能会帮助你,但...它会尝试将整个文件解析为一个字符串数组,从而创建一个"垃圾"数组.此外,你不会知道特定的"字符串"是从哪个文件位置.

您可以尝试.NET类File来读取和Encoding解码.这只是每次通话的一条线:

# Read the entire file to an array of bytes.
$bytes = [System.IO.File]::ReadAllBytes("path_to_the_file")
# Decode first 12 bytes to a text assuming ASCII encoding.
$text = [System.Text.Encoding]::ASCII.GetString($bytes, 0, 12)
Run Code Online (Sandbox Code Playgroud)

在您的实际情况中,您可能会在循环中查找字节数组,查找特定字符串序列的开头和结尾,并使用这些索引指定要从中提取文本的字节范围GetString.

我提到的.NET方法在.NET Framework 2.0或更高版本中可用.如果您安装了PowerShell 2.0,那么您已经拥有它.


mrw*_*1t3 6

您可以通过 Get-Content -Encoding byte 读取文件。我不确定如何解析它。

  • [PowerShell 6](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-content?view=powershell-6) 不支持“byte”。 (4认同)
  • @SilverbackNet:也尝试“Get-Content ... -Encoding Byte -Raw”,它返回“[System.Byte[]]”而不是“[System.Object[]]”,但在其他方面的处理完全相同。 (3认同)
  • Franklin Yu 的 RE 评论:从 PS6 开始,不支持“byte”,因为严格来说,它不是 **字符编码**。通过指定“-AsByteStream”而不是“-Encoding”,该功能仍然可用。将整个文件读入变量会生成字节的“Object[]”(如果使用“-Raw”,则生成实际的“Byte[]”),然后可以根据需要对其进行处理。在示例中,*strings*(注意嵌入的 '\0')可以通过 `-join [char[]]$bytearray[0xe00..0xe11]` 和 `-join [char[]]$bytearray[ 获得0xe13..0xe54]`。使用的方法取决于“解析二进制文件”的含义。 (3认同)

Kei*_*ill 6

如果您只是在查找字符串,请查看SysInternals中的strings.exe实用程序.