0

我想检查二进制文件是否与二进制模式匹配。

为此,我正在使用 clamAV 签名数据库

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

我对此进行编码以检索十六进制签名字符串

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

此外,我想将十六进制字符串更改为二进制

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 回答