yara规则--编写

YARA规则是一种类似C语言的语法,用于定义在文件或内存中查找的模式。规则包括规则标识符、注释、多种类型的字符串(如十六进制和文本字符串,支持通配符和正则表达式)、条件表达式以及如何使用运算符。此外,规则还能导入模块、使用外部变量,并支持文件包含。
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值