
Inspeccione visualmente todos los partidos de regex (y sus primos más sexys, más de capa y daga, las coincidencias de Yara) que se encuentran en datos y/o texto binarios. Vea lo que sucede cuando obliga a varias codificaciones de personajes sobre esos bytes emparejados. Con colores.
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 inmediatamente obtener una ventana a todos los bytes en el archivo que vive entre las cortes delanteras. La misma historia para citas, boms, etc. Cualquier Regex Yara puede manejar es compatible para que el cielo sea el límite.chardet es una biblioteca sofisticada para adivinar codificaciones de personajes y se aprovecha aquí.chardet también se aprovechará para ver si los bytes se ajustan al patrón de cualquier codificación conocida. Si chardet es lo suficientemente seguro (configurable), se mostrará un intento de decodificar los bytes utilizando esa codificación.La funcionalidad del Yaralyzer se extrajo del PDFalyzer cuando se hizo evidente que la visualización y la decodificación de las coincidencias de patrones en binarios tenían más utilidad que solo en una herramienta de análisis PDF.
Yara, para aquellos que desconocen 1 , está marcado como una herramienta de análisis/alerta de malware, pero en realidad es mucho más y mucho menos que eso. Una forma de pensarlo es que Yara es un motor de expresión regular que coincide con esteroides. Puede localizar coincidencias de regex en binarios como cualquier motor regex, pero también puede hacer cosas mucho más salvajes como combinar reglas en grupos lógicos, comparar reglas con las 256 versiones xoradas de un binario, verificar si hay base64 y otras codificaciones del patrón, y más. Quizás lo más importante de todo Yara proporciona un formato estándar basado en texto para que las personas compartan sus 'reglas con el mundo. Todas estas características son particularmente útiles al analizar o revertir malware de ingeniería, cuyos autores tienden a invertir mucho tiempo en hacer que las cosas sean difíciles de encontrar.
Pero ... eso también es todo lo que Yara hace. Todo lo demás depende del usuario. Yara es solo un motor de coincidencia y si no sabes qué coincidir (o incluso en qué carácter codificando podrías igualar) solo te lleva hasta ahora. Me encontré un poco frustrado tratando de usar Yara para ver todos los partidos de algunos patrones críticos:
".+" Y '.+' )/.+/ ). Los recortes delanteros demarcan una expresión regular en muchas implementaciones y estaba tratando de ver si alguno de los bytes que coinciden con este patrón eran realmente reglas.Yara solo le dice la posición de byte y la cadena coincidente, pero no puede decirle si esos bytes son UTF-8, UTF-16, Latin-1, etc., etc. (o ninguno de los anteriores). También me encontré con ganas de entender lo que estaba pasando en la región de los bytes emparejados y no solo en los bytes emparejados. En otras palabras, quería alcanzar los bytes inmediatamente antes y después de que lo que fuera emparejado.
Ingrese el Yaralyzer , que le permite escanear rápidamente las regiones alrededor de los partidos y al mismo tiempo mostrarle cómo se verían esas regiones si fueran forzados a varias codificaciones de personajes.
Es importante tener en cuenta que el Yaralyzer no es una herramienta completa de inversión de malware. No puede hacer todas las cosas que hace una herramienta como Cyberchef y no intenta. Es más destinado a darle una visión general visual rápida de las regiones sospechosas en el binario para que pueda perfeccionar las áreas que puede inspeccionar con una herramienta más seria como Cyberchef.
Instálelo con pipx o pip3 . pipx es una solución marginalmente mejor, ya que garantiza que cualquier paquete instalado con él se aislará del resto de su entorno local de Python. Por supuesto, si realmente no tiene un entorno de Python local, este es un punto discutible y puede sentirse libre de instalar con pip / pip3 .
pipx install yaralyzer
Ejecute yaralyze -h para ver las opciones de línea de comando (captura de pantalla a continuación).

Para obtener información sobre la exportación de imágenes SVG, HTML, etc., consulte la salida de ejemplo.
Si coloca un archivo llamado .yaralyzer en su directorio de inicio o en el directorio de trabajo actual, entonces las variables de entorno especificadas en ese archivo .yaralyzer se agregarán al entorno cada vez que se invoca Yaralyzer. Esto proporciona un mecanismo para configurar permanentemente varias opciones de línea de comandos para que pueda evitar escribirlas una y otra vez. Consulte el archivo de ejemplo .yaralyzer.example para ver qué opciones se pueden configurar de esta manera.
Solo se cargará un archivo .yaralyzer y el .yaralyzer del directorio de trabajo tiene prioridad sobre el .yaralyzer del directorio de origen.
Yaralyzer es la clase principal. Tiene una variedad de constructores que apoyan:
.yara en un directoriobytes de escaneo Si desea iterar sobre el BytesMatch (como un objeto re.Match para una coincidencia de Yara) y los objetos BytesDecoder (pistas de intento de decodificación) devueltos por el Yaralyzer, puede 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 () El Yaralyzer puede exportar visualizaciones a HTML, texto de color ANSI e imágenes vectoriales SVG utilizando la funcionalidad de exportación de archivos que viene con Rich. Los SVG se pueden convertir en imágenes de formato png con una herramienta como Inkscape o cairosvg . En nuestra experiencia, ambos funcionan, aunque hemos visto un error con cairosvg .
Usuarios de PYPI: si está leyendo este documento en PYPI, tenga en cuenta que deja mucho mejor en Github. Fotos bonitas, notas al pie que funcionan, etc.


chardet.detect() piensa sobre la probabilidad de que sus bytes estén en una codificación/idioma determinado: 
rich de alguna manera. Por ahora, la salida de la consola es la "más correcta", por lo que generalmente está bien. issue_with_output_to_txt_file_incorrect.png issue_with_output_to_console_correct vs.Smit_with_output_to_txt_file_incorrect.pngchardet s BestestComo yo era hasta hace poco. ↩