You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中提取YARA规则的规则名及元数据以构建数据库?

提取YARA规则信息的Python解决方案

方案一:利用官方yara-python库(推荐)

官方yara-python库其实内置了规则的属性访问能力,只是文档未重点提及。加载编译后的规则后,可直接获取规则名和meta字段:

import yara

def extract_yara_info(file_path):
    # 编译YARA规则文件
    try:
        rules = yara.compile(filepath=file_path)
    except yara.SyntaxError as e:
        print(f"规则文件语法错误: {e}")
        return None
    
    rule_info_list = []
    for rule in rules:
        # 提取核心信息
        info = {
            "rule_name": rule.name,
            "author": rule.meta.get("author"),
            "filetype": rule.meta.get("filetype"),
            "description": rule.meta.get("description")
        }
        rule_info_list.append(info)
    
    return rule_info_list

# 使用示例
rule_data = extract_yara_info("malware_rules.yar")
if rule_data:
    for item in rule_data:
        # 此处可将item存入数据库(如SQLite/PostgreSQL)
        print(item)

优势

  • 完全兼容YARA语法,能处理注释、复杂meta值等边缘情况
  • 无需自行编写解析逻辑,准确性有保障

方案二:轻量级正则解析(适合简单规则)

如果不需要编译规则,仅需静态提取基础信息,可用正则表达式快速匹配,适合规则格式规范的场景:

import re

def parse_yara_static(file_content):
    # 匹配规则名
    rule_name = re.search(r'^\s*rule\s+(\w+)\s*{', file_content, re.MULTILINE)
    rule_name = rule_name.group(1) if rule_name else None
    
    # 匹配meta段内容
    meta_match = re.search(r'^\s*meta:\s*(.*?)\s*(?:{|\Z)', file_content, re.DOTALL | re.MULTILINE)
    meta_dict = {}
    if meta_match:
        for line in meta_match.group(1).split('\n'):
            line = line.strip()
            # 匹配key=value格式(支持单/双引号)
            kv_match = re.match(r'(\w+)\s*=\s*["\'](.*?)["\']', line)
            if kv_match:
                meta_dict[kv_match.group(1)] = kv_match.group(2)
    
    return {
        "rule_name": rule_name,
        "author": meta_dict.get("author"),
        "filetype": meta_dict.get("filetype"),
        "description": meta_dict.get("description")
    }

# 使用示例
with open("simple_rule.yar", 'r', encoding='utf-8') as f:
    content = f.read()
print(parse_yara_static(content))

局限性

  • 无法处理多行meta值、嵌套注释等复杂语法
  • 对非标准格式的规则可能匹配失败

内容的提问来源于stack exchange,提问作者AMLO_TACTICO

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 01:17:34