
مكتبة بايثون قوية وأداة سطر أوامر لتحليل قواعد YARA وتفحصها ومعالجتها من خلال تمثيل شجرة البنية المجردة (AST)
yaraast هي مكتبة Python لتحليل ومعالجة قواعد عائلة YARA باستخدام أشجار البنية المجردة (AST). تدعم سير عمل YARA الكلاسيكية وYARA-L وYARA-X مع اكتشاف تلقائي للهجة وأدوات سطر أوامر.
| الميزة | الوصف |
|---|---|
| تحليل متعدد اللهجات | تحليل YARA وYARA-L وYARA-X من ملفات أو نصوص |
| اكتشاف تلقائي للهجة | محلل موحد يكتشف لهجات القواعد تلقائيًا |
| أدوات AST | بناء وتحويل ومقارنة وتسلسل أشجار AST |
| تنسيق وتحقق | أوامر CLI لسير عمل التحليل/التنسيق/التحقق |
| دعم التدفق | تحليل ملفات كبيرة جدًا بوضع التدفق |
| تكاملات النظام البيئي | قدرات اختيارية متعلقة بـ LSP وlibyara |
اللهجات YARA, YARA-L, YARA-X
المحللات محلل قياسي، محلل موحد، محلل تدفقي
المخرجات YARA, JSON, YAML, عروض شجرة AST
الأدوات CLI، زوار، بناة، تسلسل، فحوصات دلالية
تختلف مستويات الدعم حسب اللهجة. YARA الكلاسيكية مستقرة، وYARA-X في مرحلة بيتا، وYARA-L تجريبية، والاكتشاف التلقائي للهجة هو جهد بأفضل ما يمكن. راجع مصفوفة التوافق للمحركات والقدرات الدقيقة التي يختبرها CI.
pip install yaraast
git clone https://github.com/seifreed/yaraast.git
cd yaraast
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -e .
import yaraast
yara_code = """
rule example {
strings:
$a = "malware" nocase
condition:
$a
}
"""
document = yaraast.parse(yara_code)
print(document.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
| الأمر | الوصف |
|---|---|
parse | تحليل ملف قواعد وإخراج YARA/JSON/YAML/شجرة |
validate | التحقق من القواعد وتشغيل أوامر فرعية للتحقق |
fmt | مُنسق قائم على AST (مع --check و--diff) |
format | تنسيق الإدخال إلى ملف إخراج مستهدف |
validate-syntax | نقطة دخول تحقق تركز على بناء الجملة |
lsp | تشغيل ميزات بروتوكول خادم اللغة |
from pathlib import Path
import yaraast
source = "rule example { condition: true }"
# اكتشاف اللهجة تلقائيًا
document = yaraast.parse(source)
# فرض لهجة محددة
document = yaraast.parse(source, dialect="yara")
# تحليل الملفات، توليد مصدر جديد، وتنسيقه بشكل قانوني
Path("rules.yar").write_text(source, encoding="utf-8")
file_document = yaraast.parse_file("rules.yar")
generated = yaraast.generate(file_document)
formatted = yaraast.format_canonical(source, dialect="yara")
# الحفاظ على كل بايت خارج تعديل بايت UTF-8 صريح
offset = source.encode("utf-8").index(b"true")
rewritten = yaraast.rewrite_lossless(
source,
[yaraast.SourceEdit(offset, offset + 4, "false")],
)
# المحللات العامة تطبق حدودًا افتراضية مقيدة. تجاوزها لكل عملية عند الحاجة.
limits = yaraast.ResourceLimits(max_input_bytes=1024 * 1024, parse_deadline=5.0)
document = yaraast.parse(source, resource_limits=limits)
cancel = yaraast.CancellationToken()
cancel.cancel()
# yaraast.parse(source, cancellation_token=cancel) يرفع ParseCancelledError
ResourceLimits() يعطل جميع الحدود صراحةً. تحليل CLI يستخدم الافتراضيات العامة؛
تحليل LSP يستخدم حدودًا أكثر صرامة للإدخال والرموز والتداخل والأنماط والمواعيد النهائية
ولا يخزن نتيجة جزئية أبدًا بعد الإلغاء أو فشل الحد.
from pathlib import Path
from yaraast.parser 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(Path("rules.yar").read_text(encoding="utf-8")).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]
# أدوات وقت التشغيل والتطوير
pip install yaraast[dev-all]
المساهمات مرحب بها. راجع CONTRIBUTING.md للإعداد وفحوصات الجودة وإرشادات سير العمل.
git checkout -b feature/your-change)git commit -m "Add your change")git push origin feature/your-change)سياسة المشروع موثقة في SECURITY.md وCODE_OF_CONDUCT.md وCHANGELOG.md وMIGRATING.md.
هذا المشروع مرخص بموجب رخصة MIT - راجع LICENSE.
المؤلف
مبني لسير عمل تحليل البرمجيات الخبيثة وهندسة الكشف