一、简介
Z3是由Microsoft Research开发的高性能定理证明器。(可以理解为自动解方程组的感觉)。Z3 在工业应用中实际上常见于软件验证、程序分析等。
由于Z3功能实在强大,也被用于很多其他领域:软件/硬件验证和测试,约束解决,混合系统分析,安全性,生物学(计算机模拟分析)和几何问题。
CTF 领域来说,能够用约束求解器搞定的问题常见于密码题、二进制逆向、符号执行、Fuzzing 模糊测试等。此外,著名的二进制分析框架 angr 也内置了一个修改版的 Z3。
二、快速入门
(一)语言选择
Z3是个开源项目,Github链接:https://github.com/z3prover
API文档:http://z3prover.github.io/api/html/index.html
目前支持的语言:
语言 | API链接 |
C语言 | http://z3prover.github.io/api/html/group__capi.html |
C++ | http://z3prover.github.io/api/html/namespacez3.html |
.NET | http://z3prover.github.io/api/html/namespace_microsoft_1_1_z3.html |
Java | http://z3prover.github.io/api/html/namespacecom_1_1microsoft_1_1z3.html |
Python | http://z3prover.github.io/api/html/namespacez3py.html |
在线运行 | |
OCaml (ML) | http://z3prover.github.io/api/html/ml/index.html |
通常使用方式:z3是一个底层的工具,它最好是作为一个组件应用到其它需要求解逻辑公式的工具中,例如KLEE。为了方便使用,z3提供了很多的API,这些api支持的语言有C, .NET, and OCaml。当然,z3也可以通过命令行的方式来执行。
(二)安装
Windows、Linux下的Z3安装:https://www.jianshu.com/p/f77331e406ac
Python环境安装可以直接使用:pip install z3-solver
(三)Python API案例
英文:https://ericpony.github.io/z3py-tutorial/guide-examples.htm
中文:https://arabelatso.github.io/2018/06/14/Z3%20API%20in%20Python/
此处附上博主代码,注释含个人理解,供参考:
gihub链接:https://github.com/TysonSir/z3-solver/tree/master/z3py_demo
三、基本原理
SMT求解器z3通过检查一组数据样本上给定约束的可满足性来计算系数。
SMT算法的基础知识:https://xbuba.com/questions/55082485