我想检查一个二进制文件内部是否匹配二进制模式。
为此,我使用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")

我不知道为什么不起作用。
如果你知道的话。
谢谢。

最佳答案

这个怎么样?

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

关于linux - BASH:将字符串内的十六进制表示形式转换为等效的二进制形式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13327907/

10-11 22:49
查看更多