Z3库使用

文章讲述了在HNCTF2022WEEK2中,作者利用Z3工具解决了一个包含多个线性方程的数学问题,并提到后续涉及Python解包、代码修复和MD5加密的解密挑战。
摘要由CSDN通过智能技术生成

[HNCTF 2022 WEEK2]来解个方程? 

from z3 import *
v2=[Int('v2%s' %i) for i in range(22)]
s=Solver()

s.add(245 * v2[4] + 395 * v2[3] + 3541 * v2[2] + 2051 * v2[1] + 3201 * v2[0] + 1345 * v2[5] == 855009)
s.add(3270 * v2[4] + 3759 * v2[3] + 3900 * v2[2] + 3963 * v2[1] + 1546 * v2[0] + 3082 * v2[5] == 1515490)
s.add(526 * v2[4] + 2283 * v2[3] + 3349 * v2[2] + 2458 * v2[1] + 2012 * v2[0] + 268 * v2[5] == 854822)
s.add(3208 * v2[4] + 2021 * v2[3] + 3146 * v2[2] + 1571 * v2[1] + 2569 * v2[0] + 1395 * v2[5] == 1094422)
s.add(3136 * v2[4] + 3553 * v2[3] + 2997 * v2[2] + 1824 * v2[1] + 1575 * v2[0] + 1599 * v2[5] == 1136398)
s.add(2300 * v2[4] + 1349 * v2[3] + 86 * v2[2] + 3672 * v2[1] + 2908 * v2[0] + 1681 * v2[5] == 939991)
s.add( 212 * v2[20]
       + 153 * v2[19]
       + 342 * v2[18]
     + 490 * v2[10]
      + 325 * v2[9]
       + 485 * v2[8]
       + 56 * v2[7]
       + 202 * v2[6]
       + 191 * v2[21] == 245940)
    



s.add(348 * v2[20]
       + 185 * v2[19]
       + 134 * v2[18]
       + 153 * v2[10]
       + 460 * v2[7]
       + 207 * v2[6]
       + 22 * v2[8]
       + 24 * v2[9]
       + 22 * v2[21] == 146392)
s.add(177 * v2[20]
       + 231 * v2[19]
       + 489 * v2[18]
       + 339 * v2[10]
       + 433 * v2[9]
       + 311 * v2[8]
       + 164 * v2[7]
       + 154 * v2[6]
       + 100 * v2[21] == 239438)

s.add(68 * v2[18]
       + 466 * v2[10]
       + 470 * v2[9]
       + 22 * v2[8]
       + 270 * v2[7]
       + 360 * v2[6]
       + 337 * v2[19]
       + 257 * v2[20]
       + 82 * v2[21] == 233887)

s.add(246 * v2[20]
       + 235 * v2[19]
       + 468 * v2[18]
       + 91 * v2[10]
       + 151 * v2[9]
       + 197 * v2[6]
       + 92 * v2[7]
       + 73 * v2[8]
       + 54 * v2[21] == 152663)
s.add(241 * v2[20]
       + 377 * v2[19]
       + 131 * v2[18]
       + 243 * v2[10]
       + 233 * v2[9]
       + 55 * v2[8]
       + 376 * v2[7]
       + 242 * v2[6]
       + 343 * v2[21] == 228375)
s.add(356 * v2[20]
       + 200 * v2[19]
       + 136 * v2[9]
       + 301 * v2[8]
       + 284 * v2[7]
       + 364 * v2[6]
       + 458 * v2[10]
       + 5 * v2[18]
       + 61 * v2[21] == 211183)
s.add(154 * v2[20]
       + 55 * v2[19]
       + 406 * v2[18]
       + 107 * v2[10]
       + 80 * v2[8]
       + 66 * v2[6]
       + 71 * v2[7]
       + 17 * v2[9]
       + 71 * v2[21] == 96788)
s.add( 335 * v2[20]
       + 201 * v2[19]
       + 197 * v2[9]
       + 280 * v2[8]
       + 409 * v2[7]
       + 56 * v2[6]
       + 494 * v2[10]
       + 63 * v2[18]
       + 99 * v2[21] == 204625)
s.add(428 * v2[16] + 1266 * v2[15] + 1326 * v2[14] + 1967 * v2[13] + 3001 * v2[12] + 81 * v2[11] + 2439 * v2[17] == 1109296)
s.add(2585 * v2[16] + 4027 * v2[15] + 141 * v2[14] + 2539 * v2[13] + 3073 * v2[12] + 164 * v2[11] + 1556 * v2[17] == 1368547)
s.add(2080 * v2[16] + 358 * v2[15] + 1317 * v2[14] + 1341 * v2[13] + 3681 * v2[12] + 2197 * v2[11] + 1205 * v2[17] == 1320274)



s.add(840 * v2[16] + 1494 * v2[15] + 2353 * v2[14] + 235 * v2[13] + 3843 * v2[12] + 1496 * v2[11] + 1302 * v2[17] == 1206735)
s.add(101 * v2[16] + 2025 * v2[15] + 2842 * v2[14] + 1559 * v2[13] + 2143 * v2[12] + 3008 * v2[11] + 981 * v2[17] == 1306983)
s.add(1290 * v2[16] + 3822 * v2[15] + 1733 * v2[14] + 292 * v2[13] + 816 * v2[12] + 1017 * v2[11] + 3199 * v2[17] == 1160573)
s.add(186 * v2[16]
                  + 2712 * v2[15]
                  + 2136 * v2[14]
                  + 98 * v2[11]
                  + 138 * v2[12]
                  + 3584 * v2[13]
                  + 1173 * v2[17]==1005746)

