0

バイナリ パターンに一致するかどうか、バイナリ ファイル内をチェックしたい。

そのために、clamAV署名データベースを使用しています

Exploit.HTML.ObjectType:3:*:3c6f626a65637420747970653d222f2f2f2f2f2f2f2f2f2f2f2f

これをコーディングして、16 進数の署名文字列を取得します

signature=$(echo "$line" |awk -F':' '{ print $4 }')

さらに、16進文字列を2進文字列に変更したい

tmp=$(echo -n $signature | sed 's/\([0-9A-F]\{2\}\)/\\\\\\x\1/gI' | xargs print)

最後に、ファイル ( *$raw_file_path* ) がバイナリ パターン (現在は$tmp )と一致するかどうかを確認したいと思います。

test_var=$(cat $raw_file_path | grep -U -P "$tmp")

なぜうまくいかないのかわかりません。

アイデアがあれば。

ありがとう。

4

1 に答える 1

3

これはどう?

line=Exploit.HTML.ObjectType:3:*:3c6f626a65637420747970653d222f2f2f2f2f2f2f2f2f2f2f2f
printf $(sed 's/.*://;s/\(..\)/\\x\1/g' <<< "$line")

どちらが得られますか:

<object type="////////////

したがって、bin出力を変数に入れることができます。

printf -v variable $(sed 's/.*://;s/\(..\)/\\x\1/g' <<< "$line")

catさて、 !の無駄な使用は避けてください。

grep -U "$variable" "$raw_file_path"

十分です。の結果をテストしたい場合(そして静かにするようにgrep依頼したい場合):grep

if grep -qU "$variable" "$raw_file_path"; then
    echo "Pattern found"
else
    echo "Pattern not found"
fi
于 2012-11-11T08:51:50.323 に答える