Skip to content
外部变量
—— yara 使用手册 · 编写 yara 规则 最后更新: 2023-03-08 08:13:23

外部变量允许你定义依赖于外部提供的值的规则,例如,可以编写以下规则:

rule ExternalVariableExample1
{
    condition:
        ext_var == 10
}

在这种情况下,ext_var 是一个外部变量,其值在运行时分配 (参见命令行工具的 -d 选项和 externals yara-python 中的方法)。外部变量可以是以下类型:整数、字符串或布尔值,它们的类型取决于分配给它们的值。整型变量可以替代条件中的任何整型常量,布尔变量可以占据布尔表达式的位置,例如:

rule ExternalVariableExample2
{
    condition:
        bool_ext_var or filesize < int_ext_var
}

字符串类型的外部变量可以与运算符一起使用:containsstartswithendswith 及其不区分大小写的对应项:icontainsistartswithiendswith。它们还可以与 matches 运算符一起使用,如果字符串与给定的正则表达式匹配,则返回 true。不区分大小写的字符串比较可以通过特殊运算符 iequals 来完成,该运算符仅适用于字符串。对于区分大小写的比较,请使用常规 ==

rule ContainsExample
{
    condition:
        string_ext_var contains "text"
}

rule CaseInsensitiveContainsExample
{
    condition:
        string_ext_var icontains "text"
}

rule StartsWithExample
{
    condition:
        string_ext_var startswith "prefix"
}

rule EndsWithExample
{
    condition:
        string_ext_var endswith "suffix"
}

rule IequalsExample
{
    condition:
        string_ext_var iequals "string"
}

rule MatchesExample
{
    condition:
        string_ext_var matches /[a-z]+/
}

可以将正则表达式修饰符与 matches 运算符一起使用,例如,如果希望上一个示例中的正则表达式不区分大小写,则可以使用 /[a-z]+/i。请注意正则表达式后面的 i 以类似于 Perl 的方式。你还可以使用 s 修饰符进行单行模式,在此模式下,点匹配包括换行符在内的所有字符。当然,这两个修饰符可以同时使用,如下例所示:

rule ExternalVariableExample5
{
    condition:
        /* case insensitive single-line mode */
        string_ext_var matches /[a-z]+/is
}

请记住,规则中使用的每个外部变量都必须在运行时定义,可以使用命令行工具的 -d 选项,也可以给 yara-python 中适当方法提供 externals 参数。

Released under the MIT License.