print(s.check())


m=s.model()
res=''
for i in range(0,22):
    res+=(chr(m[v2[i]].as_long()))
   
print(res)

 简单z3题

[羊城杯 2020]login

python写的exe文件,先解包,010修复文件头

得到python代码

import sys
input1 = input("input something:")
if len(input1) != 14:
    print("Wrong length!")
    sys.exit()
else:
    code = []
    for i in range(13):
        code.append(ord(input1[i]) ^ ord(input1[i + 1]))

    code.append(ord(input1[13]))
    a1 = code[2]
    a2 = code[1]
    a3 = code[0]
    a4 = code[3]
    a5 = code[4]
    a6 = code[5]
    a7 = code[6]
    a8 = code[7]
    a9 = code[9]
    a10 = code[8]
    a11 = code[10]
    a12 = code[11]
    a13 = code[12]
    a14 = code[13]
    if (a1 * 88 + a2 * 67 + a3 * 65 - a4 * 5 + a5 * 43 + a6 * 89 + a7 * 25 + a8 * 13 - a9 * 36 + a10 * 15 + a11 * 11 + a12 * 47 - a13 * 60 + a14 * 29 == 22748) & (a1 * 89 + a2 * 7 + a3 * 12 - a4 * 25 + a5 * 41 + a6 * 23 + a7 * 20 - a8 * 66 + a9 * 31 + a10 * 8 + a11 * 2 - a12 * 41 - a13 * 39 + a14 * 17 == 7258) & (a1 * 28 + a2 * 35 + a3 * 16 - a4 * 65 + a5 * 53 + a6 * 39 + a7 * 27 + a8 * 15 - a9 * 33 + a10 * 13 + a11 * 101 + a12 * 90 - a13 * 34 + a14 * 23 == 26190) & (a1 * 23 + a2 * 34 + a3 * 35 - a4 * 59 + a5 * 49 + a6 * 81 + a7 * 25 + (a8 << 7) - a9 * 32 + a10 * 75 + a11 * 81 + a12 * 47 - a13 * 60 + a14 * 29 == 37136) & (a1 * 38 + a2 * 97 + a3 * 35 - a4 * 52 + a5 * 42 + a6 * 79 + a7 * 90 + a8 * 23 - a9 * 36 + a10 * 57 + a11 * 81 + a12 * 42 - a13 * 62 - a14 * 11 == 27915) & (a1 * 22 + a2 * 27 + a3 * 35 - a4 * 45 + a5 * 47 + a6 * 49 + a7 * 29 + a8 * 18 - a9 * 26 + a10 * 35 + a11 * 41 + a12 * 40 - a13 * 61 + a14 * 28 == 17298) & (a1 * 12 + a2 * 45 + a3 * 35 - a4 * 9 - a5 * 42 + a6 * 86 + a7 * 23 + a8 * 85 - a9 * 47 + a10 * 34 + a11 * 76 + a12 * 43 - a13 * 44 + a14 * 65 == 19875) & (a1 * 79 + a2 * 62 + a3 * 35 - a4 * 85 + a5 * 33 + a6 * 79 + a7 * 86 + a8 * 14 - a9 * 30 + a10 * 25 + a11 * 11 + a12 * 57 - a13 * 50 - a14 * 9 == 22784) & (a1 * 8 + a2 * 6 + a3 * 64 - a4 * 85 + a5 * 73 + a6 * 29 + a7 * 2 + a8 * 23 - a9 * 36 + a10 * 5 + a11 * 2 + a12 * 47 - a13 * 64 + a14 * 27 == 9710) & (a1 * 67 - a2 * 68 + a3 * 68 - a4 * 51 - a5 * 43 + a6 * 81 + a7 * 22 - a8 * 12 - a9 * 38 + a10 * 75 + a11 * 41 + a12 * 27 - a13 * 52 + a14 * 31 == 13376) & (a1 * 85 + a2 * 63 + a3 * 5 - a4 * 51 + a5 * 44 + a6 * 36 + a7 * 28 + a8 * 15 - a9 * 6 + a10 * 45 + a11 * 31 + a12 * 7 - a13 * 67 + a14 * 78 == 24065) & (a1 * 47 + a2 * 64 + a3 * 66 - a4 * 5 + a5 * 43 + a6 * 112 + a7 * 25 + a8 * 13 - a9 * 35 + a10 * 95 + a11 * 21 + a12 * 43 - a13 * 61 + a14 * 20 == 27687) & (a1 * 89 + a2 * 67 + a3 * 85 - a4 * 25 + a5 * 49 + a6 * 89 + a7 * 23 + a8 * 56 - a9 * 92 + a10 * 14 + a11 * 89 + a12 * 47 - a13 * 61 - a14 * 29 == 29250) & (a1 * 95 + a2 * 34 + a3 * 62 - a4 * 9 - a5 * 43 + a6 * 83 + a7 * 25 + a8 * 12 - a9 * 36 + a10 * 16 + a11 * 51 + a12 * 47 - a13 * 60 - a14 * 24 == 15317):
        print("flag is GWHT{md5(your_input)}")
        print("Congratulations and have fun!")
    else:
        print("Sorry,plz try again...")

还是要用z3,其中(a8 << 7)是不允许被使用的 ,改成a8*(2**7)

然后异或进行md5加密,得到flag。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值