YARA:第十一章-模块使用之Math

        Math模块允许用户在编写Yara规则时进行数学计算,并将结果作为规则判断的一部分。

        下面是Math模块支持的属性或方法:

名称

类型

描述

math.entropy(offset,size)

方法

返回选定范围内内容的浮点型熵值。当扫描目标为文件时,参数offset表示距文件开头的偏移大小,当扫描目标为正在运行的进程时,参数offset表示为进程内的虚拟地址。参数size表示熵值计算内容的字节数。

使用示例如下:

math.entropy(0, filesize) >= 7

math.entropy(string)

方法

返回指定字符串的熵值。

使用示例:

math.entropy("只道那时是寻常") > 7

math.monte_carlo_pi(offset, size)

方法

此方法对指定文件内容或者进程内存执行蒙特卡洛π测试,估计数据块中随机分布的点与π的接近程度,并计算这个估值与π之间的差异,转换成百分比。此方法返回一个浮点型值。当扫描目标为文件时,参数offset表示距文件开头的偏移大小,当扫描目标为正在运行的进程时,参数offset表示为进程内的虚拟地址。参数size表示熵值计算内容的字节数。

math.monte_carlo_pi(string)

方法

返回指定字符串的蒙特卡洛π测试结果。

math.serial_correlation(offset, size)

方法

此方法对指定文件内容或者进程内存序列进行相关性计算。此方法返回一个0.0到1.0之间的浮点型结果。当扫描目标为文件时,参数offset表示距文件开头的偏移大小,当扫描目标为正在运行的进程时,参数offset表示为进程内的虚拟地址。参数size表示熵值计算内容的字节数。

math.serial_correlation(string)

方法

返回指定字符串的相关性计算结果。

math.mean(offset,size)

方法

此方法对指定文件内容或者进程内存求平均值。此方法返回一个浮点型值。当扫描目标为文件时,参数offset表示距文件开头的偏移大小,当扫描目标为正在运行的进程时,参数offset表示为进程内的虚拟地址。参数size表示熵值计算内容的字节数。

使用示例如下:

math.mean(0, filesize) < 72.0

math.mean(strings)

方法

返回指定字符串的平均值。

math.deviation(offset,size,mean)

方法

此方法对指定文件内容或者进程内存求平均值,并比较所求的的平均值与给入的均值之间的偏差。此方法返回一个浮点型数值。当扫描目标为文件时,参数offset表示距文件开头的偏移大小,当扫描目标为正在运行的进程时,参数offset表示为进程内的虚拟地址。参数size表示熵值计算内容的字节数。参数mean为要比较的均值,一般均匀分布的随机样本的均值为127.5,math模块中常量MEAN_BYTES标识此值,也可以自己传入。

使用示例如下:

math.deviation(0, filesize, math.MEAN_BYTES) == 64.0

math.deviation(string,mean)

方法

返回指定字符串均值与传入的均值之间的偏差。

math.in_range(test,lower,upper)

方法

判断给定数值是否在给定范围内。参数test为给定的测试值。参数lower和upper分别是给定的范围,即最小值和最大值。此方法判定test值是否在lower和upper范围内。返回布尔类型。

使用示例如下:

math.in_range(math.deviation(0, filesize, math.MEAN_BYTES), 63.9, 64,1)

math.max(a, b)

方法

返回两个无符号整形的最大值。

math.min(a, b)

方法

返回两个无符号整形的最小值。

math.to_number(value)

方法

判断value的真假并返回0或者1。

使用示例如下:

math.to_number(SubRule1) * 60 + math.to_number(SubRule2) * 20 + math.to_number(SubRule3) * 70 > 80

math.abs(value)

方法

返回有符号整形的绝对值。

使用示例如下:

 math.abs(@a - @b) == 1

math.count(byte, offset, size)

方法

此方法返回特定字节在指定范围内出现的次数。当扫描目标为文件时,参数offset表示距文件开头的偏移大小,当扫描目标为正在运行的进程时,参数offset表示为进程内的虚拟地址。参数size表示熵值计算内容的字节数。如果offset和size参数没有给定,则默认搜索整个文件。

使用示例如下:

math.count(0x4A) >= 10

math.count(0x00, 0, 4) < 2

math.percentage(byte, offset, size)

方法

此方法返回特定字节在指定范围内出现的比率。此方法返回0到1之间的百分比数值。当扫描目标为文件时,参数offset表示距文件开头的偏移大小,当扫描目标为正在运行的进程时,参数offset表示为进程内的虚拟地址。参数size表示熵值计算内容的字节数。如果offset和size参数没有给定,则默认搜索整个文件。

使用示例如下:

math.percentage(0xFF, filesize-1024, filesize) >= 0.9

math.percentage(0x4A) >= 0.4

math.mode(offset, size)

方法

此方法返回指定范围内出现频率最高的字节。当扫描目标为文件时,参数offset表示距文件开头的偏移大小,当扫描目标为正在运行的进程时,参数offset表示为进程内的虚拟地址。参数size表示熵值计算内容的字节数。如果offset和size参数没有给定,则默认搜索整个文件。

使用示例如下:

math.mode(0, filesize) == 0xFF

math.mode() == 0x00

math.to_string(value)

方法

此方法将给定的有符号整数转换成字符串类型。

使用示例如下:

math.to_string(10) == "10"

 math.to_string(-1) == "-1"

math.to_string(int, base)

方法

将给定有符号整形按照给定进制输出字符串。此函数支持8、10和16进制。

使用示例如下:

math.to_string(32, 16) == "20" 

math.to_string(-1, 16) == "ffffffffffffffff"

  • 20
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_只道当时是寻常

打赏不得超过工资的一半呦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值