Yara规则概述

article/2025/9/23 8:00:20

一、Yara概述

YARA是一款旨在帮助恶意软件研究人员识别和分类恶意软件样本的开源工具(由virustotal的软件工程师Victor M. Alvarezk开发),使用YARA可以基于文本或二进制模式创建恶意软件家族描述信息,当然也可以是其他匹配信息。YARA的每一条描述或规则都由一系列字符串和一个布尔型表达式构成,并阐述其逻辑。YARA规则可以提交给文件或在运行进程,以帮助研究人员识别其是否属于某个已进行规则描述的恶意软件家族。

 

这是一个简单的例子,YARA的规则可以复杂和强大到支持通配符、大小写敏感字符串、正则表达式、特殊符号以及其他特性。


二、Yara规则编写

YARA规则的标识符类似于C语言结构,其规则声明以rule标识,在规则描述中可以包括字母、数字甚至下划线字符,但字符串第一个字符不能是数字,且单条描述不能超过128个字符。和C语言一样,YARA规则也有关键字:

YARA规则由字符串区域和条件区域两部分组成,其中条件区域必须存在,字符串区域则可有可无,比如不依赖任何字符串的规则:

rule Dummy

    condition:

        false

}

字符串区域中的每条规则都由$开头的字符串定义,其规则内容可以是字符形式或十六进制形式,所定义的字符串由条件区域引用:

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语言一样,字符串规则使用双引号,而十六进制规则使用大括号引用,每个十六进制数字之间用空格间隔,且十进制数字不允许出现在十六进制规则中。

条件区域决定YARA规则的逻辑,因此该区域的描述必须包含布尔型表达式,以判别目标文件或进程是否满足该规则。通常条件内容都会引用字符串区域中的字符串定义,比如上例中的$my_text_string和$my_hex_string。条件区域的字符串表述方式为布尔型变量,若文件或进程内存符合字符串表达式则其结果为True,否则即为False。

 

注释方式

YARA规则的注释方式和类C语言一样,可以用//进行单行注释,也可以用/**/进行多行注释

 

字符串区域

YARA规则的字符串有三种类型:文本字符串、十六进制字符串、正则表达式。文本字符串用来定义文件或进程内存中可读型内容,十六进制字符串用来定义字节内容,正则表达式可用在文本字符串和十六进制字符串中。比如:

rule HexExample

{

    strings:

        $hex_string = { F4 23 ( 62 B4 | 56 | 45?? 67 ) 45 }

    condition:

        $hex_string

}

文本字符串在YARA规则中是大小写敏感的,但可以使用nocase关键字来取消大小写敏感,字符串中的特殊字符亦可以使用转义符表达,比如:

rule NocaseTextExample

{

    strings:

        $text_string ="\\\"foobar\"\\" nocase

    condition:

        $text_string

}

以上规则中所表示的字符串内容是\”foobar”\,由于使用nocase关键词,故亦可以表达\”FoObAr”\、\”FOOBAR”\等等大小写形式。

如果在目标文件中一个字符由两个字节表示,即宽字符形式,则可以使用wide关键词来表示文本字符串。如果既想表示宽字符,也想表示ASCII码,则可以再使用ascii关键词。比如:

rule WideAsciiTextExample

{

    strings:

        $text_string ="\\\"foobar\"\\" nocase wide ascii

    condition:

        $text_string

}

如果想匹配单个词组文本字符串,可以使用fullword关键词。比如:

rule FullwordTextExample

{

    strings:

        $text_string = "foobar"fullword

    condition:

        $text_string

}

 

条件区域

条件区域的内容为布尔类型表达式,因此该区域可以使用的符号可以是布尔操作符and、or和not,关系操作符>、<、==、<=、>=和!=,算数操作符+、-、*、/、%和按位操作符&、|、>>、<<、^、~。比如:

rule Example

{

    strings:

        $a = "text1"

        $b = "text2"

        $c = "text3"

    condition:

        ($a or $b) and $c

}

如果想表达字符串描述在文件或进程内存中出现的次数,则在条件表达式中将字符串定义中的$替换为#。比如:

rule CountExample

{

    strings:

        $a = "text1"

        $b = "text2"

        $c = "text3"

    condition:

        #a == 1 or #b > 4 and #c < 6

}

如果想表达字符串在文件中的偏移量条件或虚拟地址的条件,则使用at关键词表示,且表达式中的数字类型可以是十进制或十六进制。比如:

       rule CountExample

{

    strings:

        $a = "text1"

        $b = "text2"

        $c = "text3"

    condition:

        $a at 100 and $b at 0x004C0000 and $cat 300

}

与at不同,使用in关键词可以表示文件偏移范围,比如:$a in (1..100)、$b in (100..filesize)。这里的filesize亦为关键词,表示文件的大小(单位字节),但该关键词仅适用于分析对象是文件形式。比如:

rule FileSizeExample

{

    condition:

        filesize > 200KB

}

