SMT
Satisfiability Modulo Theories
约束求解 · 让机器替你思考程序所有可能的执行路径
- 定义
- SMT(Satisfiability Modulo Theories)是网络安全领域的专业术语。SMT(Satisfiability Modulo Theories)是在 SAT(布尔可满足性)基础上扩展了算术、位向量、数组等理论的自动化约束求解框架。
最后更新:2026-06-16
什么是SMT?
SMT(Satisfiability Modulo Theories)是在 SAT(布尔可满足性)基础上扩展了算术、位向量、数组等理论的自动化约束求解框架。在二进制安全领域,SMT 求解器(如 Z3)被广泛用于符号执行、反混淆、漏洞自动发现和 CTF 解题——将程序行为建模为数学约束,让求解器自动找出满足特定条件的输入。
- 在 SAT 基础上扩展算术/位向量等理论的约束求解
- 二进制逆向和漏洞挖掘的核心引擎
- Z3 是最广泛使用的 SMT 求解器
SMT详解
SMT 的核心思想是将程序逻辑转化为数学公式:将变量、运算、分支条件表达为约束,然后问求解器「是否存在一组输入使这些约束同时成立」。在二进制安全中的典型应用:1) 符号执行(Symbolic Execution)——用符号变量代替具体输入跟踪程序执行,在每个分支处收集约束,用 SMT 求解判断路径可达性;2) 反混淆——将混淆后的表达式简化为等价的简单形式;3) 漏洞自动发现——构造使程序触发缓冲区溢出/整数溢出等条件的输入;4) CTF 逆向题——自动求解复杂的校验逻辑找出正确 flag。常用工具:Z3(微软)、angr(符号执行框架)、Triton(动态二进制分析)。
公式提示
核心问题:∃x. φ(x) = true?其中 φ 是包含位向量/算术等理论的逻辑公式
SMT的应用场景
正式定义
在布尔可满足性(SAT)基础上扩展了算术、位向量、数组等一阶逻辑理论的自动化约束求解框架
应用场景
- 符号执行中判断程序路径可达性
- 自动生成触发漏洞的 PoC 输入
- CTF 逆向题自动求解校验逻辑
- 去除代码混淆/简化表达式
常见误区
- SMT 不是万能的——路径爆炸和非线性约束仍是难题
- SMT 求解器不等于人工智能——它是精确的数学求解而非启发式猜测
- SMT 不只用于安全——形式化验证、编译器优化、硬件设计都在使用
实际案例
📌 Z3 解 CTF 逆向题
面对复杂的输入校验函数,将每步运算转为 Z3 约束,添加最终校验条件,调用 solver.check() 即可得到正确输入(flag),无需手动逆推。
📌 angr 符号执行
使用 angr 加载二进制文件,设置符号变量作为输入,指定目标地址(如 'success' 分支),angr 内部用 SMT 求解器自动探索路径找到可达输入。
SMT的参考来源
关于SMT的常见问题
- SMT 是什么
- Satisfiability Modulo Theories,可满足性模理论。在 SAT 基础上扩展了算术、位向量等理论的约束求解框架,是二进制安全分析的核心引擎。
- SMT 在二进制安全中怎么用
- 将程序行为建模为数学约束,用求解器(如 Z3)自动找出满足特定条件的输入。典型应用:符号执行探索路径、自动生成漏洞 PoC、CTF 逆向解题、反混淆。
- 常用的 SMT 工具有哪些
- Z3(微软,最流行的 SMT 求解器)、angr(Python 符号执行框架)、Triton(动态二进制分析)、CVC5。