52lxw 发表于 2019-3-7 00:35

使用python z3约束解ctf题目 练手

题目文件:

ida反编译查看


分析可知就是将命令行的第二个参数的前7个字符的ascii码相加等于801
那么怎么构造这7个字符呢,我们使用z3约束器
from z3 import *



s = Solver()
pwd =

for i in pwd:
        s.add(0x30<i)
        s.add(i<120)#设置7个字符的取值范围在48<120之间
s.add(pwd+pwd+pwd+pwd+pwd+pwd+pwd==801) #且相加为801

if s.check() == sat:
        print s.model()
       


其实有很多解,这里只打印了一组
转成字符就是wwwwwwW

skye231 发表于 2020-8-31 13:42

学习完z3库,教一下作业
```python
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from z3 import *
# 创建约束解析器
solver = Solver()
# 定义变量
m1 = Int('m1')
m2 = Int('m2')
m3 = Int('m3')
m4 = Int('m4')
m5 = Int('m5')
m6 = Int('m6')
m7 = Int('m7')
# 添加约束条件
# 参数前7个ascii等于0x321
solver.add(m1+m2+m3+m4+m5+m6+m7==0x321)
# 约束每个解的范围都是在可见字符串
solver.add(32<=m1)
solver.add(m1<127)
solver.add(32<=m2)
solver.add(m2<127)
solver.add(32<=m3)
solver.add(m3<127)
solver.add(32<=m4)
solver.add(m4<127)
solver.add(32<=m5)
solver.add(m5<127)
solver.add(32<=m6)
solver.add(m6<127)
solver.add(32<=m7)
solver.add(m7<127)
if solver.check() == sat:
        flag = solver.model()
        print(flag)
else:
        print("no answer")
```

fuckbin 发表于 2019-5-20 00:12

s.add(0x30<i)
    s.add(i<120)#设置7个字符的取值范围在48<120之间
为什么取值是这个范围

ddd8ddd9 发表于 2019-3-7 09:20

厉害厉害学习了

peterliu 发表于 2019-3-7 09:39

谢谢分享。学习的好资料

hui00000 发表于 2019-3-7 13:56

谢谢分享。学习一下

zysanjing1 发表于 2019-3-7 22:40

为什么我运行python程序提示Solver未知,Int未知

hongpangzi 发表于 2019-3-7 22:57

我学到了网络爬虫抓取,要考网络工程师了,暂时放下,待我来日慢慢虐它~

沉默挺好的 发表于 2019-3-8 00:10

厉害 学习了

pw2553 发表于 2019-3-8 12:55

学习的好资料

离离源上草 发表于 2019-3-8 14:24

zysanjing1 发表于 2019-3-7 22:40
为什么我运行python程序提示Solver未知,Int未知

检查下python版本

瑟瑟发抖小菜虾 发表于 2019-3-8 15:56

好厉害我记得有一道题 也是 关于这个的   我没有写出来 ~~~~~ 谢谢楼主
页: [1] 2 3
查看完整版本: 使用python z3约束解ctf题目 练手