我想在二进制文件内部检查它是否与二进制模式匹配。
为此,我正在使用蛤蜊签名数据库
Exploit.HTML.ObjectType:3:*:3c6f626a65637420747970653d222f2f2f2f2f2f2f2f2f2f2f2f
我对此进行编码以检索十六进制签名字符串
signature=$(echo "$line" |awk -F':' '{ print $4 }')
此外,我想将十六进制字符串更改为二进制
tmp=$(echo -n $signature | sed 's/([0-9A-F]{2})/\\\x1/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/(..)/\x1/g' <<< "$line")
这会产生:
<object type="////////////
您可以将 bin 输出放在变量中,以便:
printf -v variable $(sed 's/.*://;s/(..)/\x1/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