BASH:将字符串内的十六进制表示转换为二进制等效

时间:2012-11-11 01:49:11

标签: linux bash binary hex

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

为此,我正在使用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")

我不知道为什么它不起作用。

如果您有任何想法。

感谢。

1 个答案:

答案 0 :(得分: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