
yaraast v2.0.1rc1
مكتبة بايثون قوية وأداة سطر أوامر لتحليل قواعد YARA وتفحصها ومعالجتها من خلال تمثيل شجرة البنية المجردة (AST)
yaraast
تحليل وتحويل قواعد YARA باستخدام مجموعة أدوات AST بلغة Python
نظرة عامة
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.
التثبيت
من PyPI (موصى به)
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
أوامر CLI الأساسية
| الأمر | الوصف |
|---|---|
parse | تحليل ملف قواعد وإخراج YARA/JSON/YAML/شجرة |
validate | التحقق من القواعد وتشغيل أوامر فرعية للتحقق |
fmt | مُنسق قائم على AST (مع --check و--diff) |
format | تنسيق الإدخال إلى ملف إخراج مستهدف |
validate-syntax | نقطة دخول تحقق تركز على بناء الجملة |
lsp | تشغيل ميزات بروتوكول خادم اللغة |
مكتبة Python
التحليل الموحد
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]
وثائق وقت التشغيل
- توافق اللهجات: docs/compatibility.md
- تفاصيل وقت تشغيل LSP: docs/lsp-runtime.md
- تقرير تكافؤ LSP: docs/lsp-parity-report.md
- أحدث أداة قياس أداء وقت التشغيل: docs/benchmarks/lsp-runtime-latest.json
المتطلبات
- Python 3.11 أو 3.12 أو 3.13 أو 3.14
- راجع pyproject.toml للقائمة الكاملة للتبعيات والإضافات
المساهمة
المساهمات مرحب بها. راجع CONTRIBUTING.md للإعداد وفحوصات الجودة وإرشادات سير العمل.
- انسخ المستودع (Fork)
- أنشئ فرعًا (
git checkout -b feature/your-change) - نفذ التغييرات (
git commit -m "Add your change") - ادفع (
git push origin feature/your-change) - افتح طلب سحب (Pull Request)
سياسة المشروع موثقة في SECURITY.md وCODE_OF_CONDUCT.md وCHANGELOG.md وMIGRATING.md.
الترخيص
هذا المشروع مرخص بموجب رخصة MIT - راجع LICENSE.
المؤلف
- Marc Rivero ([email protected])
- المستودع: github.com/seifreed/yaraast
مبني لسير عمل تحليل البرمجيات الخبيثة وهندسة الكشف