Maat:符号执行变得简单
我们发布了 Maat,一个跨架构、多用途且用户友好的符号执行框架。它提供常见的符号执行能力,包括动态符号执行(DSE)、污点分析、二进制插桩、环境模拟和约束求解。
Maat 易于使用,基于流行的 Ghidra 中间表示(IR)语言 p-code,优先考虑运行时性能,并提供 C++ 和 Python API。我们的目标是创建一个强大而灵活的框架,既可供经验丰富的安全工程师使用,也适合想要入门符号执行的初学者。
虽然我们的 Manticore 工具提供了高级接口以符号化探索二进制文件,但 Maat 是一个更低层的符号执行工具包,可以轻松集成到其他项目中,或用于构建独立分析工具。如需直接示例,请阅读我们关于如何使用 Maat 解决基本逆向工程挑战的教程。
用户友好、灵活的 API
Maat 提供 C++ 编程 API,可用于底层或性能关键型项目。它还提供 Python 绑定,使用户能够轻松快速地编写可移植的分析脚本。
该 API 旨在赋予用户尽可能多的控制权。其类似调试器的接口可用于启动、暂停甚至回滚符号执行过程。用户可以通过任意回调函数对目标代码进行插桩,这些回调由特定事件(如寄存器和内存访问以及分支操作)触发,编写自定义动态分析,在运行时修改程序状态,指定进程应停止的特定状态,甚至对二进制文件的一部分执行路径探索。
最后但同样重要的是,Maat 的执行引擎具有可自定义的设置,允许用户控制其处理符号数据的基本行为。它包括处理符号指针、保存状态约束和进行符号简化等策略,以及其他自定义选项。默认设置优先考虑健全性而非性能,并适合最通用的用例,但高级用户可以根据自己的用例定制引擎,并绕过默认设置的某些限制。
丰富的架构支持
通过 Maat,我们希望将符号执行能力带给尽可能多的架构。为此,我们将 Maat 的符号执行引擎基于 p-code,即 Ghidra 使用的 IR 语言。通过将 Maat 基于 p-code,我们能够利用 Ghidra 出色的 C++ 库 sleigh 进行反汇编和提升二进制代码,该库已经支持非常广泛的架构。锦上添花的是:Maat 使用独立的 sleigh 版本,因此您无需安装 Ghidra 即可使用 Maat。
使用 sleigh 为 Maat 带来三大优势:
- 能够在 Ghidra 支持的任何架构上执行符号执行
- 依赖一个非常流行、开源且积极支持的反汇编和提升库的可靠性
- 可以使用 sleigh 规范语言添加其他架构的可能性
虽然 Maat 目前仅在 X86 和 X64 上进行了测试,但我们计划很快为其他架构添加接口。我们对在 Maat 中引入对现有工具尚未支持的异架构支持的前景感到特别兴奋;sleigh 无与伦比的架构支持使这成为可能。另一个令人兴奋的机会是使用 Maat 对虚拟机字节码(如 Java、Dalvik 和 Ethereum)执行符号执行。
性能驱动
将符号执行扩展到实际应用程序可能是一项挑战。对于通用的、仅二进制的符号执行工具,显著的运行时开销是提升和执行 IR 所固有的;这根本无法避免。话虽如此,在任何合理的日常工作中,在几分钟而不是几小时内运行的脚本可以产生天壤之别。因此,我们在 Maat 的设计和实现中精心考虑,使其在产生有用结果的同时尽可能快地运行。
Maat 的核心完全用 C++ 编写,这是许多开发者优化和性能的首选语言。我们尽最大努力编写高效代码,同时不牺牲代码可读性或限制功能。Maat 的运行时性能可能因符号计算量、对 SMT 求解器的调用以及用户提供的分析回调而有很大差异;但我们的早期实验测量结果相当有希望,在典型笔记本电脑(2.3 GHz Intel Core i7,32 GB RAM)上每秒可符号执行 100,000 到 300,000 条指令。
我们还计划添加并暴露内省能力,以允许用户识别运行时瓶颈。这不仅有助于最终用户针对其特定用例优化分析脚本,还能使我们能够对 Maat 的核心组件进行更根本的改进。
如何开始
只需使用 python3 -m pip install pymaat
安装 Maat!查看我们的系列教程以获取使用指南。虽然本系列提供了一些基本教程,但我们的长期目标是提供一个更全面的系列,涵盖框架基础、高级应用和复杂功能。
好奇的读者可以在 GitHub 上查看 Maat 的源代码!除了教程之外,您还可以在 Maat 的网站上找到安装说明和 C++/Python API 文档。
最后,加入我们的 GitHub 讨论以提出问题和反馈——让我们知道您的想法!
如果您喜欢这篇文章,请分享: Twitter LinkedIn GitHub Mastodon Hacker News
页面内容
用户友好、灵活的 API
丰富的架构支持
性能驱动
如何开始
近期文章
非传统创新者奖学金
在您的 PajaMAS 中劫持多代理系统
我们构建了 MCP 一直需要的安全层
利用废弃硬件中的零日漏洞
Inside EthCC[8]:成为智能合约审计员
© 2025 Trail of Bits.
使用 Hugo 和 Mainroad 主题生成。