Yara规则编写

article/2025/9/23 7:22:58

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

Yara关键字

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

注释

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

/*
This is a multi-line comment …
*/
rule CommentExample //and this is single-line comment
{condition:false // just an dummy rule, don't do this
}

字符串(Strings)

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

rule HexExample
{strings:$hex_string = { F4 23 ( 62 B4 | 56 | 45 ?? 67 ) 45 }condition:$hex_string
}

十六进制字符串

文本字符串

常见文本字符串如下:

rule TextExample
{strings:$text_string = "foobar"condition:$text_string
}

转义符

转义符

不区分大小写

rule CaseInsensitiveTextExample
{strings:$text_string = "foobar" nocasecondition:$text_string
}

nocase 修饰的字符串 foobar 将匹配 Foobar , FOOBAR , 和 fOoBaR 。

宽字符

如果在目标文件中一个字符由两个字节表示,即宽字符形式,则可以使用wide关键词来表示文本字符串。

rule WideCharTextExample1
{strings:$wide_string = "Borland" widecondition:$wide_string
}

如果既想表示宽字符,也想表示ASCII码,则可以再使用ascii关键词。

rule WideCharTextExample2
{strings:$wide_and_ascii_string = "Borland" wide asciicondition:$wide_and_ascii_string
}

单个词组文本字符串

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

rule FullwordTextExample
{strings:$text_string = "foobar" fullwordcondition:$text_string
}

(不是很明白fullword关键字)

正则表达式

条件(Condition)

条件区域的内容为布尔类型表达式,因此该区域可以使用的符号可以是布尔操作符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 $c at 300
}

与at不同,使用in关键词可以表示文件偏移范围,比如: ain(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 virtual address>)
int16(<offset or virtual address>)
int32(<offset or virtual address>)
uint8(<offset or virtual address>)
uint16(<offset or virtual address>)
uint32(<offset or virtual address>)

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

rule IsPE
{condition:// MZ signature at offset 0uint16(0) == 0x5A4D and// PE signature at offset stored in MZ header at 0x3Cuint32(uint32(0x3C)) == 0×00004550
}

此外,还可以使用of、for…of等关键词表达字符串集合,使用them关键词表示隐式字符串定义。比如:

rule AnonymousStrings {
strings:
=dummy1 = “dummy2”
condition:
1 of them }

其他规则

除字符串区域和条件区域外,YARA还支持其他类型规则和形式,比如全局规则、私有规则、规则标签、元数据、额外变量。

全局规则(global rule)

旨在进行规则匹配前进行全局筛选,因此比其他规则匹配优先级要高,比如在匹配目标文件之前需要先筛选出小于2MB的文件:

global rule SizeLimit
{condition:filesize < 2MB
}

私有规则(private rule)

可以避免规则匹配结果的混乱,即若使用私有规则进行匹配则YARA不会输出任何匹配信息。比如在规则文件Rule2引用规则文件Rule1时不希望Rule1的匹配信息输出:

private rule Rule1
{strings:$a = "dummy1"$b = "dummy2"condition:$a and $b
}
rule Rule2
{strings:$a = "dummy3"condition:$a and Rule1
}

规则标签(Tag Rule)

目的在于对规则匹配结果进行筛选,仅输出用户感兴趣的匹配结果。比如:

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

元数据(MetaData)

目的在于对规则描述进行额外的描述存储,其构成方式和字符串区域一致,但不可用于条件区域引用。比如本文开头的例子。

额外变量(External Variable)

允许规则文件中存在YARA匹配时手动添加的变量内容(见下文YARA命令行参数),比如:

rule ExternalVariableExample
{condition:ext_var == 10
}

参考文章

  1. 恶意软件模式匹配利器 – YARA
  2. Welcome to YARA’s documentation!

http://chatgpt.dhexx.cn/article/oXama2DL.shtml

相关文章

Yara规则以及yargen工具总结

Yara规则以及yargen工具总结 任务目标 yara规则&#xff1b;使用yargen对webshell生成yara规则;使用yara对目标文件进行扫描。 任务一&#xff1a;yara规则 yara规则&#xff1a; 首先我从yara规则的结构出发&#xff0c;yara规则分为两部分&#xff1a;字符串定义和条件表…

Yara安装及python运用

Yara YARA是一款旨在帮助恶意软件研究人员识别和分类恶意软件样本的开源工具&#xff0c;使用YARA可以基于文本或二进制模式创建恶意软件家族描述与匹配信息。现在已经被多家公司所运用于自身的产品。 YARA-规则 YARA规则的字符串有三种类型&#xff1a;文本字符串、十六进制…

