
Una potente biblioteca de Python y herramienta CLI para analizar, examinar y manipular reglas YARA mediante la representación de Árbol de Sintaxis Abstracta (AST).
Analiza, transforma y parsea reglas YARA con un kit de herramientas AST en Python
yaraast es una librería de Python para parsear y manipular reglas de la familia YARA utilizando Árboles de Sintaxis Abstracta (AST). Soporta flujos de trabajo clásicos de YARA, YARA-L y YARA-X con detección automática de dialecto y herramientas CLI.
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)
# Parsear e imprimir YARA normalizado
yaraast parse rules.yar
# Parsear a JSON
yaraast parse rules.yar --format json
# Parsear con dialecto explícito
yaraast parse rules.yar --dialect yara-x
# Validar archivo (sintaxis + comprobaciones de parseo)
yaraast validate rules.yar
# Formatear archivo en el lugar (formateador basado en AST)
yaraast fmt rules.yar
# Verificar formato sin modificar el archivo
yaraast fmt rules.yar --check
from yaraast.unified_parser import UnifiedParser
from yaraast.dialects import YaraDialect
# Detección automática de dialecto
ast = UnifiedParser.parse_file("rules.yar")
# Forzar un dialecto específico
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)
# Soporte LSP
pip install yaraast[lsp]
# Integración con libyara
pip install yaraast[libyara]
# Herramientas de rendimiento
pip install yaraast[performance]
# Soporte de visualización
pip install yaraast[visualization]
# Todo
pip install yaraast[all]
Las contribuciones son bienvenidas. Consulta CONTRIBUTING.md para la configuración, controles de calidad y pautas de flujo de trabajo.
git checkout -b feature/tu-cambio)git commit -m "Añade tu cambio")git push origin feature/tu-cambio)Este proyecto está bajo la Licencia MIT - consulta el archivo LICENSE.
Autor
Diseñado para flujos de trabajo de análisis de malware e ingeniería de detección
| Característica | Descripción |
|---|
| Parseo multi-dialecto | Parsea YARA, YARA-L y YARA-X desde archivos o cadenas |
| Detección automática de dialecto | Parser unificado que detecta automáticamente el dialecto de las reglas |
| Herramientas AST | Construye, transforma, compara y serializa ASTs |
| Formateo y validación | Comandos CLI para flujos de parseo/formateo/validación |
| Soporte de streaming | Parsea archivos muy grandes con modo streaming |
| Integraciones con el ecosistema | Capacidades opcionales para LSP y libyara |
| Comando | Descripción |
|---|
parse | Parsea un archivo de reglas y genera salida YARA/JSON/YAML/árbol |
validate | Valida reglas y ejecuta subcomandos de validación |
fmt | Formateador basado en AST (con --check y --diff) |
format | Formatea la entrada en un archivo de salida destino |
validate-syntax | Punto de entrada centrado en validación de sintaxis |
lsp | Inicia funcionalidades del Protocolo de Servidor de Lenguaje |