声明:本人首发于合天智汇
本文主要是写一下自己在使用Z3约束器来解方程时遇到的坑 大佬请绕道。
前言:失败了好多次 才流泪写下这篇教程(好几次都想放弃) 避免大家和我一样浪费时间 百度谷歌了好久 也没找到方法 话说大佬们是不是有什么技巧
ps:大家给点个赞好不好 感谢
一,z3简单介绍
z3是由微软公司开发的一个优秀的SMT求解器(其实就是一个定理证明器),它能够检查逻辑表达式的可满足性。我们做CTF逆向题可能会经常用它来解方程。变量类型有整数Int,实数Real(需要得到float型的值时 可以用这个),至于数组,就用BitVec好啦
先来说一下简单的使用吧
比如我想求一下a*b=0x24这个方程的解
很明显,这里的解不止一个
这里就是z3的一个特点 就是当解有多个的时候只会帮我们求出一个可能的解
如果我们想要拿到需要的解 那就增加约束条件 比如我想要得到当a==2时的解 就像下图所示:
二,windows下安装z3步骤
0x01:确定你的Python版本为2.X(我的是2.7)
0x02:pip install z3或者pip install z3-solver是不行的(亲测)
0x03:必须采用源码安装
下载链接:https://pypi.org/project/z3-solver/4.5.1.0/#files
我用的是这个版本