Z3
Z3学习
先来看官方文档
https://ericpony.github.io/z3py-tutorial/guide-examples.htm
这个博客也不错
https://blog.csdn.net/qq_38154820/article/details/108656598
¶基本使用
基本语句
Op Mnmonics Description
0 true 恒真
1 flase 恒假
2 = 相等
3 distinct 不同
4 ite if-then-else
5 and n元 合取(其中条件必须全部满足)
6 or n元 析取(其中条件满足之一即可)
7 iff implication
8 xor 异或
9 not 否定
10 implies Bi-implications
1、创建容器
s=Solver()
2、创建变量,变量有Int(整型)、BitVector(字节)、数组
3、添加约束条件
s.add(约束条件),需要注意Int不能进行移位运算,python除是//
4、判断是否存在
1 | if s.check() == sat: |
¶变量为整型
¶题目
https://buuoj.cn/challenges#[ACTF新生赛2020]Universe_final_answer
¶关键代码
这里就直接放脚本了
1 | from z3 import* |
¶变量为数组
¶题目
https://buuoj.cn/challenges#[GWCTF 2019]xxor
¶关键代码
1 | from z3 import* |
这样得到的结果不会是数组的形式,如下得到的是数组形式
¶数独问题
数独问题就是9×9的方块填数(只能是1-9),分成3×3的小方块,行列数字不同,每个小方块数字不能重复
先贴一下
1 | from z3 import * |
¶题目
这是改了的数独,比较简单,拿来练练手
https://buuoj.cn/challenges#[GUET-CTF2019]number_game
¶Z3在题目的运用
1 | from z3 import * |