我想检查二进制文件内部是否与二进制模式匹配。
为此,我正在使用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")
我不知道为什么它不起作用。
如果您有任何想法。
感谢。
答案 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