Z3是一个微软研究院开源的theorem prover(定理证明器),支持位向量、布尔、数组、浮点数、字符串以及其他数据类型。Z3是一个SMT solver以及支持SMTLIB的格式。
这里简单介绍几个概念:
SAT(Boolean Satisfiability Problem/布尔可满足性问题)
SMT(Satisfiability Modulo Theories/可满足性模理论)
SAT + Theory Solvers = SMT
github项目:https://github.com/Z3Prover/z3
angr框架的内置Z3: https://github.com/angr/angr-z3
-------
0x01 安装z3-solver
pip install z3-solver
以下是错误安装方式:
# 别安装成这个 # Backup ZFS snapshots to S3 pip install z3
0x02 使用z3-solver来解方程
例如最简单的三元一次方程组:
from z3 import * x,y,z=Ints('x y z') s=Solver() s.add(2*x+3*y+z==6) s.add(x-y+2*z==-1) s.add(x+2*y-z==5) print s.check() print s.model()
模运算:
from z3 import * x=Int('x') s=Solver() a = 65537 b = 64834 c = 41958 s.add(x>0) s.add(x % a == b) s.add(x % b == c) print s.check() print s.model()
0x03 其他用法
等pcat以后再补充