yara安装与使用

环境及安装

操作系统:win10

安装地址:https://github.com/VirusTotal/yara/releases/tag/v4.2.0-rc1

直接在这个地址下就可以

工具使用

在cmd目录下打开
命令:

yara my_rule my_file 

第一个参数是你的yara规则文件,第二个是检测文件,可以是目录
在这里插入图片描述

yara规则编写

yara的的每一条规则都由一系列字符串和一个bool型表达式构成,并且都具有关键字。

规则以字母、数字、下划线组成,字符串首字符不能是数字,单条描述不超过128字符

yara的基本规则定义如下:

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

}

其中字符串区域非必需,条件区域必需。

可以存在只有条件区域的规则,如:

rule Dummy
{
	condition:
		true
}

strings部分

Strings部分可以使用3种字符串:文本字符串、十六进制字符串、正则表达式。

文本字符串:用来定义文件或内存中可读的部分;

十六进制字符串:用来定义十六进制字节内容;

正则表达式:可用来在文本字符串和十六进制字符串种。

文本字符串采用""引用;
十六进制采用{}引用,每个十六进制字符间用空格间隔,并且只能包含十六进制字符;
正则表达式直接在文本字符串和十六进制字符串种使用即可使用即可,也可单独使用//引用。
转义

字符串的转义直接参科与其他语言的转义一致。

大小写

yara默认对大小写敏感,可以使用nocase关键字来使yara对大小写不敏感。

例如:

rule NocaseTextExample

{

    strings:

        $text_string ="foobar" nocase	//foobar可以替换为FOOBAR、Foobar等

    condition:

        $text_string

}
字符集表示

如果在目标文件中一个字符由两个字节表示,即宽字符形式,则可以使用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

}

/*
abcfoobar
foobar-abc
foobar.abc
在上述3种情况中,只会匹配到第三种情况
*/

condition部分

condition部分通常由一个bool型表达式构成。若该表达式成立则会被检测到,反之则不能。

该表达式由bool操作符、关系操作符、算数操作符、按位操作符和yara关键字组成。

condition部分涉及到的关键字及其使用方法。

#用来表示出现的次数

rule CountExample
{
    strings:
        $a = "dummy1"
        $b = "dummy2"

    condition:
        #a == 6 and #b > 10
}
/*
将$替换成#即可
#a即代表$a出现的次数
*/
in

in:用来确定相对于文件或进程的偏移地址的范围。

rule InExample
{
    strings:
        $a = "dummy1"
        $b = "dummy2"

    condition:
        $a in (0..100) and $b in (100..filesize)
}
/*
$a出现在偏移地址0~0x100并且$b出现在0x100之后
*/
filesize

filesize代表文件大小,若目标不为文件将无视

rule FileSizeExample
{
    condition:
       filesize > 200KB
}
at

表示字符串在文件中的偏移位置或虚拟地址

 rule CountExample

{

    strings:

        $a = "text1"

        $b = "text2"

        $c = "text3"

    condition:

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

}
entrypoint

表示文件入口点,适用于PE文件和ELF文件,也适用于正在运行的程序

该变量已被弃用,在yara3.0后被彻底弃用

rule FileSizeExample

{

    string:

        $a = {E8 00 00 00}

    condition:

        $a at entrypoint

}
int8/16/32、uint8/16/32

在相应地址访问相应数据类型,如果要读取大端整数,请使用以结尾的相应函数be

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>)

例如:

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

}
of

集合

rule Example
{    
    strings:        
        $a = "dummy1"        
        $b = "dummy2"
        $c = "dummy3"
    condtion:
        2 of ($a,$b,$c)  //当$a$b$c中有两个字符串存在于文件时,表示匹配
}
??

匹配一字节未知数,即通配符

匹配半字节未知数,即通配符

[X-Y]

字符长度在X到Y的范围中即可匹配

限制:X<=Y;

​ 若X=Y,则[X]与[X-Y]等价;

从YARA 2.0开始,还可以使用[X-]或[-X]这种无界跳转

rule JumpExample
{
        strings:
           $hex_string = { F4 23 [4-6] 62 B4 }

        condition:
           $hex_string
}
/*
F4 23 01 02 03 04 62 B4
F4 23 00 00 00 00 00 62 B4
F4 23 15 82 A3 04 45 22 62 B4
以上3个字符串均可匹配
*/
them/($*)