[IDAPython] no module name ‘yara‘

继续当配环境博主 问题 在装IDA插件, 比如findcrypt的时候如果IDApython环境缺少需要的包会报错 ModuleNotFoundError: No module named yara还有类似的 ModuleNotFoundError: No module named keystone ...等等 解决 在path/to/IDA/python目录下打开cmd或者powershell, 使…

yara规则--构建yara规则库

零、快速构建yara规则库的方案 Yara官方预置的规则库&#xff0c;链接 https://github.com/Yara-Rules/rules ClamAV的特征码转换为yara规则&#xff0c;利用工具clamav_to_yara.py将clamav的特征码转换为yara规则 从yara-generator爬取别人上传的样本的规则 利用 yarGen工具 …

yara规则--编写

编写 YARA 规则 — yara 4.2.0 文档 YARA规则易于编写和理解&#xff0c;并且它们的语法是 类似于 C 语言。这是您可以编写的最简单的规则 YARA&#xff0c;它什么都不做&#xff1a; rule dummy {condition:false } 一、规则标识符 每个规则都以关键字“ rule”开头&#xff0…

静态扫描之Yara第一话--安装及使用Yara

Yara安装及使用 概述 Yara是一款用于识别恶意软件及对其行为进行分类的安全利器。Yara会根据我们自己编写的yara规则&#xff0c;来对可疑软件进行一个模式匹配&#xff0c;若可疑软件中的一些特征与我们的yara规则匹配上了&#xff0c;则可以初步认定可疑软件为恶意软件。 项…

IDA报错No module named ‘yara‘

问题描述 D:\CTFTools\Reverse\IDA\ida77\plugins\findcrypt3.py: No module named yara Traceback (most recent call last):File "D:\CTFTools\Reverse\IDA\ida77\python\3\ida_idaapi.py", line 580, in IDAPython_ExecScriptexec(code, g)File "D:/CTFTool…

CentOS7下安装yara

Linux之yara的安装和使用 前言一、前置安装包1.安装automake2.安装libtool3.其余包4.SecureCRT 二、安装yara总结 前言 提示&#xff1a;本文将简述在centos下安装yara的方法&#xff1a; 一、前置安装包 在安装yara之前请先确定你的系统中是否已经安装automake&#xff0c;l…

使用 OSquery 和 YARA 进行审计

Part 1: osquery 简介 osquery是适用于 Windows、OSX、Linux 和 FreeBSD 的操作系统工具框架。这些工具使低级操作系统分析和监控既高效又直观。 osquery中的SQL表表示抽象概念&#xff0c;例如运行进程、加载的内核模块、开放式网络连接、浏览器插件、硬件事件或文件哈希。…

yara 实验

yara 实验 免责声明 本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关. 什么是 yara YARA 是一款旨在帮助恶意软件研究人员识别和分类恶意软件样本的开源工具&#xff0c;使用 YARA 可以基于文本或二进制模式创建恶意软件家族…

yara 分析器

1.下载源码 wget https://github.com/VirusTotal/yara/archive/refs/tags/v4.2.3.tar.gz 2.预编译 tar -zxf yara-4.2.0.tar.gz cd yara-4.2.0 ./bootstrap.shyum -y install automake libtool make gcc pkg-config yum -y flex bison 3.编译与安装 ./bootstrap.sh ./conf…

yara安装与使用

yara安装与使用 环境及安装工具使用yara规则编写strings部分转义大小写字符集表示匹配单个词组文本字符串 condition部分infilesizeatentrypointint8/16/32、uint8/16/32of??&#xff1f;[X-Y]them/($*)!for xxx of xxx &#xff1a;(xxx)for xxx i in (xxx) &#xff1a;(xx…

yara规则初识

一、YARA介绍 YARA 是一个免费开源工具&#xff0c;旨在帮助安全人员检测和分类恶意软件&#xff0c;但它不应仅限于这一种用途。YARA规则还可以帮助检测特定文件或您可能想要检测的任何内容。目前使用YARA 的知名软件有赛门铁克、火眼、卡巴斯基、VirusTotal、安天等。 YARA的…

Yara规则概述

一、Yara概述 YARA是一款旨在帮助恶意软件研究人员识别和分类恶意软件样本的开源工具&#xff08;由virustotal的软件工程师Victor M. Alvarezk开发&#xff09;&#xff0c;使用YARA可以基于文本或二进制模式创建恶意软件家族描述信息&#xff0c;当然也可以是其他匹配信息。…

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

现在很多人都会在网上找资源&#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、我爱分享网 网站整理了办公软件、解压软件、截图工具、…