另外一个特殊的关键词是entrypoint,表示文件入口点,适用于PE文件和ELF文件,当然也可以用于在运行进程。比如:

       rule FileSizeExample

{

    string:

        $a = {E8 00 00 00}

    condition:

        $a at entrypoint

}

在指定的文件位置表达可访问数据也是条件表达式可以做到的,需要用到uintXX或intXX关键词以及以下函数:

int8(<offset or virtualaddress>)

int16(<offset or virtualaddress>)

int32(<offset or virtualaddress>)

uint8(<offset or virtualaddress>)

uint16(<offset or virtualaddress>)

uint32(<offset or virtual address>)

利用以上关键词和函数,若想判断目标文件是否为PE文件,相应的规则可写为:

       rule IsPE

{

    condition:

        // MZ signature at offset 0

        uint16(0) == 0x5A4D and

        // PE signature at offset stored in MZheader at 0x3C

        uint32(uint32(0x3C)) == 0×00004550

}

 

 

注:根据恶意软件,现在一般将Yara规则分为11类:

1. Antidebug_AntiVM:反调试/反沙箱类yara规则 
2. Crypto
:加密类yara规则 
3. CVE_Rules
CVE漏洞利用类yara规则 
4. email
:恶意邮件类yara规则 
5. Exploit-Kits
EKyara规则 
6. Malicious_Documents
:恶意文档类yara规则 
7. malware
:恶意软件类yara规则 
8. Mobile_Malware
:移动恶意软件类yara规则 
9. Packers
:加壳类yara规则 
10. utils
:通用类yara规则 
11. Webshells
Webshellyara规则

 

三、演示





http://chatgpt.dhexx.cn/article/7TmfLc6S.shtml

相关文章

这五个资源超多的资源网站 请务必珍藏起来

现在很多人都会在网上找资源&#xff0c;如今互联网的快速发展也让大家找起资源来非常的容易&#xff0c;只要有好的资源网站&#xff0c;就不怕没有找不到的资源。而今天我和大家分享的就是几个资源超多的网站&#xff0c;希望你们不再缺少资源。 1、落花网 这个就很厉害了&…

这5款电影资源网站,让人第一眼就心动,第二眼就流连忘返!

工作烦心了一天&#xff0c;回到家忙完事情泡一杯热腾腾的咖啡&#xff0c;拿起手机或平板&#xff0c;打开电影网站&#xff0c;惬意的躺在沙发上享受自己心仪的电影带给你的快乐时光吧&#xff01; 今天小编为大家推荐几款电影资源网站&#xff0c;喜欢的小伙伴千万不要错过&…

盘点程序员必备的免费资源网站

文章目录 1、软件资源类1、JDK国内镜像资源站2、 Arm原生 JDK&#xff08;为 M1系列Mac而生&#xff09;3、程序员大礼包 2、工具类1、在线工具2、菜鸟工具3、爱资料 2、算法&题库1、LeetCode2、LintCode3、牛客网 3、在线资源1、Github2、Stack Overflow3、CSDN4、天堂电影…

游戏美术资源网站推荐

梚辰 2022.4.25 未经授权禁止转发 最近我整理了一下以前使用过的购买游戏美术资源的网站&#xff0c;现在把这些分享给大家&#xff0c;希望对大家有些帮助。 1.Unity Asset Store&#xff08;Unity资源商店&#xff09; 这些Unity资源商店可以算是Unity官方的资源库了&#x…

晶体结构资源网站

晶体结构资源网站 1、无机晶体结构数据查询软件ICSD&#xff08;findit&#xff09;2、[晶体原型百科全书aflowlib](http://aflowlib.org/prototype-encyclopedia/index.html)3、[Crystallography Open Database](http://www.crystallography.net/cod/search.html)4、[American…

免费资源网站,你想要的全都有【各类宝藏资源 】

这6个免费资源网站&#xff0c;能帮你找到所有想要资源 前言 今天就把多年收藏整理的各类资源网站全都分享出来&#xff0c;都是完全免费的“资源”网站&#xff0c;质量非常高&#xff0c;一起来看看吧&#xff01; 1、我爱分享网 网站整理了办公软件、解压软件、截图工具、…

刷机资源网站推荐

是不是各位想刷机的朋友找不到资源站今天就来推荐一下&#xff08;资源均来源于网络&#xff0c;如果侵权请联系删除&#xff09; 1.萤火虫资源站 首页 - 首页 - &#x1f448;萤火虫资源站 (kamiui.ml) 资源比较充足还有OneDrive资源 2.Mindows工具箱 mindows.cn 可以把你的手…

珍藏已久的6个资源网站,每天让你不愁找不到资源,你值得拥有

想必如果你是一名在网上混迹多年的老网民,手上一定有几套属于自己的网站,有时候想要什么直接在里面搜索十分方便!也不需要满网进行瞎找,但是这类网站起来很快倒下来也很多,所以在很多时候我们要不断的更新自己手头上的资源。 这里我也整理了6款适合我们工作学习中常用的网…

