1 正则表达式(Regular expressions)
正则表达式是Yara最强大的功能之一,用户可以通过编写正则表达式来作为匹配规则。下面是一个包含正则表达式的字符串规则示例。字符串标识符 $re1 代表的是一个正则表达式规则,其内容由反斜杠包裹。
rule RegExpExample
{
strings:
$re1 = /[0-9a-fA-F]{32}/
condition:
$re1
}
在正则表达式的规则字符串中,关键字"nocase"、"ascii"、"wide"和"fullword"也可以使用,而且这些关键则的作用和修饰文本字符串时的作用一样。
除此之外,针对正则表达式规则,后面还可以使用关键字"i"和"s",且紧邻反斜杠符。其中"i"与"nocase"的作用一样,表示匹配时大小写不敏感。其中"s"标识字符串中的"."字符表示任意一个字符,包括换行符。示例如下:
rule RegExpExample
{
strings:
// "nocase"、"wide"、"ascii"、"fullword"也可以用来修饰正则表示。
$re1 = /foo/ nocase wide
// 关键字"s"表示规则中,"."字符可以匹配任意字符,包括换行符。
$re2 = /bar./s
// 关键字"i"表示大小写不敏感,等同于"nocase"。
$re3 = /baz/is // Both modifiers can be used together
// 关键字"i"和"s"可以同时使用修饰规则。
$re4 = /baz/is // Both modifiers can be used together
condition:
any of them
}
Yara正则表达式可识别以下字符:
字符 | 说明 |
\ | 用于转义后面字符。 |
^ | 两种含义,第一种表示正则表达式需要从文件的开头就开始匹配。第二种是当^出现在[]的第一个位置时,表示对此类进行取反(例如[abc]为匹配a、b或c。[^abc]为匹配除a、b或c以外的任何字符)。 |
$ | 匹配文件的末尾 |
. | 匹配除换行符以外的任何单个字符。 |
| | 或。 |
() | 分组。 |
[] | 字符类。 |
* | 匹配0次或者多次。 |
+ | 匹配1次或多次。 |
? | 匹配0次或1次。 |
{n} | 精确匹配n次。 |
{n,} | 至少匹配n次。 |
{,m} | 最多匹配m次。 |
{n,m} | 匹配n到m次。 |
*? | 匹配0到更多次,不贪婪。 |
+? | 匹配1次或更多次,不贪婪。 |
?? | 匹配0或1次,不贪婪 |
{n}? | 精确匹配n次,不贪婪。 |
{n,}? | 至少匹配n次,不贪婪。 |
{,m}? | 最多匹配m次,不贪婪。 |
{n,m}? | 匹配n到m次,不贪婪。 |
\t | TAB字符。 |
\n | 换行符。 |
\r | 回车符。 |
\f | 换页符。 |
\a | 警报符。 |
\xNN | 十六进制转移序列,其中NN是两个十六进制苏子,表示要转义的字符的ASCII码值。 |
\w | 匹配单个字符,包括字母、数字和下划线"_"。 |
\W | 匹配非单个字符。 |
\s | 匹配空白字符。 |
\S | 匹配非空白字符。 |
\d | 匹配十进制数字。 |
\D | 匹配非数字字符。 |
\b | 匹配单词边界。 |
\B | 匹配除单词边界外。 |