2012年7月11日水曜日

◆ファイルをヘキサ(16進文字)で検索

ネットを眺めていて以下のような質問を見つけた。
findstrでバイナリを検索したい - Microsoft Answers

実際PowerShellだとどうなるのかちょっとだけ考えてみた。
(ちょっとだけなので、とりあえずできるかどうかだけ)

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015

param(
 
$FilePath,
  $FindHexString
)

$hexFileString = -join(get-content $filepath -Encoding Byte |
 
           
%{[Convert]::ToString($_,16).padleft(2,"0"
)})
           

for ($i = 0; $i + $FindHexString.Length -le $hexFileString.Length; $i += 2
) {
 
if($hexFileString.SubString($i,$FindHexString.Length) -eq $FindHexString
)
  {
   
return $true
  }
}

return $false

ファイルのパスと検索文字列を受け取って、文字列が含まれているか判定している。

まずは以下で、

Get-Content $filepath -Encoding Byte

こんなファイルの中身を
image

こんな感じに取得している。
image

ヘキサに変換して
image

前ゼロを補って1つの文字列につなげると
image

あとはこれをバイト単位(即ち2文字ずつ)でずらしながら検索文字列で舐めてあげる。

使い方はこんな感じ。
image

細かく試していないのでループの仕方とかは自信がないが、とりあえず雰囲気として検索ができているのではないだろうか。

0 件のコメント:

コメントを投稿