Retour aux mises à jour
New releaseAug 27, 2026

yaraast v2.0.1rc1

Une puissante bibliothèque Python et un outil CLI pour parser, analyser et manipuler les règles YARA via la représentation en arbre de syntaxe abstraite (AST)

Partager

YARAAST

yaraast

Analysez, analysez et transformez les règles YARA avec une boîte à outils AST Python

CI License: MIT Python 3.11-3.14

GitHub Stars GitHub Issues Docs


Aperçu

yaraast est une bibliothèque Python pour analyser et manipuler les règles de la famille YARA à l'aide d'arbres de syntaxe abstraite (AST). Elle prend en charge les flux de travail classiques YARA, YARA-L et YARA-X avec détection automatique de dialecte et outils CLI.

Fonctionnalités clés

FonctionnalitéDescription
Analyse multi-dialectesAnalyse YARA, YARA-L et YARA-X à partir de fichiers ou de chaînes
Détection automatique de dialecteAnalyseur unifié qui détecte automatiquement les dialectes de règles
Outils ASTConstruire, transformer, différencier et sérialiser les AST
Formatage et validationCommandes CLI pour les flux de travail d'analyse/formatage/validation
Prise en charge du streamingAnalyse de très grands fichiers en mode streaming
Intégrations écosystèmeCapacités optionnelles liées à LSP et libyara

Écosystème de règles pris en charge

Dialectes   YARA, YARA-L, YARA-X
Analyseurs  Analyseur standard, analyseur unifié, analyseur de streaming
Sorties     YARA, JSON, YAML, vues d'arbre AST
Outils      CLI, visiteurs, constructeurs, sérialisation, vérifications sémantiques

Les niveaux de prise en charge diffèrent selon le dialecte. Le YARA classique est stable, YARA-X est en version bêta, YARA-L est expérimental, et la détection automatique de dialecte est au mieux. Consultez la matrice de compatibilité pour connaître les moteurs et capacités exacts testés par CI.


Installation

Depuis PyPI (recommandé)

pip install yaraast

Depuis la source

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 .

Démarrage rapide

import yaraast

yara_code = """
rule example {
    strings:
        $a = "malware" nocase
    condition:
        $a
}
"""

document = yaraast.parse(yara_code)
print(document.ast.rules[0].name)

Utilisation

Interface en ligne de commande

# Analyse et affiche le YARA normalisé
yaraast parse rules.yar

# Analyse en JSON
yaraast parse rules.yar --format json

# Analyse avec un dialecte explicite
yaraast parse rules.yar --dialect yara-x

# Valide le fichier (vérifications de syntaxe + d'analyse)
yaraast validate rules.yar

# Formate le fichier en place (formateur basé sur AST)
yaraast fmt rules.yar

# Vérifie le formatage sans modifier le fichier
yaraast fmt rules.yar --check

Commandes CLI principales

CommandeDescription
parseAnalyse un fichier de règles et génère YARA/JSON/YAML/arbre
validateValide les règles et exécute les sous-commandes de validation
fmtFormateur basé sur AST (avec --check et --diff)
formatFormate l'entrée vers un fichier de sortie cible
validate-syntaxPoint d'entrée de validation axé sur la syntaxe
lspLance les fonctionnalités du Language Server Protocol

Bibliothèque Python

Analyse unifiée

from pathlib import Path

import yaraast

source = "rule example { condition: true }"

# Détection automatique du dialecte
document = yaraast.parse(source)

# Forcer un dialecte spécifique
document = yaraast.parse(source, dialect="yara")

# Analyser des fichiers, générer une nouvelle source et formater de manière canonique
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")

# Préserver chaque octet en dehors d'une modification d'octet UTF-8 explicite
offset = source.encode("utf-8").index(b"true")
rewritten = yaraast.rewrite_lossless(
    source,
    [yaraast.SourceEdit(offset, offset + 4, "false")],
)

# Les analyseurs publics appliquent des limites par défaut bornées. Remplacez-les par opération si nécessaire.
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) lève ParseCancelledError

ResourceLimits() désactive explicitement toutes les limites. L'analyse CLI utilise les valeurs par défaut publiques ; l'analyse LSP utilise des limites d'entrée, de jeton, d'imbrication, de motif et de délai plus strictes et ne met jamais en cache un résultat partiel après une annulation ou un échec de limite.

Analyseur direct + visiteur

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)

Dépendances optionnelles

# Prise en charge LSP
pip install yaraast[lsp]

# Intégration libyara
pip install yaraast[libyara]

# Outils de performance
pip install yaraast[performance]

# Prise en charge de la visualisation
pip install yaraast[visualization]

# Pack de prise en charge d'exécution
pip install yaraast[all]

# Outils d'exécution et de développement
pip install yaraast[dev-all]

Documentation d'exécution


Prérequis

  • Python 3.11, 3.12, 3.13 ou 3.14
  • Consultez pyproject.toml pour la liste complète des dépendances et extras

Contribution

Les contributions sont les bienvenues. Consultez CONTRIBUTING.md pour la configuration, les contrôles de qualité et les directives de flux de travail.

  1. Forkez le dépôt
  2. Créez une branche (git checkout -b feature/your-change)
  3. Validez les modifications (git commit -m "Add your change")
  4. Poussez (git push origin feature/your-change)
  5. Ouvrez une Pull Request

La politique du projet est documentée dans SECURITY.md, CODE_OF_CONDUCT.md, CHANGELOG.md et MIGRATING.md.


Licence

Ce projet est sous licence MIT - voir LICENSE.

Auteur


Conçu pour les flux de travail d'analyse de logiciels malveillants et d'ingénierie de détection

Catégories