
直观地检查二进制数据和/或文本中所有正则表达式(以及它更性感、更具谍战风格的远亲 YARA 匹配)的匹配结果。看看当你对这些匹配字节强制应用各种字符编码时会怎样。带颜色显示。
pipx install yaralyzer
# 使用文件中定义的 YARA 规则进行扫描:
yaralyze --yara-rules /secret/vault/sigmunds_malware_rules.yara lacan_buys_the_dip.pdf
# 使用任意正则表达式进行扫描:
yaralyze --regex-pattern 'good and evil.*of\s+\w+byte' --regex-modifier wide the_crypto_archipelago.exe
# 使用任意 YARA 十六进制模式进行扫描:
yaralyze --hex-pattern 'd0 93 d0 a3 d0 [-] 9b d0 90 d0 93' one_day_in_the_life_of_ivan_cryptosovich.bin
'/.+/',立即查看文件中所有位于正斜杠之间的字节。引号、BOM等也是如此。任何YARA能处理的正则表达式都支持,因此无所不能。chardet 是一个用于猜测字符编码的复杂库,在此被充分利用。chardet 检测这些字节是否符合_任何_已知编码的模式。如果 chardet 的置信度足够高(可配置),将显示使用该编码解码字节的尝试。Yaralyzer 的功能源自 The Pdfalyzer,当认识到在二进制文件中可视化和解码模式匹配不仅仅在PDF分析工具有用时,便将其提取出来。
对于不了解的人来说1,YARA 被标榜为恶意软件分析/警报工具,但实际上它既是更多也是更少。一种思考方式是,YARA 是一个增强版的正则表达式匹配引擎。它可以像任何正则表达式引擎一样在二进制文件中定位正则表达式匹配,但也能做更疯狂的事情,比如将正则表达式逻辑分组、对所有256个XOR版本的文件进行正则表达式比较、检查模式的 base64 和其他编码等。也许最重要的是,YARA 提供了一种基于文本的标准格式,供人们与世界_分享_他们的“强化”正则表达式。所有这些功能在分析或逆向工程恶意软件时特别有用,因为恶意软件作者通常会在隐藏内容上花费大量精力。
但……这也正是 YARA 所能做的全部。其他一切都取决于用户。YARA 只是一个匹配引擎,如果你不知道要匹配什么(甚至不知道可以在哪种字符编码下匹配),它只能帮你到这里。我发现尝试使用 YARA 查看几个关键模式的所有匹配时有些沮丧:
\".+\" 和 \'.+\')/.+/)。在许多实现中,正斜杠界定了正则表达式,我试图查看是否有任何匹配此模式的字节_实际上是_正则表达式。YARA 只告诉你字节位置和匹配的字符串,但它无法告诉你这些字节是 UTF-8、UTF-16、Latin-1 等等(或都不是)。我还想了解匹配字节_区域_内的情况,而不仅仅是匹配字节_内_的情况。换句话说,我想确定匹配字节前后紧邻的字节范围。
Yaralyzer 应运而生,它让你能够快速扫描匹配区域周围,同时展示如果对这些区域强制应用各种字符编码会是什么样子。
Yaralyzer 不是一个恶意软件逆向工具。它无法做到像 CyberChef 这样的工具所能做的事情,也不试图去实现。它的目的更多是为你提供二进制文件中可疑区域的快速视觉概览,以便你可以专注于那些可能需要用更严肃工具检查的区域。
使用 pipx 或 pip3 安装。pipx 是稍好的解决方案,因为它保证用其安装的任何包都将与你本地 Python 环境的其余部分隔离。当然,如果你没有本地 Python 环境,这点就无关紧要了,你可以放心使用 pip/pip3 安装。
pipx install yaralyzer
运行 yaralyze -h 查看命令行选项(下方截图)。

关于导出SVG图像、HTML等信息,请参见 示例输出。
如果你在主目录或当前工作目录中放置一个名为 .yaralyzer 的文件,那么该文件中指定的环境变量将在每次调用 yaralyzer 时被添加到环境中。这提供了一种永久配置各种命令行选项的机制,避免重复输入。更多信息请参见示例文件 .yaralyzer.example 中的注释。
每次只会加载一个 .yaralyzer 文件,且工作目录的 .yaralyzer 优先于主目录的 .yaralyzer。
Yaralyzer 是主类。Yaralyzer 各种类和方法的自动生成文档可在 此处 找到。它支持多种 替代构造函数:
.yara 文件的 YARA 规则bytes如果你想迭代 Yaralyzer 使用的 BytesMatch(类似 re.Match 对象,用于 YARA 匹配)和 BytesDecoder(跟踪解码尝试统计信息)对象,可以这样做:
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()
如果你遇到带有数字错误代码的 yara.Error,可以 在此 查看该代码可能的含义。
Yaralyzer 可以将可视化结果导出为 HTML、ANSI 彩色文本,以及 PNG 和 SVG 矢量图像,使用 Rich 附带的文件导出功能,同时还支持(功能有限的)纯文本 JSON 格式。
如果你想直接从 Yaralyzer 导出类似下面的 .png 图像,你需要执行以下之一:
brew install --cask inkscape 安装)img 额外组件,这将安装 cairosvg:pipx install yaralyzer[img]。你还需要根据操作系统手动安装 CairoSVG 可执行文件,具体请参见 CairoSVG 文档。根据我们的经验,Inkscape 和 CairoSVG 都可以工作,但我们在使用 CairoSVG 渲染 Yaralyzer 生成的 SVG 时遇到了一些问题,因此推荐使用 Inkscape。


chardet.detect() 对这些字节属于某种编码/语言的可能性的判断:
欢迎贡献;有关环境设置、运行测试套件等详细信息,请参见 CONTRIBUTING.md。那里还有一个待办事项列表,列出了需要完成的工作。