अपडेट पर वापस जाएँ
New releaseAug 27, 2026

yaraast v2.0.1rc1

YARA नियमों को Abstract Syntax Tree (AST) प्रतिनिधित्व के माध्यम से पार्स करने, विश्लेषण करने और हेरफेर करने के लिए एक शक्तिशाली Python लाइब्रेरी और CLI टूल

साझा करें

YARAAST

yaraast

Python AST टूलकिट के साथ YARA नियमों को पार्स, विश्लेषित और रूपांतरित करें

CI License: MIT Python 3.11-3.14

GitHub Stars GitHub Issues Docs


अवलोकन

yaraast एक Python लाइब्रेरी है जो Abstract Syntax Trees (AST) का उपयोग करके YARA-परिवार के नियमों को पार्स और हेरफेर करने के लिए है। यह स्वचालित डायलेक्ट पहचान और CLI टूलिंग के साथ क्लासिक YARA, YARA-L, और YARA-X वर्कफ़्लो का समर्थन करता है।

मुख्य विशेषताएँ

विशेषताविवरण
बहु-डायलेक्ट पार्सिंगफ़ाइलों या स्ट्रिंग्स से YARA, YARA-L, और YARA-X पार्स करें
स्वचालित डायलेक्ट पहचानएकीकृत पार्सर नियम डायलेक्ट्स का स्वतः पता लगाता है
AST टूलिंगAST बनाएं, रूपांतरित करें, अंतर देखें, और क्रमबद्ध करें
फ़ॉर्मेटिंग और सत्यापनपार्स/फ़ॉर्मेट/वैलिडेट वर्कफ़्लो के लिए CLI कमांड
स्ट्रीमिंग समर्थनस्ट्रीमिंग मोड के साथ बहुत बड़ी फ़ाइलें पार्स करें
इकोसिस्टम एकीकरणवैकल्पिक LSP और libyara-संबंधित क्षमताएँ

समर्थित नियम इकोसिस्टम

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

समर्थन स्तर डायलेक्ट के अनुसार भिन्न होते हैं। क्लासिक 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/tree आउटपुट करें
validateनियम सत्यापित करें और सत्यापन उपकमांड चलाएँ
fmtAST-आधारित फ़ॉर्मेटर (--check और --diff के साथ)
formatइनपुट को लक्ष्य आउटपुट फ़ाइल में फ़ॉर्मेट करें
validate-syntaxसिंटैक्स-केंद्रित सत्यापन प्रवेश बिंदु
lspLanguage Server Protocol सुविधाएँ लॉन्च करें

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) raises 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]

रनटाइम दस्तावेज़


आवश्यकताएँ

  • Python 3.11, 3.12, 3.13, या 3.14
  • पूर्ण निर्भरता और अतिरिक्त सूची के लिए pyproject.toml देखें

योगदान

योगदान का स्वागत है। सेटअप, गुणवत्ता जाँच, और वर्कफ़्लो दिशानिर्देशों के लिए CONTRIBUTING.md देखें।

  1. रिपॉजिटरी को फ़ोर्क करें
  2. एक ब्रांच बनाएं (git checkout -b feature/your-change)
  3. परिवर्तन कमिट करें (git commit -m "Add your change")
  4. पुश करें (git push origin feature/your-change)
  5. एक Pull Request खोलें

परियोजना नीति SECURITY.md, CODE_OF_CONDUCT.md, CHANGELOG.md, और MIGRATING.md में प्रलेखित है।


लाइसेंस

यह परियोजना MIT लाइसेंस के तहत लाइसेंस प्राप्त है - LICENSE देखें।

लेखक


मैलवेयर विश्लेषण और डिटेक्शन इंजीनियरिंग वर्कफ़्लो के लिए निर्मित

श्रेणियाँ