首页 > 其他分享 >Z3约束器使用流程

Z3约束器使用流程

时间:2024-03-21 11:23:04浏览次数:32  
标签:求解 32 流程 range 约束 flag BitVec Z3

Z3约束器使用流程

目录

z3基本数据类型

Int #整型
Bool #布尔型
Array #数组
BitVec('a',8) #char型

其中BitVec可以是特定大小的数据类型,不一定是8,例如C语言中的int型可以用BitVec(a',32)表示

例如:x = Int('x') #这个int不是c/c++中的那个四字节,而仅仅只代表整数
y = Real(y') #实数变量(数学中的那个实数)
z = BitVec('z',8) #char型
m = BitVec('m',32) #int型
n = Bool('n') #定义布尔型

初始化未知数序列
flag =[BitVec('x%d'%i,8) for i in range(32)]      #char型序列
flag= [Int('%d'%i) for i in range(32)]                #int型整数序列
flag =[BitVec('x%d'%i,32) for i in range(32)]         #int型序列

z3求解四步骤

1.创建约束求解器

s = Solver()
Solver()命令会创建一个通用求解器,创建后我们可以添加我们的约束条件,进行下一步的求解
添加约束

2.s.add

add0命令用来添加约束条件,通常在solver()命令之后,添加的约束条件通常是一个逻辑等式

3.判断解是否存在

if s.check( )==sat:
该函数通常用来判断在添加完约束条件后,来检测解的情况,有解的时候会回显sat,无解的时候会
unsat

4.求解

print(s.model( ))
在存在解的时候,该函数会将每个限制条件所对应的解集的交集,进而得出正解

CTF中的Z3模板

from z3 import *
s=Solver()
flag = [BitVec(('x%d' % i), 8) for i in range(len(flag))]
for i in range(0, len(flag))
s.add(flag[i] <= 127)
s.add(flag[i] >= 32)
#中间添加程序的加密正向算法
if s.check() == sat:
model = s.model()
string = [chr(model[flag[i]].as_long()) for i in range(len(flag))]
print("".join(string))
exit()

标签:求解,32,流程,range,约束,flag,BitVec,Z3
From: https://www.cnblogs.com/ch3n/p/18086934

相关文章

  • 机器学习流程—AutoML
    文章目录机器学习流程—AutoMLAutoML工具Auto-SKLearnMLBoxTPOTRapidMinerPyCaretAuto-KerasH2OAutoML谷歌AutoML云UberLudwigTransmogrifAIAutoGluonAutoWekaDataRobot......
  • 机器学习流程—特征工程
    机器学习流程—特征工程基本上,所有机器学习算法都是将一些输入数据转化为输出。这些输入数据包括若干特征,通常是以由列组成的表格形式出现。而算法往往要求输入具有某些特性的特征才能正常工作。因此,出现了对特征工程的需求。特征工程至少有两个目标,构建适合机器学习算......
  • 深入理解 SpringAOP(二):AOP的执行流程
    概述在之前的文章中,我们已经对SpringAOP的关键组件进行了描述,并且了解了其基本操作和流程。在本文中,我们将进一步深入源码,揭示SpringAOP的内部实现细节,理解其运行机制的每个环节,包括切面的织入方式、代理对象的创建过程、连接点的定位与匹配等。通过对完整运行流程的深入研究......
  • spring refresh的流程(AbstractApplicationContext的refresh方法)
    12个阶段1、prepareRefresh,做准备工作2、obtainFreshBeanFactory,创建或获取beanfactory3、prepareBeanFactory,准备beanfactory4、postProcessBeanFactory,子类扩展beanfactory5、invokeBeanFactoryPostProcessors,后处理器扩展beanfactory6、registerBeanPostProcessors,准备b......
  • 02 JAVA流程控制
    02JAVA流程控制1.用户交互Scannernextline()用的多,next()用的少。nextline()以回车为结束符。也就是说:nextline方法返回的是回车之前的所有字符。可以获得空白。packagecom.mysoft.scanner;importjava.util.Scanner;publicclassDemo02{publicstaticvoidmain......
  • 基于神兔分仓系统的穿透测试流程
    基本信息账户中心地址http://192.168.8.60:30162/center登陆账户信息test654321华泰柜台账户10001437datong888(每次测试配置不同的APPID和AUTHCODE)交易测试下单地址http://192.168.8.60:30722/#/login登陆账号信息10001437datong888服务器IP192.168.1......
  • 100_Windows服务器部署流程
    服务器煤矿IP用户名密码系统内存硬盘集团administratorNhjc1234WinServer201616G1T煤矿端口规划集团端描述端口用户名密码前端80mysql21836root1q2w3e4r!Q@W#E$Rredis22836root1q2w3e4r!Q@W#E$Rminio23836......
  • MapReduce执行流程
    MapReduce执行流程MapTask执行流程Read:读取阶段MapTask会调用InputFormat中的getSplits方法来对文件进行切片切片之后,针对每一个Split,产生一个RecordReader流用于读取数据数据是以Key-Value形式来产生,交给map方法来处理。每一个键值对触发调用一次map方法Map:映射阶......
  • android App启动流程三-Activity启动流程
    上一篇我们介绍了从App的进程创建到Application启动执行,今天我们继续深入学习一下,Activity的启动流程。realStartActivityLocked我们接着上一篇,从ActivityTaskManagerService.attachApplication函数看起,最终发现会执行到ActivityTaskSupervisor.realStartActivityLocked方法......
  • 直播预约丨《袋鼠云大数据实操指南》No.1:从理论到实践,离线开发全流程解析
    近年来,新质生产力、数据要素及数据资产入表等新兴概念犹如一股强劲的浪潮,持续冲击并革新着企业数字化转型的观念视野,昭示着一个以数据为核心驱动力的新时代正稳步启幕。面对这些引领经济转型的新兴概念,为了更好地服务于客户并提供切实可行的实践指导,自3月20日起,袋鼠云将推出全新......