使用 Python AST 工具包解析、分析和转换 YARA 规则
yaraast 是一个 Python 库,用于使用抽象语法树 (AST) 解析和操作 YARA 家族规则。它支持经典 YARA、YARA-L 和 YARA-X 工作流,并具备自动方言检测和 CLI 工具。
方言 YARA, YARA-L, YARA-X
解析器 标准解析器、统一解析器、流式解析器
输出 YARA, JSON, YAML, AST 树视图
工具 CLI、访问器、构建器、序列化、语义检查
pip install yaraast
git clone https://github.com/mriverolopez/yaraast.git
cd yaraast
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -e .
from yaraast.unified_parser import UnifiedParser
yara_code = """
rule example {
strings:
$a = "malware" nocase
condition:
$a
}
"""
ast = UnifiedParser.parse_string(yara_code)
print(ast.rules[0].name)
# 解析并输出标准化的 YARA
yaraast parse rules.yar
# 解析为 JSON
yaraast parse rules.yar --format json
# 指定方言解析
yaraast parse rules.yar --dialect yara-x
# 验证文件(语法 + 解析检查)
yaraast validate rules.yar
# 原地格式化文件(基于 AST 的格式化器)
yaraast fmt rules.yar
# 检查格式而不修改文件
yaraast fmt rules.yar --check
from yaraast.unified_parser import UnifiedParser
from yaraast.dialects import YaraDialect
# 自动检测方言
ast = UnifiedParser.parse_file("rules.yar")
# 强制指定方言
ast = UnifiedParser.parse_file("rules.yar", dialect=YaraDialect.YARA)
from yaraast import Parser
from yaraast.visitor import BaseVisitor
class RuleCollector(BaseVisitor):
def __init__(self):
self.rules = []
def visit_rule(self, node):
self.rules.append(node.name)
super().visit_rule(node)
ast = Parser(open("rules.yar", encoding="utf-8").read()).parse()
collector = RuleCollector()
collector.visit(ast)
print(collector.rules)
# LSP 支持
pip install yaraast[lsp]
# libyara 集成
pip install yaraast[libyara]
# 性能工具
pip install yaraast[performance]
# 可视化支持
pip install yaraast[visualization]
# 全部安装
pip install yaraast[all]
欢迎贡献。请参阅 CONTRIBUTING.md 了解设置、质量检查和贡献流程指南。
git checkout -b feature/your-change)git commit -m "Add your change")git push origin feature/your-change)本项目基于 MIT 许可证发布 - 详见 LICENSE。
作者
专为恶意软件分析和检测工程工作流构建
| 功能 | 描述 |
|---|
| 多方言解析 | 从文件或字符串解析 YARA、YARA-L 和 YARA-X |
| 自动方言检测 | 统一解析器自动检测规则方言 |
| AST 工具 | 构建、转换、差异化和序列化 AST |
| 格式化与验证 | CLI 命令支持解析/格式化/验证工作流 |
| 流式支持 | 以流模式解析非常大的文件 |
| 生态集成 | 可选的 LSP 和 libyara 相关功能 |
| 命令 | 描述 |
|---|
parse | 解析规则文件并输出 YARA/JSON/YAML/树 |
validate | 验证规则并运行验证子命令 |
fmt | 基于 AST 的格式化器(支持 --check 和 --diff) |
format | 将输入格式化为目标输出文件 |
validate-syntax | 语法验证入口点 |
lsp | 启动语言服务器协议功能 |