Skip to content
拓展
—— yara 使用手册 · 编写 yara 规则 最后更新: 2023-03-11 15:22:11

Yara 规则的某些方面尚未涵盖,但仍然非常重要。它们是:全局规则、私有规则、标签和元数据。

全局规则

全局规则可以对所有规则施加限制,例如,假设你希望所有规则忽略超过特定大小限制的文件,可以逐条规则对其条件进行所需的修改,或者只编写一个全局规则,如下所示:

global rule SizeLimit
{
    condition:
        filesize < 2MB
}

可以根据需要定义任意数量的全局规则,它们将在其余规则之前进行判定,而其余规则只有在满足所有全局规则时才会进行判定。

私有规则

私有规则是一个非常简单的概念,它们只是在给定文件上匹配时 Yara 不会报告的规则。乍一看,根本不报告的规则可能看起来毫无意义,但当与 Yara 提供的从另一个规则引用一个规则的可能性混合在一起时 (请参阅匹配条件中引用其它规则),它们就会变得有用。私有规则可以作为其他规则的构建块,同时防止 Yara 的输出出现不相关的信息。要将规则声明为私有,只需在规则声明之前添加关键字 private 即可。

private rule PrivateRuleExample
{
    ...
}

可以将 privateglobal 修饰符应用于规则,从而生成 Yara 不会报告但必须满足的全局规则。

规则标签

Yara 的另一个有用的功能是可以向规则添加标签,这些标签稍后可用于过滤 Yara 的输出并仅显示你感兴趣的规则。可以向规则添加任意数量的标签,它们在规则标识符之后声明,如下所示:

rule TagsExample1 : Foo Bar Baz
{
    ...
}

rule TagsExample2 : Bar
{
    ...
}

标签必须遵循与规则标识符相同的词汇约定,因此只允许使用字母数字字符和下划线,并且标签不能以数字开头,也区分大小写。

使用 Yara 时,只能输出那些标有你提供的一个或多个标签的规则。

元数据

除了字符串定义和条件部分之外,规则还可以有一个元数据部分,可以在其中放置有关规则的其他信息。元数据部分使用关键字 meta 定义,如下例所示:

rule MetadataExample
{
    meta:
        my_identifier_1 = "Some string data"
        my_identifier_2 = 24
        my_identifier_3 = true

    strings:
        $my_text_string = "text here"
        $my_hex_string = { E2 34 A1 C8 23 FB }

    condition:
        $my_text_string or $my_hex_string
}

从示例中可以看出,元数据标识符后面始终跟有等号和分配给它们的值。指定的值可以是字符串 (仅适用于 UTF8)、整数或布尔值 true 或 false 之一。请注意,元数据部分中定义的 标识符-值 对不能在条件部分中使用,它们的唯一目的是存储有关规则的附加信息。

Released under the MIT License.