
Inspecione visualmente todas as correspondências regex (e seus primos mais sexy, mais capa e punhal, os YARA Matches) encontrados em dados binários e/ou texto. Veja o que acontece quando você forçar várias codificações de caráter sobre os bytes correspondentes. Com cores.
pipx install yaralyzer
# Scan against YARA definitions in a file:
yaralyze --yara-rules /secret/vault/sigmunds_malware_rules.yara lacan_buys_the_dip.pdf
# Scan against an arbitrary regular expression:
yaralyze --regex-pattern ' good and evil.*ofs+w+byte ' the_crypto_archipelago.exe
# Scan against an arbitrary YARA hex pattern
yaralyze --hex-pattern ' d0 93 d0 a3 d0 [-] 9b d0 90 d0 93 ' one_day_in_the_life_of_ivan_cryptosovich.bin'/.+/' e imediatamente colocar uma janela em todos os bytes no arquivo que vive entre as barras frontais. A mesma história para citações, BOMs, etc. Qualquer regex que Yara pode lidar é suportado para que o céu seja o limite.chardet é uma biblioteca sofisticada para adivinhar as codificações de personagens e é alavancada aqui.chardet também será aproveitado para ver se os bytes se encaixam no padrão de qualquer codificação conhecida. Se 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 do PDFalyzer quando se tornou evidente que as correspondências visualizando e decodificando em binários tinham mais utilidade do que apenas em uma ferramenta de análise em PDF.
Yara, para aqueles que não sabem 1 , é marcado 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 combinação de expressão regular em esteróides. Ele pode localizar correspondências regex em binários como qualquer mecanismo regex, mas também pode fazer coisas muito mais selvagens, como combinar regexes em grupos lógicos, comparar regexes com todas as 256 versões xored de um binário, verificar se há base64 e outras codificações do padrão e muito mais. Talvez o mais importante de tudo o YARA forneça um formato baseado em texto padrão para as pessoas compartilharem seus 'regexes ruins com o mundo. Todos esses recursos são particularmente úteis ao analisar ou o malware de engenharia reversa, cujos autores tendem a investir muito tempo para tornar as coisas difíceis de encontrar.
Mas ... isso também é tudo o que Yara faz. Todo o resto está pronto para o usuário. Yara é apenas um mecanismo de fósforo e, se você não sabe o que combinar (ou mesmo que codificação de personagens você poderá combinar), ele só o leva até agora. Eu me senti um pouco frustrado tentando usar Yara para analisar todas as partidas de alguns padrões críticos:
".+" E '.+' )/.+/ ). As barras frontais demarcam uma expressão regular em muitas implementações e eu estava tentando ver se algum dos bytes que correspondesse a esse padrão era na verdade regexes.Yara apenas informa a posição de byte e a string correspondente, mas não pode dizer se esses bytes são UTF-8, UTF-16, Latin-1, etc. etc. (ou nenhum dos itens acima). Também me vi querendo entender o que estava acontecendo na região dos bytes correspondentes e não apenas nos bytes correspondentes. Em outras palavras, eu queria cuidar dos bytes imediatamente antes e depois do que fosse correspondido.
Entre no Yaralyzer , que permite digitalizar rapidamente as regiões em torno de correspondências, além de mostrar como seria essas regiões se fossem forçadas a várias codificações de personagens.
É importante observar que o Yaralyzer não é uma ferramenta cheia de reversão de malware. Não pode fazer todas as coisas que uma ferramenta como o Cyberchef faz e não tenta. É mais destinado a fornecer uma rápida visão visual das regiões suspeitas no binário, para que você possa aprimorar as áreas que você pode querer inspecionar com uma ferramenta mais séria como o CyberChef.
Instale -o com pipx ou pip3 . pipx é uma solução marginalmente melhor, pois garante que quaisquer pacotes instalados com ele serão isolados do restante do ambiente Python local. Obviamente, se você realmente não possui um ambiente Python local, isso é um ponto discutível e pode se sentir à vontade para instalar com pip / pip3 .
pipx install yaralyzer
Execute yaralyze -h para ver as opções da linha de comando (captura de tela abaixo).

Para obter informações sobre a exportação de imagens SVG, HTML, etc., consulte Exemplo de saída.
Se você colocar um arquivo chamado .yaralyzer no diretório inicial ou no diretório de trabalho atual, as variáveis de ambiente especificadas nesse arquivo .yaralyzer serão adicionadas ao ambiente sempre que o Yaralyzer for chamado. Isso fornece um mecanismo para configurar permanentemente várias opções de linha de comando para evitar digitá -las repetidamente. Consulte o exemplo de arquivo .yaralyzer.example para ver quais opções podem ser configuradas dessa maneira.
Apenas um arquivo .yaralyzer será carregado e o .yaralyzer do diretório de trabalho tem precedência sobre o .yaralyzer do diretório inicial.
Yaralyzer é a classe principal. Tem uma variedade de construtores que apoiam:
.yara em um diretóriobytes Se você deseja iterar sobre o BytesMatch (como um objeto re.Match para uma partida Yara) e os objetos BytesDecoder (rastrear estatísticas de tentativa de decodificar) devolvidos pelo Yaralyzer, você pode fazê -lo 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 () O Yaralyzer pode exportar visualizações para imagens HTML, ANSI Colored Text e SVG Vector usando a funcionalidade de exportação de arquivos que vem com Rich. Os SVGs podem ser transformados em imagens de formato png com uma ferramenta como Inkscape ou cairosvg . Em nossa experiência, ambos trabalham, embora tenhamos visto alguma renúncia com cairosvg .
Usuários do Pypi: se você estiver lendo este documento no Pypi, saiba que ele se torna muito melhor no Github. Fotos bonitas, notas de rodapé que funcionam, etc.


chardet.detect() pensa sobre a probabilidade de seus bytes em uma determinada codificação/idioma: 
rich mecanismo de renderização de alguma forma. Por enquanto, a saída do console é a "mais correta", por isso geralmente é bom. Consulte issue_with_output_to_console_correct vs. issue_with_output_to_txt_file_incorrect.pngchardetComo eu estava até recentemente. ↩