0x00 前言
在做逆向题目时,很多线性方程需要用z3库进行求解,写篇博客具体了解一下
0x01 z3库的安装
1 2 3
| pip install z3 or pip install z3-solver
|
0x02 z3库的使用
- 创建一个解的声明对象:
- 添加条件:
- 判断是否有解:
- 返回最后的解:
1 2 3
| result = s.modul()
print(result)
|
- 声明不同类型的未知数:
1 2 3 4
| a, s, d = Ints('a s d') x = Real('x') y = Real('y')
|
- 求解按位运算(⭐):
1 2 3 4 5
| BitVecs(name,bv,ctx=None),创建一个有多变量的位向量,name是名字,bv表示大小
Bitvex(name,bv,ctx=None),创建一个位向量,name是他的名字,bv表示大小 BitVecSort(bv,ctx=None),创建一个指定大小的位向量 BitVecVal(val,bv,ctx=None),创建一个位向量,有初始值,没名字
|
- 特殊代码:
1 2
| numbers = [BitVec(chr(i), 8) for i in range(0, 4)] 声明一个数组
|