Skip to content
概述
—— yara 使用手册 · 编写 yara 规则 最后更新: 2023-03-14 08:27:53

Yara 规则易于编写和理解,并且具有类似于 C 语言的语法,以下为 Yara 一个最简单的规则,不执行任何操作:

rule dummy
{
    condition:
        false
}

Yara 中的每条规则均以关键字 rule 开头,后跟规则标识符。标识符必须遵循与 C 语言相同的词法约定,可以包含任何字母数字字符和下划线字符,但第一个字符不能是数字。规则标识符区分大小写,且不能超过 128 个字符。以下关键字是保留的,不能用作标识符:

allandanyasciiatbase64base64wide
containsendswithentrypointfalsefilesizeforfullword
importicontainsiendswithiequalsinincludeint16
int32int32beint8int8beistartswithmatchesmeta
nonenotoforprivaterulestartswith
themtrueuint16uint16beuint32uint32beuint8
widexordefined

规则通常由两部分组成:字符串定义和条件,如果规则不依赖于任何字符串,则可以省略字符串定义部分,但条件部分始终是必需的。字符串定义部分是定义将成为规则一部分的字符串的地方。每个字符串都有一个标识符,由 $ 字符后跟一系列字母数字字符和下划线组成,这些标识符可以在条件部分中使用来引用相应的字符串。字符串可以以文本或十六进制形式定义,如下所示:

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

    condition:
        $my_text_string or $my_hex_string
}

文本字符串用双引号括起来,就像 C 语言一样。十六进制字符串由大括号括起来,由一系列可以连续出现或以空格分隔的十六进制数字组成,==十六进制字符串中不允许使用十进制数字==。

条件部分是规则逻辑所在的地方,该部分必须包含一个布尔表达式,告诉文件或进程在什么情况下满足规则。通常,条件将通过使用其标识符来引用先前定义的字符串。在此上下文中,字符串标识符充当布尔变量,如果在文件或进程内存中找到该字符串,则结果为 true,否则为 false。

Released under the MIT License.