バイナリファイルの文字列の16進値をgrepするにはどうすればよいですか?


7

次のようなバイナリファイルがあります(Emacsの 16進モードで開く):16進値 '22081b00081f091d2733170d123f3114'がファイルに存在する場合、どのようにgrepできますか?

00000000: 2b08 1b00 1418 0825 0407 3830 271d 170d  +......%..80'...
00000010: 2208 1b00 081f 091d 2733 170d 123f 3114  ".......'3...?1.
00000020: 1909 1b00 0934 1f10 2503 3803 111c 3821  .....4..%.8...8!

私の例では、探している16進値はアドレス0x10にあるため、ヒットを返すはずです。


あなたgrepはそれのためにどうなりますか?grep 2208 1b00 081f 091d 2733 170d 123f 3114、スペースあり。
テルドン

grepPオプションを知っているので、を使用できますgrep -aP '\x22\x08\x1b...'。答えはstackoverflow.com/questions/6319878/からです...-あなたはretcodeだけに興味があると思うので、出力をにリダイレクトする必要があります/dev/null
-ott--

16進エディターを使用します。「Hex Editor Neo」は、Windowsに適した無料のツールです。* nixにもいくつかあると思います。
ダニエルRヒックス

回答:


7

次を使用できます。

xxd -p /your/file | tr -d '\n' | grep -c '22081b00081f091d2733170d123f3114'

コンテンツが一致する場合は1、それ以外の場合は0を返します。

xxd -p、平野進ダンプにファイルを変換tr -d '\n'によって追加改行を削除xxdし、grep -cマッチした行数をカウントします。

このように、入力はファイル内の位置に関係なく一致します(例で位置0x18にあった場合、2つに分割され、grepはを使用しないと一致しませんでしたtr)。ただし、ファイル内での位置はありません。


1
短い文字列の場合、バイトの2番目のニブルから一致する可能性があり、誤検出が発生します。
ルスラン

オフセットニブルにマッチするのを避けるために、私は各バイトの周りに空白を追加するためにsedを使用:xxd -p | tr -d '\n' | sed -e 's/../\0 /g' | grep -q '12 34'
氏DOS

2

後でgrepsを使用すると、16進文字列検索などを確実に実行できます。「この16進シーケンスの後に1 つ以上の文字列が続き、これとこの正規表現に一致するテキストが続く」など、完全な正規表現(正規表現)の力で実行できます。10

grep -aPo '\x01\x00\x00\x00[0-z]+\x00\x00\x00[0-z]+' <file>

特定のIP-DVRシステムでDHAV形式のビデオの制御と取得に使用されるプロトコルストリームのバイナリダンプとファイル内のログイン/パスペアを一致させます。つまり、一致する部分には、16進コードのバイトと、0x01 0x00 0x00 0x00それに続くASCIIログイン0x00、さらに2 0バイト、そしてパスワードが必要です。



[!-~]+パスワードが必要ではありませんか?
スコット14年

0

grep 単独でこれを行うことはできません-より高いレベルで動作し、エンコードされたテキストを検索します。

1つの解決策はod、バイナリを16進数に変換し、ASCIIで出力してからgrepにパイプして16進数文字列を検索することです。

od -t x -A n <input_file> | grep <hex string>

ただし、これは、改行とスペースを挿入して16進数をフォーマットするため、さらに問題が発生します。それを処理するには、を使用してみてくださいsed


1
それができないとは言いgrep ません(@ gb0techの答えとstackoverflow.com/questions/4180081/binary-grep-on-linuxを参照)が、エンコードされたテキストで動作するという説明は間違いなく正しく有用です。odgrepingの前にすべてを16進文字列に変換する必要がある場合も、パフォーマンスへの影響は最小限です。
カールリヒター14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.