Maat 是一个开源的动态符号执行与二进制分析框架。它提供了多种功能,如符号执行、污点分析、约束求解、二进制加载、环境模拟,并利用 Ghidra 的 sleigh 库进行汇编提升:https://maat.re
主要特性:
安装 Maat 的 Python 模块:
python3 -m pip install pymaat
安装 Maat 的原生 SDK 并使用 C++ API,请查看 BUILDING.md
from maat import *
# 为 Linux X86-32bits 创建一个符号引擎
engine = MaatEngine(ARCH.X86, OS.LINUX)
# 加载一个包含一个命令行参数的二进制文件
engine.load("./some_binary", BIN.ELF32, args=[engine.vars.new_symbolic_buffer("some_arg", 20)])
# 获取当前 eax 的值
engine.cpu.eax
# 读取栈顶的 4 个字节
engine.mem.read(engine.cpu.esp, 4)
# 设置一个回调,显示每次内存读取
def show_mem_access(engine):
mem_access = engine.info.mem_access
print(f"指令 {engine.info.addr} 读取了 {mem_access.size} 字节,地址为 {mem_access.addr}")
engine.hooks.add(EVENT.MEM_R, WHEN.BEFORE, callbacks=[show_mem_access])
# 创建并恢复快照
snap = engine.take_snapshot()
engine.restore_snapshot(snap)
# 运行二进制文件
engine.run()
对于一般性讨论、问题及建议,请使用 Github Discussions
报告问题及 Bug,请使用 Github Issues
其他事宜,请发送邮件至 [email protected]