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