
Inspeccione visualmente y fuerce la decodificación de coincidencias de YARA y expresiones regulares encontradas en datos binarios y de texto con colores. Muchos colores.

Inspecciona visualmente todas las coincidencias regex (y sus primos más sexis y misteriosos, las coincidencias YARA) encontradas en datos binarios y/o texto. Observa lo que sucede cuando fuerzas varias codificaciones de caracteres sobre esos bytes coincidentes. Con colores.
pipx install yaralyzer
# Escanea contra definiciones YARA en un archivo:
yaralyze --yara-rules /secret/vault/sigmunds_malware_rules.yara lacan_buys_the_dip.pdf
# Escanea contra una expresión regular arbitraria:
yaralyze --regex-pattern 'good and evil.*of\s+\w+byte' --regex-modifier wide the_crypto_archipelago.exe
# Escanea contra un patrón hexadecimal YARA arbitrario:
yaralyze --hex-pattern 'd0 93 d0 a3 d0 [-] 9b d0 90 d0 93' one_day_in_the_life_of_ivan_cryptosovich.bin
'/.+/' y obtener inmediatamente una ventana a todos los bytes en el archivo que están entre barras inclinadas. Lo mismo para comillas, BOMs, etc. Cualquier expresión regular que YARA pueda manejar está soportada, así que el límite es el cielo.chardet es una biblioteca sofisticada para adivinar codificaciones de caracteres y se utiliza aquí.chardet también se aprovechará para ver si los bytes se ajustan al patrón de alguna codificación conocida. Si la confianza de chardet es suficientemente alta (configurable), se mostrará un intento de decodificar los bytes usando esa codificación.La funcionalidad de Yaralyzer fue extraída de The Pdfalyzer cuando se hizo evidente que visualizar y decodificar coincidencias de patrones en binarios tenía más utilidad que solo en una herramienta de análisis de PDF.
YARA, para aquellos que no lo saben1, se promociona como una herramienta de análisis/alertas de malware, pero en realidad es tanto mucho más como mucho menos que eso. Una forma de pensar en ello es que YARA es un motor de coincidencia de expresiones regulares esteroideo. Puede localizar coincidencias regex en binarios como cualquier motor regex, pero también puede hacer cosas mucho más locas, como combinar regex en grupos lógicos, comparar regex contra las 256 versiones XOR de un binario, verificar codificaciones base64 y otras del patrón, y más. Quizás lo más importante de todo es que YARA proporciona un formato estándar basado en texto para que las personas compartan sus regex 'roidizadas con el mundo. Todas estas características son particularmente útiles al analizar o realizar ingeniería inversa de malware, cuyos autores tienden a invertir mucho tiempo en hacer que las cosas sean difíciles de encontrar.
Pero... eso es también todo lo que hace YARA. Todo lo demás queda a cargo del usuario. YARA es solo un motor de coincidencias y si no sabes qué coincidir (o incluso qué codificación de caracteres podrías usar para coincidir), solo te lleva hasta cierto punto. Me encontré un poco frustrado al intentar usar YARA para examinar todas las coincidencias de algunos patrones críticos:
\".+\" y \'.+\')/.+/). Las barras inclinadas delimitan una expresión regular en muchas implementaciones y estaba tratando de ver si alguno de los bytes que coincidían con este patrón eran realmente expresiones regulares.YARA solo te dice la posición del byte y la cadena coincidente, pero no puede decirte si esos bytes son UTF-8, UTF-16, Latin-1, etc. (o ninguno de los anteriores). También me encontré queriendo entender lo que estaba sucediendo en la región de los bytes coincidentes y no solo en los bytes coincidentes. En otras palabras, quería delimitar los bytes inmediatamente antes y después de cualquier coincidencia.
Entra El Yaralyzer, que te permite escanear rápidamente las regiones alrededor de las coincidencias mientras también te muestra cómo se verían esas regiones si se forzaran a varias codificaciones de caracteres.
El Yaralyzer no es una herramienta de reversión de malware. No puede hacer lo que herramientas como CyberChef hacen y no lo intenta. Está más destinado a darte una visión general visual rápida de regiones sospechosas en el binario para que puedas enfocarte en las áreas que podrías querer inspeccionar con una herramienta más seria.
Instálalo con pipx o pip3. pipx es una solución ligeramente mejor ya que garantiza que cualquier paquete instalado con él esté aislado del resto de tu entorno Python local. Por supuesto, si realmente no tienes un entorno Python local, esto es discutible y puedes instalarlo con pip/pip3.
pipx install yaralyzer
Ejecuta yaralyze -h para ver las opciones de línea de comandos (captura de pantalla a continuación).

Para obtener información sobre exportar imágenes SVG, HTML, etc., consulta Salida de ejemplo.
Si colocas un archivo llamado .yaralyzer en tu directorio de inicio o en el directorio de trabajo actual, las variables de entorno especificadas en ese archivo .yaralyzer se agregarán al entorno cada vez que se invoque yaralyzer. Esto proporciona un mecanismo para configurar permanentemente varias opciones de línea de comandos para que no tengas que escribirlas una y otra vez. Consulta los comentarios en el archivo de ejemplo .yaralyzer.example para más información.
Solo se cargará un archivo .yaralyzer y el .yaralyzer del directorio de trabajo tiene prioridad sobre el del directorio de inicio.
Yaralyzer es la clase principal. La documentación generada automáticamente para las diversas clases y métodos de Yaralyzer se puede encontrar aquí. Tiene una variedad de constructores alternativos que soportan:
.yara en un directoriobytesSi deseas iterar sobre los objetos BytesMatch (como un objeto re.Match para una coincidencia YARA) y BytesDecoder (registra estadísticas de intentos de decodificación) utilizados por Yaralyzer, puedes hacerlo así:
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()
Si obtienes un yara.Error con un código de error numérico, puedes verificar qué podría significar ese código aquí.
Yaralyzer puede exportar visualizaciones a HTML, texto ANSI coloreado e imágenes vectoriales PNG y SVG utilizando la funcionalidad de exportación de archivos que viene con Rich, así como un formato JSON de texto plano (algo limitado).
Si deseas exportar imágenes .png como las que aparecen a continuación directamente desde Yaralyzer, deberás hacer una de estas cosas:
brew install --cask inkscape)img al instalar Yaralyzer, lo que instalará cairosvg: pipx install yaralyzer[img]. También tendrás que instalar manualmente el ejecutable de CairoSVG de diferentes maneras según tu sistema operativo; consulta la documentación de CairoSVG para obtener más detalles.En nuestra experiencia, tanto Inkscape como CairoSVG funcionan, aunque hemos visto algunos problemas en la salida renderizada usando CairoSVG en SVG renderizados por Yaralyzer, por lo que Inkscape es la opción recomendada.


chardet.detect() piensa sobre la probabilidad de que tus bytes estén en una codificación/idioma dado:
Las contribuciones son más que bienvenidas; consulta CONTRIBUTING.md para obtener detalles sobre la configuración del entorno, ejecución de la suite de pruebas, etc. También hay una lista de tareas pendientes (TODO) allí sobre el trabajo que se necesita realizar.
Como lo era yo hasta hace poco. ↩