当前位置: 首页 > 工具软件 > YARA > 使用案例 >

YARA语法

施招
2023-12-01

YARA基础

YARA关键字

allinprivateandinclude
ruleanyindexrvaascii
indexessectionatint8strings
conditionint16themcontainsint32
trueentrypointmatchesuint8false
metauint16filesizenocaseuint32
fullwordnotwideforor
globalof

关键字解释:
rule:规则标识
strings:字符串区域
condition:条件区域

字符串末尾标注的关键字:
nocase:表示匹配大小写
wide:表示是宽字节
ascii:表示是ASCII码
fullword:表示匹配单个词组文本字符串

语法

//:单行注释
/**/:多行注释
$:字符串定义
#:表示字符串在文件或内存中出现的次数

condtion:
        #a == 1 or #b > 4 and #c < 6   //a出现1次或b大于四次且c小于6次

at:表示字符串在文件中的偏移量条件或虚拟地址的条件

    condition:         $a at 100 and $b at 0x004C0000 and $c at 300    //a的地址为100且b的地址为0x004C00000且c的地址为300

in:表示文件偏移范围

condition:         
    $a in(1..100)  //a的地址在1与100之间

filesize:表示文件大小(单位是字节)

    condition:        
        filesize > 200KB//表示匹配文件大小大于200kb的文件

entrypoint:表示文件入口点,适用于PE和ELF,也适用在运行进程

    string:         
        $a = {E8 00 00 00}    
    condition:         
        $a at entrypoint    //匹配文件入口点为E8 00 00 00的文件

uinint:访问文件偏移和访问内存虚拟地址,intx,x可以是8、16、32,uin读取的是无符号整数,int读取的是有符号整数,默认读取的是小端

    condition:         
        // MZ 
        uint16(0) == 0x5A4D and
        // PE
        uint32(uint32(0x3C)) == 0×00004550

global rule:全局规则,优先级最高
private rule:私有规则,进行匹配时不会输出任何匹配信息
rule TagRule:仅输出用户感兴趣的匹配结果

rule TagRule : dummy1 dummy 2 
{    
    strings:        
        $a = "dummy1"        
        $b = "dummy2"      
    condition:        
        $a and $b 
}

of:集合

    condtion:
        2 of ($a,$b,$c)  //当abc中有两个字符串存在于文件时,表示匹配

符号:
??:匹配一字节未知数
?:匹配半字节未知数
[4-6]:跳转,该跳转指示4-6个字节的任意序列可以占据跳转的位置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HGCLD4f1-1584786924950)(index_files/3ce98492-d89a-4771-b81c-1b1a21454e1f.png)]
\":双引号
\\:反斜杠
\t:制表符
\n:换行符
\xdd:16进制表示

语法说明:
1.规则声明以rule标识
2.规则以字母、数字、下划线组成,字符串首字符不能是数字,单条描述不超过128字符
3.条件区域必须存在,字符串区域可有可无
4.字符串区域的每条规则由$开头的字符串定义
5.字符串规则使用"",十六进制规则使用{}
6.条件区域的字符串表达式的表述方式为布尔型变量,结果只有True和False
7.接受正则表达式

使用记事本编写,则需要在使用YARA规则匹配前去除BOM(用vi编辑并使用“set nobomb”可以去除BOM),否则会提示“error:non-ascii character”

命令行参数

在命令行下使用YARA进行规则匹配后,若目标文件或进程符合规则,则输出“<规则文件名> <目标文件名>”,否则无任何输出

-n:反转输出提示,匹配时无输出,不匹配时有输出

 类似资料: