使用 Powershell 解析二进制文件

4
我尝试在二进制文件中搜索。通过十六进制编辑器审查文件后,我发现文件中有一些模式。您可以在这里看到它们。正如您所看到的那样,它们出现在文件列表之前和之后。
/% ......C:\ Users \ Desktop \ test1.pdf..9
/% ......C:\ Users \ Desktop \ testtesttesttest.pdf..9
我想要做的是找到 ..9(HEX = 000039),然后“备份”直到找到 /% ......(HEX = 2F25A01C1000000000),然后向前移动x个字节,以便我可以获得完整的路径。我现在拥有的代码如下:
$file = 'C:\Users\<username>\Desktop\bc03160ee1a59fc1.automaticDestinations-ms'
$begin_pattern = '2F25A01C1000000000' #/% ......
$end_pattern = '000039' #..9
$prevBytes = '8'
$bytes = [string]::join('', (gc $file -en byte | % {'{0:x2}' -f $_}))
[regex]::matches($bytes, $end_pattern) |
% {
$i = $_.index - $prevBytes * 2
[string]::join('', $bytes[$i..($i + $prevBytes * 2 - 1)])
}

以下是部分的输出结果:

ffff2e0000002f000000300000003b0000003200000033000000340000003500000036000000370000003800 655c4465736b746f705c466f72656e7369635f426f6f6b735c5b656e5d646566745f6d616e75616c2e706466 0000000000000000000000000000010000000a00000000000000000020410a000000000000000a00000000

ÿÿ./0;2345678?e\Desktop\deft_manual.pdf?

资料科学、计算机和互联网.pdf

软件\Desktop\Dive Into Python 3.pdf?

1个回答

4
你可以从PowerShell中使用System.IO.BinaryReader类。
$path = "<yourPathToTheBinaryFile>"

$binaryReader = New-Object System.IO.BinaryReader([System.IO.File]::Open($path, [System.IO.FileMode]::Open, [System.IO.FileAccess]::Read, [System.IO.FileShare]::ReadWrite))

然后您就可以访问所有方法,例如:
$binaryReader.BaseStream.Seek($pos, [System.IO.SeekOrigin]::Begin)

据我所知,在不使用ReadBytes并自己实现搜索的情况下,没有轻松找到模式的方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接