[DozerCTF 2024]pppyyy
本文最后更新于172 天前,其中的信息可能已经过时,如有错误可以直接在文章下留言

题目描述

这是赛后结束截的图,所以显示的是0分,但是真实分值是500分,确实挺简单的。

附件是一个.pyc文件,二话不说直接用pycdc反编译看看,如图

反编译的没有任何问题,代码如下。

continue
continue
continue
flag = input('input your flag:\n')
if len(flag) != 14:
    pass
exit()
nums = []
for i in range(14):
    nums.append(ord(flag[i]))
if (((((nums[0] * 2 + nums[1] - 4 - nums[2] * 3 - nums[3] - 3) + nums[4] * 5 + nums[5] * 5 - nums[6] - 3) + nums[7] + 2 - nums[8]) + 3 + nums[9] - 3 - nums[10] * 4) + nums[11] * 3 - nums[12] - 2) + nums[13] + 3 == 56 and ((((nums[0] + 2 - nums[1] * 5) + nums[2] - 3 - nums[3]) + 5 - nums[4] * 4 - nums[5]) + 5 + nums[6] * 4 + nums[7] * 5 + nums[8] * 3 + nums[9] * 5 - nums[10] - 5 - nums[11] - 2 - nums[12] - 5) + nums[13] - 3 == 681 and (((nums[0] * 5 + nums[1] * 3 - nums[2] - 2) + nums[3] * 4 + nums[4] - 3) + nums[5] * 4 + nums[6] * 4 + nums[7] + 3 - nums[8] * 2 - nums[9]) + 3 + nums[10] + 3 - nums[11] * 2 - nums[12] * 3 - nums[13] * 2 == 1129 and (((((nums[0] * 5 - nums[1] - 2) + nums[2] - 2) + nums[3] + 5 - nums[4]) + 3 + nums[5] * 2 + nums[6] + 2 - nums[7] * 4 - nums[8] - 2) + nums[9] + 5 + nums[10] + 4 - nums[11]) + 3 + nums[12] + 3 - nums[13] * 5 == 55 and ((((nums[0] + 2 - nums[1] * 4 - nums[2] * 3) + nums[3] + 3 + nums[4] * 4 + nums[5] * 3 - nums[6]) + 5 + nums[7] - 2 - nums[8]) + 5 + nums[9] * 4 - nums[10] - 2 - nums[11] - 4) + nums[12] * 5 - nums[13] - 4 == 673 and (((((nums[0] - 5 - nums[1] - 4 - nums[2] - 4 - nums[3]) + 2 + nums[4] * 4 - nums[5]) + 4 + nums[6] + 3 + nums[7] + 5 - nums[8] * 5 - nums[9]) + 2 + nums[10] + 2 + nums[11] - 2) + nums[12] * 3 - nums[13]) + 4 == 249 and ((((((nums[0] * 4 + nums[1] - 4) + nums[2] - 5) + nums[3] - 2 - nums[4] * 2) + nums[5] + 3 + nums[6] - 3 - nums[7]) + 3 - nums[8] * 4 - nums[9] * 3) + nums[10] * 2 + nums[11] * 5 + nums[12] - 4) + nums[13] - 4 == 422 and ((((((nums[0] * 3 - nums[1] - 3 - nums[2] - 3) + nums[3] - 2 - nums[4] - 5) + nums[5] * 2 + nums[6] - 4) + nums[7] - 5) + nums[8] * 5 - nums[9] * 3 - nums[10]) + 5 - nums[11] - 4 - nums[12] * 5) + nums[13] - 4 == 49 and (((((((nums[0] - 4 - nums[1]) + 3 - nums[2]) + 4 - nums[3] - 4) + nums[4] + 5 - nums[5] * 3) + nums[6] + 2 + nums[7] * 4 - nums[8] - 4 - nums[9]) + 3 - nums[10] * 5) + nums[11] * 2 + nums[12] * 3 - nums[13]) + 2 == 0 and (((((((nums[0] - 5 - nums[1]) + 5 - nums[2] - 4) + nums[3] + 3 + nums[4] - 2) + nums[5] - 4) + nums[6] * 2 - nums[7] - 4 - nums[8] * 4) + nums[9] + 4 + nums[10] * 4 - nums[11]) + 5 - nums[12]) + 4 + nums[13] + 4 == 268 and ((((((nums[0] - 5 - nums[1]) + 3 - nums[2]) + 2 + nums[3] - 4 - nums[4]) + 4 + nums[5] - 5 - nums[6]) + 2 + nums[7] - 4 - nums[8] - 5 - nums[9] - 5 - nums[10] - 2 - nums[11]) + 5 + nums[12] - 3) + nums[13] + 4 == -162 and ((((((((nums[0] + 5 - nums[1]) + 4 + nums[2] * 5 - nums[3] - 3) + nums[4] - 5 - nums[5] - 5) + nums[6] + 3 - nums[7] * 5 - nums[8] * 3) + nums[9] - 4) + nums[10] - 2) + nums[11] - 3) + nums[12] - 5) + nums[13] + 2 == -2 and ((((nums[0] + 4 + nums[1] - 5 - nums[2]) + 3 + nums[3] + 3 - nums[4] - 4 - nums[5]) + 3 + nums[6] - 3 - nums[7] - 5 - nums[8]) + 3 + nums[9] - 5 - nums[10] - 2) + nums[11] + 5 + nums[12] * 5 - nums[13] - 5 == 433 and (((((nums[0] + 4 + nums[1] + 4 + nums[2] + 3 - nums[3] - 2) + nums[4] - 4) + nums[5] + 3 - nums[6] - 4 - nums[7] * 2) + nums[8] - 3) + nums[9] + 2 + nums[10] * 3 - nums[11] * 4) + nums[12] + 5 + nums[13] * 3 == 515:
    pass
