概述
—— yara 使用手册 · 编写 yara 规则 最后更新: 2023-03-14 08:27:53
Yara 规则易于编写和理解,并且具有类似于 C 语言的语法,以下为 Yara 一个最简单的规则,不执行任何操作:
rule dummy
{
condition:
false
}Yara 中的每条规则均以关键字 rule 开头,后跟规则标识符。标识符必须遵循与 C 语言相同的词法约定,可以包含任何字母数字字符和下划线字符,但第一个字符不能是数字。规则标识符区分大小写,且不能超过 128 个字符。以下关键字是保留的,不能用作标识符:
| all | and | any | ascii | at | base64 | base64wide |
| contains | endswith | entrypoint | false | filesize | for | fullword |
| import | icontains | iendswith | iequals | in | include | int16 |
| int32 | int32be | int8 | int8be | istartswith | matches | meta |
| none | not | of | or | private | rule | startswith |
| them | true | uint16 | uint16be | uint32 | uint32be | uint8 |
| wide | xor | defined |
规则通常由两部分组成:字符串定义和条件,如果规则不依赖于任何字符串,则可以省略字符串定义部分,但条件部分始终是必需的。字符串定义部分是定义将成为规则一部分的字符串的地方。每个字符串都有一个标识符,由 $ 字符后跟一系列字母数字字符和下划线组成,这些标识符可以在条件部分中使用来引用相应的字符串。字符串可以以文本或十六进制形式定义,如下所示:
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。