
Inspecione visualmente e force a decodificação de correspondências YARA e regex encontradas em dados binários e de texto com cores. Muitas cores.

Inspecione visualmente todas as correspondências de regex (e seus primos mais sexy e misteriosos, as correspondências YARA) encontradas em dados binários e/ou texto. Veja o que acontece quando você força várias codificações de caracteres nesses bytes correspondidos. Com cores.
pipx install yaralyzer
# Escanear contra definições YARA em um arquivo:
yaralyze --yara-rules /secret/vault/sigmunds_malware_rules.yara lacan_buys_the_dip.pdf
# Escanear contra uma expressão regular arbitrária:
yaralyze --regex-pattern 'good and evil.*of\s+\w+byte' --regex-modifier wide the_crypto_archipelago.exe
# Escanear contra um padrão hexadecimal YARA arbitrário:
yaralyze --hex-pattern 'd0 93 d0 a3 d0 [-] 9b d0 90 d0 93' one_day_in_the_life_of_ivan_cryptosovich.bin
'/.+/' e imediatamente obter uma janela para todos os bytes no arquivo que estão entre barras. Mesma história para aspas, BOMs, etc. Qualquer regex que o YARA possa lidar é suportada, então o céu é o limite.chardet é uma biblioteca sofisticada para adivinhar codificações de caracteres e é usada aqui.chardet também será usado para ver se os bytes se encaixam no padrão de qualquer codificação conhecida. Se o chardet estiver confiante o suficiente (configurável), uma tentativa de decodificar os bytes usando essa codificação será exibida.A funcionalidade do Yaralyzer foi extraída de O Pdfalyzer quando se tornou aparente que visualizar e decodificar correspondências de padrões em binários tinha mais utilidade do que apenas em uma ferramenta de análise de PDF.
YARA, para aqueles que não sabem1, é comercializado como uma ferramenta de análise/alerta de malware, mas na verdade é muito mais e muito menos do que isso. Uma maneira de pensar sobre isso é que YARA é um motor de correspondência de expressões regulares turbinado. Ele pode localizar correspondências de regex em binários como qualquer motor de regex, mas também pode fazer coisas muito mais selvagens, como combinar regexes em grupos lógicos, comparar regexes contra todas as 256 versões XORed de um binário, verificar codificações base64 e outras do padrão, e mais. Talvez o mais importante de tudo, YARA fornece um formato padrão baseado em texto para pessoas compartilharem suas regexes turbinadas com o mundo. Todos esses recursos são particularmente úteis ao analisar ou fazer engenharia reversa de malware, cujos autores tendem a investir muito tempo para tornar as coisas difíceis de encontrar.
Mas... isso é tudo que YARA faz. Todo o resto depende do usuário. YARA é apenas um motor de correspondência e se você não sabe o que corresponder (ou mesmo qual codificação de caracteres você pode ser capaz de corresponder), ele só te leva até certo ponto. Eu me vi um pouco frustrado tentando usar YARA para olhar todas as correspondências de alguns padrões críticos:
\".+\" e \'.+\')/.+/). Barras delimitam uma expressão regular em muitas implementações e eu estava tentando ver se algum dos bytes correspondendo a esse padrão eram realmente regexes.YARA apenas informa a posição do byte e a string correspondida, mas não pode lhe dizer se esses bytes são UTF-8, UTF-16, Latin-1, etc. (ou nada disso). Também me vi querendo entender o que estava acontecendo na região dos bytes correspondidos e não apenas nos bytes correspondidos. Em outras palavras, eu queria escopar os bytes imediatamente antes e depois do que foi correspondido.
Apresentando O Yaralyzer, que permite escanear rapidamente as regiões ao redor das correspondências enquanto também mostra como essas regiões se pareceriam se fossem forçadas em várias codificações de caracteres.
O Yaralyzer não é uma ferramenta de reversão de malware. Ele não pode fazer as coisas que uma ferramenta como CyberChef faz e não tenta fazer. É mais destinado a dar uma visão geral visual rápida das regiões suspeitas no binário para que você possa focar nas áreas que você pode querer inspecionar com uma ferramenta mais séria.
Instale com pipx ou pip3. pipx é uma solução marginalmente melhor, pois garante que quaisquer pacotes instalados com ele sejam isolados do resto do seu ambiente Python local. Claro, se você realmente não tem um ambiente Python local, isso é um ponto discutível e você pode instalar à vontade com pip/pip3.
pipx install yaralyzer
Execute yaralyze -h para ver as opções de linha de comando (captura de tela abaixo).

Para informações sobre exportar imagens SVG, HTML, etc., veja Exemplo de Saída.
Se você colocar um arquivo chamado .yaralyzer no seu diretório inicial ou no diretório de trabalho atual, as variáveis de ambiente especificadas nesse arquivo .yaralyzer serão adicionadas ao ambiente cada vez que o yaralyzer for invocado. Isso fornece um mecanismo para configurar permanentemente várias opções de linha de comando, para que você evite digitá-las repetidamente. Veja os comentários no arquivo de exemplo .yaralyzer.example para mais informações.
Apenas um arquivo .yaralyzer será carregado e o .yaralyzer do diretório de trabalho tem precedência sobre o do diretório inicial.
Yaralyzer é a classe principal. Documentação gerada automaticamente para as várias classes e métodos do Yaralyzer pode ser encontrada aqui. Ele tem uma variedade de construtores alternativos suportando:
.yara em um diretóriobytesSe você quiser iterar sobre os objetos BytesMatch (como um objeto re.Match para uma correspondência YARA) e BytesDecoder (rastreia estatísticas de tentativa de decodificação) usados pelo Yaralyzer, você pode fazer assim:
from yaralyzer.yaralyzer import Yaralyzer
yaralyzer = Yaralyzer.for_rules_files(['/secret/rule.yara'], 'lacan_buys_the_dip.pdf')
for bytes_match, bytes_decoder in yaralyzer.match_iterator():
do_stuff()
Se você receber um yara.Error com um código de erro numérico, você pode verificar o que esse código pode significar aqui.
O Yaralyzer pode exportar visualizações para HTML, texto colorido ANSI e imagens vetoriais PNG e SVG usando a funcionalidade de exportação de arquivo que vem com Rich, bem como um formato JSON de texto simples (um tanto limitado).
Se você quiser exportar imagens .png como as abaixo diretamente do Yaralyzer, você precisará fazer uma destas coisas:
brew install --cask inkscape)img ao instalar o Yaralyzer, que instalará cairosvg: pipx install yaralyzer[img]. Você também terá que instalar o executável CairoSVG manualmente de maneiras diferentes dependendo do seu sistema operacional; veja a documentação do CairoSVG para os detalhes.Em nossa experiência, tanto Inkscape quanto CairoSVG funcionam, embora tenhamos visto alguns problemas de renderização na saída gerada pelo CairoSVG em SVGs renderizados pelo Yaralyzer, então Inkscape é a opção recomendada.


chardet.detect() pensa sobre a probabilidade de seus bytes estarem em uma determinada codificação/idioma:
Contribuições são mais que bem-vindas; veja CONTRIBUTING.md para detalhes sobre configuração do ambiente, execução do conjunto de testes, etc. Há também uma lista de TODO lá com o trabalho que precisa ser feito.
Como eu era até recentemente. ↩