print('good job')

还是有点奇怪,不知道开头为啥会有三个continue。

一眼就是用z3解决,脚本如下

from z3 import*
x1=Int('x1')
x2=Int('x2')
x3=Int('x3')
x4=Int('x4')
x5=Int('x5')
x6=Int('x6')
x7=Int('x7')
x8=Int('x8')
x9=Int('x9')
x10=Int('x10')
x11=Int('x11')
x12=Int('x12')
x13=Int('x13')
x14=Int('x14')
s=Solver()
s.add((((((x1 * 2 + x2 - 4 - x3 * 3 - x4 - 3) + x5 * 5 + x6 * 5 - x7 - 3) + x8 + 2 - x9) + 3 + x10 - 3 - x11 * 4) + x12 * 3 - x13 - 2) + x14 + 3 == 56 )
s.add(((((x1 + 2 - x2 * 5) + x3 - 3 - x4) + 5 - x5 * 4 - x6) + 5 + x7 * 4 + x8 * 5 + x9 * 3 + x10 * 5 - x11 - 5 - x12 - 2 - x13 - 5) + x14 - 3 == 681 )
s.add((((x1 * 5 + x2 * 3 - x3 - 2) + x4 * 4 + x5 - 3) + x6 * 4 + x7 * 4 + x8 + 3 - x9 * 2 - x10) + 3 + x11 + 3 - x12 * 2 - x13 * 3 - x14 * 2 == 1129)
s.add((((((x1 * 5 - x2 - 2) + x3 - 2) + x4 + 5 - x5) + 3 + x6 * 2 + x7 + 2 - x8 * 4 - x9 - 2) + x10 + 5 + x11 + 4 - x12) + 3 + x13 + 3 - x14 * 5 == 55 )
s.add(((((x1 + 2 - x2 * 4 - x3 * 3) + x4 + 3 + x5 * 4 + x6 * 3 - x7) + 5 + x8 - 2 - x9) + 5 + x10 * 4 - x11 - 2 - x12 - 4) + x13 * 5 - x14 - 4 == 673)
s.add((((((x1 - 5 - x2 - 4 - x3 - 4 - x4) + 2 + x5 * 4 - x6) + 4 + x7 + 3 + x8 + 5 - x9 * 5 - x10) + 2 + x11 + 2 + x12 - 2) + x13 * 3 - x14) + 4 == 249 )
s.add(((((((x1 * 4 + x2 - 4) + x3 - 5) + x4 - 2 - x5 * 2) + x6 + 3 + x7 - 3 - x8) + 3 - x9 * 4 - x10 * 3) + x11 * 2 + x12 * 5 + x13 - 4) + x14 - 4 == 422)
s.add(((((((x1 * 3 - x2 - 3 - x3 - 3) + x4 - 2 - x5 - 5) + x6 * 2 + x7 - 4) + x8 - 5) + x9 * 5 - x10 * 3 - x11) + 5 - x12 - 4 - x13 * 5) + x14 - 4 == 49)
s.add((((((((x1 - 4 - x2) + 3 - x3) + 4 - x4 - 4) + x5 + 5 - x6 * 3) + x7 + 2 + x8 * 4 - x9 - 4 - x10) + 3 - x11 * 5) + x12 * 2 + x13 * 3 - x14) + 2 == 0 )
s.add((((((((x1 - 5 - x2) + 5 - x3 - 4) + x4 + 3 + x5 - 2) + x6 - 4) + x7 * 2 - x8 - 4 - x9 * 4) + x10 + 4 + x11 * 4 - x12) + 5 - x13) + 4 + x14 + 4 == 268)
s.add(((((((x1 - 5 - x2) + 3 - x3) + 2 + x4 - 4 - x5) + 4 + x6 - 5 - x7) + 2 + x8 - 4 - x9 - 5 - x10 - 5 - x11 - 2 - x12) + 5 + x13 - 3) + x14 +
 4 == -162)
s.add(((((((((x1 + 5 - x2) + 4 + x3 * 5 - x4 - 3) + x5 - 5 - x6 - 5) + x7 + 3 - x8 * 5 - x9 * 3) + x10 - 4) + x11 - 2) + x12 - 3) + x13 - 5) + x14 + 2 == -2)
s.add(((((x1 + 4 + x2 - 5 - x3) + 3 + x4 + 3 - x5 - 4 - x6) + 3 + x7 - 3 - x8 - 5 - x9) + 3 + x10 - 5 - x11 - 2) + x12 + 5 + x13 * 5 - x14 - 5 == 433)
s.add((((((x1 + 4 + x2 + 4 + x3 + 3 - x4 - 2) + x5 - 4) + x6 + 3 - x7 - 4 - x8 * 2) + x9 - 3) + x10 + 2 + x11 * 3 - x12 * 4) + x13 + 5 + x14 * 3 == 515)
if s.check()==sat:
    print(s.model())
#输出[x4 = 121,x5 = 95,x13 = 122,x8 = 116,x2 = 64,x1 = 66,x11 = 110,x3 = 98,x9 = 104,x7 = 121,x6 = 53,x10 = 48,x12 = 38,x14 = 51]
a=[66,64,98,121,95,53,121,116,104,48,110,38,122,51]
for i in range(len(a)):
    a[i]=chr(a[i])
print(''.join(a))
#输出B@by_5yth0n&z3

z3一直有输出的数组不按顺序的问题,有空必须加一点代码解决这个问题,不然每次我都要按顺序一次次再输一次,还容易看错,浪费时间。

flag就是Dozerctf{B@by_5yth0n&z3}

送分题,没啥好说的

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