Maat is an open-source Dynamic Symbolic Execution and Binary Analysis framework. It provides various functionalities such as symbolic execution, taint analysis, constraint solving, binary loading, environment simulation, and leverages Ghidra’s sleigh library for assembly lifting: https://maat.re
To install Maat’s python module:
python3 -m pip install pymaat
To install Maat’s native SDK and use the C++ API, check out BUILDING.md
from maat import *
Create a symbolic engine for Linux X86-32bits
engine = MaatEngine(ARCH.X86, OS.LINUX)
Load a binary with one command line argument
engine.load(“./some_binary”, BIN.ELF32, args=[engine.vars.new_symbolic_buffer(“some_arg”, 20)])
Get current eax value
engine.cpu.eax
Read 4 bytes at the top of the stack
engine.mem.read(engine.cpu.esp, 4)
Set a callback displaying every memory read
def show_mem_access(engine):
mem_access = engine.info.mem_access
print(f”Instruction at {engine.info.addr} reads {mem_access.size} bytes at {mem_access.addr}”)
engine.hooks.add(EVENT.MEM_R, WHEN.BEFORE, callbacks=[show_mem_access])
Take and restore snapshots
snap = engine.take_snapshot()
engine.restore_snapshot(snap)
Run the binary
engine.run()
The xargs command in Linux reads items from standard input and passes them as arguments to another…
The locate command in Linux searches for files and directories by name. It queries a pre-built database…
Most modern Linux distributions use systemd as the default service manager. Knowing how to list…
Truncating a file in Linux means removing its contents while leaving the file itself in…
The ss command in Linux lists open sockets and active network connections. It replaced the deprecated netstat command and…
The ftp command in Linux connects to a remote FTP server and transfers files. FTP transmits everything…