你还在为找资源而发愁?这里有最佳的5个资源网站!

搜索引擎在我们工作生活中是举足轻重的工具了&#xff0c;想要在如此庞大的互联网资源库中找到自己需要的信息也是不简单的&#xff0c;这里给大家分享5个优质的资源网站&#xff0c;看完你肯定有相见恨晚的感觉。 1、纳米学习 http://www.1nami.com/ 这是一个集合了网易云课…

13个免费资源网站,你想要的全都有!【各类宝藏资源,建议收藏】

前言 前段时间&#xff0c;博主写了一篇文章关于如何用Python自制一款音乐播放器&#xff0c;有不少粉丝私信我说&#xff0c;这些高颜值UI设计模板都是从哪里找的&#xff0c;可以把网址分享出来嘛~ 当然没问题&#xff0c;今天就把多年收藏整理的各类资源网站全都分享出来&…

​遗传算法优化神经网络实现数据预测

作者 | 李秋键 责编 | 寇雪芹 头图 | 下载于视觉中国 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 引言 随着人工智能和大数据的发展&#xff0c;大量实验和数据处理等流程对算法的要求也随之变得越来越高&#xff0c;故综合以及灵活运用不同的算法以实现更高效的…

Python实现GWO智能灰狼优化算法优化支持向量机回归模型(svr算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 灰狼优化算法(GWO)&#xff0c;由澳大利亚格里菲斯大学学者 Mirjalili 等人于2014年提出来的一种群智能…

基于遗传算法GA算法优化BP神经网络(Python代码实现)

一、 概述 BP-GA算法的设计︰基于遗传算法的BP神经网络算法(以下简称BP-GA)就是在BP神经网络的学习过程中,将权重和阀值描述为染色体,并选取适宜的适应函数,然后进行GA迭代,直到某种意义上的收敛.与普通BP学习算法相比,算法 BP一GA的优势在于可以处理一些传统方法不能处理的例子…

Python实现WOA智能鲸鱼优化算法优化支持向量机分类模型(SVC算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 鲸鱼优化算法 (whale optimization algorithm,WOA)是 2016 年由澳大利亚格里菲斯大学的Mirjalili 等提出…

基于灰狼算法优化支持向量机的数据分类算法及其MATLAB实现-附代码

基于灰狼算法优化支持向量机的数据分类算法及其MATLAB实现-附代码 文章目录 基于灰狼算法优化支持向量机的数据分类算法及其MATLAB实现-附代码1 GWO-SVM 模型1.1 灰狼优化器GWO1.2 支持向量机分类SVM 2 基于GWO-SVM 的分类算法2.1 优化变量与目标函数的选取2.2 GWO-SVM 建模步骤…

基于麻雀算法优化LSTM回归预测(matlab)

基于麻雀算法优化LSTM回归预测&#xff08;matlab&#xff09; 概述&#xff1a; 麻雀算法构思lstm原理麻雀优化lstm原理代码及结果展示 第一部分 麻雀算法构思 众所周知&#xff0c;麻雀是常见的留鸟而且非常喜欢群居。这种生物是非常聪明的&#xff0c;有很强的记忆力&am…

鲸鱼优化算法优化BP神经网络回归预测的算法设计-附代码

鲸鱼优化算法WOA优化BP神经网络回归预测模型以及MATLAB代码实现 文章目录 鲸鱼优化算法WOA优化BP神经网络回归预测模型以及MATLAB代码实现1. 算法描述2. 鲸鱼优化算法优化BP神经网络预测的步骤与流程图设计3. WOA-BP预测算法的参数设置4. 运行结果5. MATLAB代码 1. 算法描述 鲸…

遗传算法优化BP神经网络

遗传算法原理 遗传算法背景不作介绍。遗传算法作为一种并行随机搜索最优化算法&#xff0c;将自然界的优胜劣汰的生物进化原理引入优化参数形成的编码串联群体中&#xff0c;按照所选的适应度函数并通过遗传中的选择&#xff0c;交叉和变异对个体进行筛选&#xff0c;使适应度…

基于蝙蝠算法优化BP神经网络的数据分类算法及其MATLAB实现-附代码

基于蝙蝠算法优化BP神经网络的数据分类算法及其MATLAB实现-附代码 文章目录 基于蝙蝠算法优化BP神经网络的数据分类算法及其MATLAB实现-附代码1 蝙蝠算法与BP神经网络分类模型1.1 蝙蝠算法BA1.2 one-hot编码 2 基于蝙蝠算法BA优化的BP神经网络分类算法2.1 优化变量与目标函数的…

粒子群算法优化PID参数实例

粒子群优化算法&#xff08;PSO&#xff09;以及Matlab实现 1、粒子群算法 粒子群算法是一种智能优化算法。关于智能&#xff0c;个人理解&#xff0c;不过是在枚举法的基础上加上了一定的寻优机制。试想一下枚举法&#xff0c;假设问题的解空间很小&#xff0c;比如一个函数 …