[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。