Bash 匹配二进制模式



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

为此,我正在使用蛤蜊签名数据库

Trojan.Bancos-166:1:*:3d415d736715ab5ee347238cacac61c7123fe35427224d25253c7b035558baf19e54e8d1a82742d6a7b37afc6d91015f751de1102d0a31e66ec33b74034b1ab471cc1381884dfdf0bb3e4233bd075fef235f342302ffd72ecabfa5aedf1b3dc99b3348346db4d9001026aef44c592fee61493f7262ad2bd1bce8a7ce60d81022533f6473ae184935f25cf6cc07c3aebfdf70a5a09139

我对此进行编码以检索十六进制字符串表示签名

signature=$(echo "$line" |awk -F':' '{ print $4 }')

此外,我将十六进制字符串更改为二进制

printf -v variable $(sed 's/(..)/\x1/g;' <<< "$signature")

直到这里 它完美运行。

最后,我想检查我的文件(*$raw_file_path*)是否与我的二进制模式(现在为$variable)我试试这个

test_var=$(grep -qU "$variable" "$raw_file_path")

test_var=$(grep -qU --regexp="$variable" "$raw_file_path")

我不知道为什么它不起作用,Grep 不匹配任何东西.有时还会出现一些错误:

  • grep:尾随反斜杠

  • grep:无效的正则表达式

我知道它处理模式匹配问题。在我的测试中,我不想使用正则表达式。

如果您有任何想法或其他 bash 工具。谢谢。

您当前正在使用--quiet选项进行grep,方法是在 -qU 中指定 q。这可以防止grep打印任何内容到stdout,因此不会保存到test_var

将代码更改为:

test_var=$(grep -UE "$variable" "$raw_file_path")

首先可以避免额外的子外壳:

#!/bin/bash
signature="Trojan.Bancos-166:1:*:3d415d736715ab5ee347238cacac61c7123fe35427224d25253c7b035558baf19e54e8d1a82742d6a7b37afc6d91015f751de1102d0a31e66ec33b74034b1ab471cc1381884dfdf0bb3e4233bd075fef235f342302ffd72ecabfa5aedf1b3dc99b3348346db4d9001026aef44c592fee61493f7262ad2bd1bce8a7ce60d81022533f6473ae184935f25cf6cc07c3aebfdf70a5a09139"
variable=$(echo "${signature//*:/}" | sed 's/(..)/\x1/g;')

只需要确认匹配:

if grep -qU "$variable" "$raw_file_path"; then
    # matches
fi

或者需要结果进行进一步处理:

test_var=$(grep -U "$variable" "$raw_file_path")
# contents of match in test_var

返回到变量时,greps -q选择抑制标准输出

编辑

测试工作示例

> signature="Trojan.Bancos-166:1:All_text before-the last : should be trimed:3d415d736715ab5ee347238cacac61c7123fe35427224d25253c7b035558baf19e54e8d1a82742d6a7b37afc6d91015f751de1102d0a31e66ec33b74034b1ab471cc1381884dfdf0bb3e4233bd075fef235f342302ffd72ecabfa5aedf1b3dc99b3348346db4d9001026aef44c592fee61493f7262ad2bd1bce8a7ce60d81022533f6473ae184935f25cf6cc07c3aebfdf70a5a09139" 
> hex_string=$( echo "${signature//*:/}" | sed 's/(..)/\x1/g;' ) 
> echo "$hex_string"
x3dx41x5dx73x67x15xabx5exe3x47x23x8cxacxacx61xc7x12x3fxe3x54x27x22x4dx25x25x3cx7bx03x55x58xbaxf1x9ex54xe8xd1xa8x27x42xd6xa7xb3x7axfcx6dx91x01x5fx75x1dxe1x10x2dx0ax31xe6x6exc3x3bx74x03x4bx1axb4x71xccx13x81x88x4dxfdxf0xbbx3ex42x33xbdx07x5fxefx23x5fx34x23x02xffxd7x2excaxbfxa5xaexdfx1bx3dxc9x9bx33x48x34x6dxb4xd9x00x10x26xaexf4x4cx59x2fxeex61x49x3fx72x62xadx2bxd1xbcxe8xa7xcex60xd8x10x22x53x3fx64x73xaex18x49x35xf2x5cxf6xccx07xc3xaexbfxdfx70xa5xa0x91x39

相关内容

  • 没有找到相关文章

最新更新