Z3 - Satisfiability Modulo Theories (SMT)

从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS红队专家)

其他支持HackTricks的方式:

非常基本地,这个工具将帮助我们找到需要满足一些条件的变量的值,手动计算将会很烦人。因此,您可以告诉Z3变量需要满足的条件,它将找到一些值(如果可能的话)。

一些文本和示例摘自https://ericpony.github.io/z3py-tutorial/guide-examples.htm

基本操作

布尔值/与/或/非

#pip3 install z3-solver
from z3 import *
s = Solver() #The solver will be given the conditions

x = Bool("x") #Declare the symbos x, y and z
y = Bool("y")
z = Bool("z")

# (x or y or !z) and y
s.add(And(Or(x,y,Not(z)),y))
s.check() #If response is "sat" then the model is satifable, if "unsat" something is wrong
print(s.model()) #Print valid values to satisfy the model

整数/简化/实数

打印模型

机器算术

现代 CPU 和主流编程语言使用固定大小比特向量进行算术运算。在 Z3Py 中,可以使用比特向量来进行机器算术。

有符号/无符号数字

Z3提供了特殊的有符号版本的算术操作,在这些操作中,位向量被视为有符号或无符号会产生不同的结果。在Z3Py中,操作符**<, <=, >, >=, /, % 和 >>对应于有符号版本。相应的无符号操作符是ULT, ULE, UGT, UGE, UDiv, URem 和 LShR**。

函数

解释函数,如算术,其中函数 +具有固定的标准解释(它将两个数字相加)。未解释函数和常量具有最大的灵活性;它们允许与函数或常量上的约束一致的任何解释

示例:f两次应用于x会再次得到x,但f应用一次于x与x不同。

例子

数独求解器

参考资料

从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS Red Team Expert)

支持HackTricks的其他方式:

最后更新于