分析雅拉规则。

plyara的Python项目详细描述


Build StatusDocumentation StatusCode HealthTest CoveragePyPi Version

YARA规则解析为字典表示。

plyara是一个脚本和库,它解析一个由多个yara规则组成的文件。 变成一个python字典表示。此工具的目标是使其更易于执行 大量操作或大型yara规则集的转换,例如提取指标, 更新属性,分析语料库。其他应用程序包括linter和dependency 跳棋。

Pyra利用Python模块PLY来标注YARA规则。

这是由8u1a维护的original plyara的社区分支。“plyara”商标 经允许使用。

安装

plyara需要python 3.6+。

使用pip安装:

pip3 install plyara

用法

在自己的应用程序中使用plyara python库:

>>>importplyara>>>parser=plyara.Plyara()>>>mylist=parser.parse_string('rule MyRule { strings: $a="1" \n condition: false }')>>>>>>importpprint>>>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"
        ]
    }
]

迁移

如果您使用的是旧版本的plyara,并且希望迁移到此版本, 需要做一些更改。最重要的是,解析器对象 实例化已更改。它是:

# Old style - don't do this!importplyara.interpasinterprules_list=interp.parseString(open('myfile.yar').read())

但现在是:

# New style - do this instead!importplyaraparser=plyara.Plyara()rules_list=parser.parse_string(open('myfile.yar').read())

现有解析的密钥保持不变,添加了新的密钥。

在为多个规则和/或文件重用parser时,请注意 导入现在在所有规则之间共享-如果一个规则具有导入,则 导入将添加到解析器对象中的所有规则。

贡献

  • 如果您发现了一个bug,或者希望看到一个新特性,那么拉取请求并 Issues总是受欢迎的。
  • 通过提交更改,您同意根据条款发布这些更改 关于LICENSE
  • 虽然不需要为更改编写通过的单元测试,但这是非常重要的 受到鼓励和赞赏。

讨论

  • 您可以在irc.freenode.net上加入我们的irc频道plyara

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何在导入到Google工作表时使用ApachePOI显示系列标签   java在Swing表上修改数据生成SQL   java TCP数据包在网络级别合并   java自动连线bean在线程位置为空   javasocket。禁用无线连接时getOutputStream()阻塞   JSON上的javascript字符串数组。stringify输出unicode字符   java在Oracle数据库中存储不同类型数据的最佳体验   Spring MVC中模板引擎后的java进程输出   不知从哪里来的java空字符串。   如何加载java。使用Adobe Flex的客户端的属性文件?   java如何替换多层括号之间的所有内容?   {JSONObject必须以java'开头   java使用commandButton或commandLink返回并管理HTML控件值   java Android大文本视图动态   java JMock需要自定义类   java Android应用程序在emulator中工作,但在设备中失败   java连接到derby数据库时使用什么文件路径格式?   java在一个函数调用中返回两个结果?