可以使用them/($*)来代指所有规则

rule OfExample4
{
    strings:
        $a = "dummy1"
        $b = "dummy2"
        $c = "dummy3"

    condition:
        1 of them // equivalent to 1 of ($*)
}
@

@用来表示字符串在文件或内存中出现的偏移或虚拟地址

@a[i]表示字符串a在文件或内存中第i次出现的偏移或虚拟地址

如果i大于实际出现次数,将返回NaN(not a number)

rule OfExample4
{
    strings:
        $a = "dummy1"
        $b = "dummy2"
        $c = "dummy3"

    condition:
        @a[1]=0x123456
}
!

!用来表示字符串在文件或内存中出现的字符串长度

用法与@基本一致

!a=!a[1]

rule OfExample4
{
    strings:
        $a = "dummy1"
        $b = "dummy2"
        $c = "dummy3"

    condition:
        !a[1]=0x123456
}
for xxx of xxx :(xxx)

使用for n of ($a,$b,$c) : ($ at entrypoint)来表示在字符集中存在n个字符串符合条件

$用来代指字符集中的每一个字符串,其他如@、!、#等均可同样省略

rule OfExample4
{
    strings:
        $a1 = "dummy1"
        $a2 = "dummy2"
        $a3 = "dummy3"

    condition:
        for 2 of ($a*) : ($ at entrypoint)
}
for xxx i in (xxx) :(xxx)

功能用法与上一个基本一致

rule OfExample4
{
    strings:
        $a1 = "dummy1"
        $a2 = "dummy2"
        $a3 = "dummy3"

    condition:
        for 2 i in (1..#a) : ( @a[i] < 100 )	//遍历所有$a出现位置,偏移均要小于100
}

其他yara关键字

yara关键字具体如下:

global

global rule:全局规则,优先级最高

private

private rule:私有规则,进行匹配时不会输出任何匹配信息

TagRule

rule TagRule:规则标签,可以让你在YARA输出的时候只显示你感兴趣的规则,而过滤掉其它规则的输出信息

​ 你可以为规则添加多个标签

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

在另一个规则中,直接引用即可

import

可以使用import导入其他模块,可以是第三方或官方模块,或自己写的模块

include

该部分与C语言类似,可以用来包含其他规则文件

注释

yara使用//进行单行注释,使用/**/进行多行注释。

mate

mate是yara中可有可无的一部分,用来放置有关该规则的其他信息

外部变量

可以使用在ext_var中添加一个外部变量,在编写规则时直接引用即可

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Windows上安装yara-python可以按照以下步骤进行操作: 1. 首先,确保您已经安装了Python。您可以从Python官方网站(https://www.python.org/)下载并安装最新版本的Python。 2. 您可以使用pip工具来安装yara-python模块。打开命令提示符或PowerShell,并输入以下命令来安装pip(如果尚未安装): ``` python get-pip.py ``` 或者 ``` python -m ensurepip --upgrade ``` 3. 确保pip已经安装成功后,您可以使用以下命令来安装yara-python模块: ``` pip install yara-python ``` 如果您遇到类似于"Using legacy setup.py install for yara-python, since package 'wheel' is not installed"的提示信息,可以尝试使用以下命令来解决: ``` pip install wheel pip install yara-python ``` 4. 安装完成后,您可以通过编写Python代码来测试yara-python模块是否成功安装。例如,您可以创建一个名为test_yara.py的文件,并在其中写入以下代码: ```python import yara # 定义一个简单的规则 rule = """ rule HelloWorld { strings: $hello = "Hello, World!" condition: $hello } """ # 编译规则 compiled_rule = yara.compile(source=rule) # 在文件中匹配规则 matches = compiled_rule.match("path_to_file") # 打印匹配结果 for match in matches: print(match) ``` 请将"path_to_file"替换为您要匹配的文件的路径。 5. 运行test_yara.py文件,如果没有出现错误并且成功打印出匹配结果,说明yara-python模块已经在Windows上成功安装并且可以正常使用了。 请注意,yara-python模块适用于Windows、Linux和macOS系统,并且支持x86 / x86-64架构的可执行文件和内存转储。它可用于构建YARA签名,对于公司、CERT等大型组织以及个人来说都是非常有用的。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值