LELexEdge词汇锋面
网络安全专业术语

SMT

Satisfiability Modulo Theories

约束求解 · 让机器替你思考程序所有可能的执行路径

二进制安全逆向工程程序分析
SMT
定义
SMTSatisfiability 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 是什么
Satisfiability Modulo Theories,可满足性模理论。在 SAT 基础上扩展了算术、位向量等理论的约束求解框架,是二进制安全分析的核心引擎。
SMT 在二进制安全中怎么用
将程序行为建模为数学约束,用求解器(如 Z3)自动找出满足特定条件的输入。典型应用:符号执行探索路径、自动生成漏洞 PoC、CTF 逆向解题、反混淆。
常用的 SMT 工具有哪些
Z3(微软,最流行的 SMT 求解器)、angr(Python 符号执行框架)、Triton(动态二进制分析)、CVC5。

与SMT相关的术语