YARA规则易于编写和理解,并且它们的语法是 类似于 C 语言。这是您可以编写的最简单的规则 YARA,它什么都不做:
rule dummy
{
condition:
false
}
一、规则标识符
每个规则都以关键字“
rule”开头,后面跟着一个规则标识符。标识符必须遵循与C语言相同的词法约定,标识符命名有如下要求:
-
英文字母、数字、下划线组成的字符串
-
第一个字符不能是数字
-
对大小写敏感
-
不能超出128个字符长度
以下关键字是保留的,不能用作规则标识符:
二、注释
// 单行注释
/*
多行注释
*/
三、字符串
Yara中有三种类型的字符串:
3.1、十六进制字符串
定义原始字节序列
// 通配符?:可以代替某些未知字节,与任何内容匹配
rule WildcardExample
{
strings:
// 使用‘?’作为通配符
$hex_string = { 00 11 ?? 33 4? 55 }
condition:
$hex_string
}
这个规则可以匹配下面的两个字符串:
00 11 01 33 43 55
00 11 AA 33 4N 55
// 跳转:可以匹配长度可变的字符串
rule JumpExample
{
strings:
// 使用‘[]’作为跳转,与任何长度为0-2字节的内容匹配
$hex_string1 = { 00 11 [2] 44 55 }
$hex_string2 = { 00 11 [0-2] 44 55 }
// 该写法与string1作用完全相同
$hex_string3 = { 00 11 ?? ?? 44 55 }
condition:
$hex_string1 and $hex_string2
}
这个规则可以匹配下面的两个字符串:
00 11 01 22 44 55
00 11 AA 44 55
// 匹配无限长的字符串
rule BuzzLightyear
{
strings:
$hex_string = { F4 23 [-] 62 B4 }
condition:
$hex_string
}
这个规则可以匹配下面的两个字符串:
F4 23 AA FF 62 B4
F4 23 AA AA AA AA AA...FF FF 62 B4
// 也可以使用类似于正则表达式的语法
rule AlternativesExample1
{
strings:
$hex_string = { 00 11 ( 22 | 33 44 ) 55 }
condition:
$hex_string
}
可以匹配以下内容:
00 11 22 55
00 11 33 44 55
// 还可以将上面介绍的方法整合在一起用
rule AlternativesExample2
{
strings:
$hex_string = { 00 11 ( 33 44 | 55 | 66 ?? 88 ) 99 }
condition:
$hex_string
}
这个规则可以匹配下面的三个字符串:
00 11 33 44 99
00 11 55 99
00 11 66 AG 88 99
3.2、文本字符串
定义可读文本的部分。
转义符:
\" 双引号
\\ 反斜杠
\t 制表符
\n 换行符
\xdd 十六进制的任何字节
修饰符:
nocase: 不区分大小写
wide: 匹配2字节的宽字符, 这种宽字符串在许多二进制文件中都有出现
ascii: 匹配1字节的ascii字符
xor: 匹配异或后的字符串
fullword: 匹配完整单词,用于匹配那些前后没有附加其他字符的单词
private: 定义私有字符串
rule CaseInsensitiveTextExample
{
strings:
// 不区分大小写
$text_string = "foobar" nocase
// 匹配宽字符串
$wide_string = "Borland" wide
// 同时匹配2种类型的字符串
$wide_and_ascii_string = "Borland" wide ascii
// 匹配所有可能的异或后字符串
$xor_string = "This program cannot" xor
// 匹配所有可能的异或后wide ascii字符串
$xor_string = "This program cannot" xor wide ascii
// 限定异或范围
$xor_string = "This program cannot" xor(0x01-0xff)
// 全词匹配(匹配:www.domain.com 匹配:www.my-domain.com 不匹配:www.mydomain.com)
$wide_string = "dom
YARA规则编写指南:4.2.0版

YARA规则是一种类似C语言的语法,用于定义在文件或内存中查找的模式。规则包括规则标识符、注释、多种类型的字符串(如十六进制和文本字符串,支持通配符和正则表达式)、条件表达式以及如何使用运算符。此外,规则还能导入模块、使用外部变量,并支持文件包含。
最低0.47元/天 解锁文章
2271

被折叠的 条评论
为什么被折叠?



