
Uma poderosa biblioteca Python e ferramenta CLI para parsing, análise e manipulação de regras YARA através de representação em Árvore Sintática Abstrata (AST)
Analise, transforme e manipule regras YARA com um kit de ferramentas AST em Python
yaraast é uma biblioteca Python para analisar e manipular regras da família YARA usando Árvores Sintáticas Abstratas (AST). Suporta fluxos de trabalho clássicos YARA, YARA-L e YARA-X com detecção automática de dialeto e ferramentas de linha de comando.
Dialetos YARA, YARA-L, YARA-X
Analisadores Analisador padrão, analisador unificado, analisador de streaming
Saídas YARA, JSON, YAML, visualizações de árvore AST
Ferramentas CLI, visitors, construtores, serialização, verificações semânticas
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)
# Analisar e imprimir YARA normalizado
yaraast parse rules.yar
# Analisar para JSON
yaraast parse rules.yar --format json
# Analisar com dialeto explícito
yaraast parse rules.yar --dialect yara-x
# Validar arquivo (verificações de sintaxe + análise)
yaraast validate rules.yar
# Formatar arquivo in-place (formatador baseado em AST)
yaraast fmt rules.yar
# Verificar formatação sem modificar o arquivo
yaraast fmt rules.yar --check
from yaraast.unified_parser import UnifiedParser
from yaraast.dialects import YaraDialect
# Detectar dialeto automaticamente
ast = UnifiedParser.parse_file("rules.yar")
# Forçar dialeto 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)
# Suporte a LSP
pip install yaraast[lsp]
# Integração com libyara
pip install yaraast[libyara]
# Ferramentas de desempenho
pip install yaraast[performance]
# Suporte a visualização
pip install yaraast[visualization]
# Tudo
pip install yaraast[all]
Contribuições são bem-vindas. Veja CONTRIBUTING.md para configuração, verificações de qualidade e diretrizes de fluxo de trabalho.
git checkout -b feature/sua-mudanca)git commit -m "Adicione sua mudança")git push origin feature/sua-mudanca)Este projeto está licenciado sob a Licença MIT - veja LICENSE.
Autor
Construído para fluxos de trabalho de análise de malware e engenharia de detecção
| Funcionalidade | Descrição |
|---|
| Análise de múltiplos dialetos | Analisar YARA, YARA-L e YARA-X a partir de arquivos ou strings |
| Detecção automática de dialeto | Analisador unificado que detecta automaticamente os dialetos das regras |
| Ferramentas AST | Construir, transformar, comparar e serializar ASTs |
| Formatação e validação | Comandos CLI para fluxos de análise, formatação e validação |
| Suporte a streaming | Analisar arquivos muito grandes com modo de streaming |
| Integrações com ecossistema | Capacidades opcionais de LSP e relacionadas ao libyara |
| Comando | Descrição |
|---|
parse | Analisar um arquivo de regras e gerar YARA/JSON/YAML/árvore |
validate | Validar regras e executar subcomandos de validação |
fmt | Formatador baseado em AST (com --check e --diff) |
format | Formatar entrada para um arquivo de saída alvo |
validate-syntax | Ponto de entrada para validação focada em sintaxe |
lsp | Executar funcionalidades do Protocolo de Servidor de Linguagem |