2012-05-31 141 views
4

我正在嘗試搜索二進制文件。通過十六進制編輯器查看文件後,我在整個文件中找到了模式。你可以在這裏看到它們。正如你可以看到它們在文件列表之前和之後。使用Powershell解析二進制文件

/%...... C:\用戶\\桌面\ test1.pdf..9

/%...... C:\用戶\\桌面\ 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

YY/0; 2345678ê\桌面\ deft_manual? PDF?

?SIC科學,計算機和Internet.pdf

?潔具\桌面\深入Python 3.PDF?

回答

2

您可以使用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)的應用以及尋找自己。