解析YARA规则。
项目描述
将 YARA 规则解析为字典表示。
Plyara是一个脚本和库,它将一个包含一个或多个YARA规则的文件解析为Python字典表示。该工具的目的是使对大量YARA规则执行批量操作或转换变得更容易,例如提取指标、更新属性和分析语料库。其他应用还包括代码检查器和依赖项检查器。
Plyara利用Python模块 PLY 对YARA规则进行词法分析。
这是一个由社区维护的,基于原始plyara(由8u1a创建)的分支。已获得“plyara”商标的使用许可。
安装
Plyara需要Python 3.6及以上版本。
使用pip进行安装
pip3 install plyara
使用方法
在您的应用程序中使用plyara Python库
>>> import plyara
>>> parser = plyara.Plyara()
>>> mylist = parser.parse_string('rule MyRule { strings: $a="1" \n condition: false }')
>>>
>>> import pprint
>>> pprint.pprint(mylist)
[{'condition_terms': ['false'],
'raw_condition': 'condition: false ',
'raw_strings': 'strings: $a="1" \n ',
'rule_name': 'MyRule',
'start_line': 1,
'stop_line': 2,
'strings': [{'name': '$a', 'type': 'text', 'value': '1'}]}]
>>>
或者,使用包含的plyara脚本从命令行执行
$ plyara -h usage: plyara [-h] [--log] FILE Parse YARA rules into a dictionary representation. positional arguments: FILE File containing YARA rules to parse. optional arguments: -h, --help show this help message and exit --log Enable debug logging to the console.
命令行工具在解析规则时将打印有效的JSON输出
$ cat example.yar rule silent_banker : banker { meta: description = "This is just an example" thread_level = 3 in_the_wild = true strings: $a = {6A 40 68 00 30 00 00 6A 14 8D 91} $b = {8D 4D B0 2B C1 83 C0 27 99 6A 4E 59 F7 F9} $c = "UVODFRYSIHLNWPEJXQZAKCBGMT" condition: $a or $b or $c } $ plyara example.yar [ { "condition_terms": [ "$a", "or", "$b", "or", "$c" ], "metadata": [ { "description": "This is just an example" }, { "thread_level": 3 }, { "in_the_wild": true } ], "raw_condition": "condition:\n $a or $b or $c\n", "raw_meta": "meta:\n description = \"This is just an example\"\n thread_level = 3\n in_the_wild = true\n ", "raw_strings": "strings:\n $a = {6A 40 68 00 30 00 00 6A 14 8D 91}\n $b = {8D 4D B0 2B C1 83 C0 27 99 6A 4E 59 F7 F9}\n $c = \"UVODFRYSIHLNWPEJXQZAKCBGMT\"\n ", "rule_name": "silent_banker", "start_line": 1, "stop_line": 13, "strings": [ { "name": "$a", "type": "byte", "value": "{6A 40 68 00 30 00 00 6A 14 8D 91}" }, { "name": "$b", "type": "byte", "value": "{8D 4D B0 2B C1 83 C0 27 99 6A 4E 59 F7 F9}" }, { "name": "$c", "type": "text", "value": "UVODFRYSIHLNWPEJXQZAKCBGMT" } ], "tags": [ "banker" ] } ]
重用解析器
如果您想要在解析大量规则或规则集时重用解析器对象以获得效率,必须使用新的clear()方法。
rules = list()
parser = plyara.Plyara()
for file in files:
with open(file, 'r') as fh:
yararules = parser.parse_string(fh.read())
rules += yararules
parser.clear()
迁移
如果您使用了plyara的旧版本,并希望迁移到这个版本,将需要进行一些修改。最重要的是,解析器对象的实例化方式已经改变。它曾是
# Old style - don't do this!
import plyara.interp as interp
rules_list = interp.parseString(open('myfile.yar').read())
但现在
# New style - do this instead!
import plyara
parser = plyara.Plyara()
rules_list = parser.parse_string(open('myfile.yar').read())
现有的已解析键保持不变,并添加了新的键。
当为多个规则和/或文件重用解析器时,请注意现在导入在所有规则间是共享的 - 如果某个规则有导入,该导入将被添加到您的解析器对象中的所有规则中。
贡献
如果您发现了一个错误,或者想要看到新功能,Pull Requests和问题总是受欢迎的。
通过提交更改,您同意根据LICENSE条款发布这些更改。
为您的更改编写通过单元测试,虽然不是必需的,但非常鼓励并受到赞赏。
请将所有代码贡献通过我们为该项目使用的每个linters:pycodestyle,pydocstyle,和pyflakes。有关这些linters的详细信息,请参阅Python代码质量权威机构:http://meta.pycqa.org/en/latest/
讨论
您可以在irc.freenode.net #plyara的IRC频道加入我们
项目详情
下载文件
下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源代码分发
构建分发
plyara-2.1.1.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9f5fcb4fc6b944a92ec2979dcc54d9cf3a02b166c99bfef9e72d534c7ab91e6d |
|
MD5 | d06f9a39ac31f99be3471c2ea76c0158 |
|
BLAKE2b-256 | add5f990d33f10dc1469a0776dcdb07e500d7575e9a4c686032ba996304c19d9 |