
Python ASTツールキットでYARAルールを解析・分析・変換
yaraast は、抽象構文木(AST)を使用してYARA系ルールを解析・操作するためのPythonライブラリです。自動方言検出とCLIツールを備え、classic YARA、YARA-L、YARA-Xのワークフローをサポートします。
Dialects YARA, YARA-L, YARA-X
Parsers Standard parser, unified parser, streaming parser
Outputs YARA, JSON, YAML, AST tree views
Tooling CLI, visitors, builders, serialization, semantic checks
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)
# Parse and print normalized YARA
yaraast parse rules.yar
# Parse to JSON
yaraast parse rules.yar --format json
# Parse with explicit dialect
yaraast parse rules.yar --dialect yara-x
# Validate file (syntax + parse checks)
yaraast validate rules.yar
# Format file in-place (AST-based formatter)
yaraast fmt rules.yar
# Check formatting without modifying file
yaraast fmt rules.yar --check
from yaraast.unified_parser import UnifiedParser
from yaraast.dialects import YaraDialect
# Auto-detect dialect
ast = UnifiedParser.parse_file("rules.yar")
# Force specific dialect
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 support
pip install yaraast[lsp]
# libyara integration
pip install yaraast[libyara]
# Performance tooling
pip install yaraast[performance]
# Visualization support
pip install yaraast[visualization]
# Everything
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の構築、変換、差分、シリアライズ |
| 整形と検証 | parse/format/validateワークフロー用CLIコマンド |
| ストリーミングサポート | ストリーミングモードで非常に大きなファイルを解析 |
| エコシステム統合 | オプションのLSPおよびlibyara関連機能 |
| コマンド | 説明 |
|---|
parse | ルールファイルを解析し、YARA/JSON/YAML/treeを出力 |
validate | ルールを検証し、検証サブコマンドを実行 |
fmt | ASTベースのフォーマッター(--checkおよび--diff付き) |
format | 入力を指定の出力ファイルへ整形 |
validate-syntax | 構文中心の検証エントリポイント |
lsp | Language Server Protocol機能を起動 |