[2024广州大学网安学会第一次内部赛]ez_py
本文最后更新于208 天前,其中的信息可能已经过时,如有错误可以直接在文章下留言

看名字应该是一个python题目,先用DIE查看一下信息

发现是用PyInstaller打包的,那就直接用pyinstxtractor解包一下,解包成功了,

我们到解包成功的文件夹里面找到.pyc文件,然后用pycdc对其反编译,做题的时候才发现狗日的Win11防火墙又偷偷把我的pycdc.exe给删了,真是恶心吐了,找回来反编译,如图

这里显示了反编译未完成,没想到pycdc都未完成,只能上在线网站找个可以的来反编译,发现这个网站可以。

pyc反编译 – 工具匠 (toolkk.com)

得到了python代码

print("please input len=15's number.")
input_str = input()
a = [list(map(int, input_str[i:i + 5])) for i in range(0, len(input_str), 5)]
#每五个一组,转换成整数列表,a是一个三行五列的列表
row_sums = [sum(row) for row in a]
#计算每一行列表的元素之和
col_sums = [sum(col) for col in zip(*a)]
#计算每一列元素的和
row_products = [1] * len(a)
#row_products=[1, 1, 1]
for i in range(len(a)):#len(a)=3
    for j in range(len(a[i])):#len(a[i])=5
        row_products[i] *= a[i][j]
        #行元素相乘
else:
    col_products = [
     1] * len(a[0])
    #col_products=[1,1,1,1,1]
    for j in range(len(a[0])):
        for i in range(len(a)):
            col_products[j] *= a[i][j]
        #列元素相乘
    else:
        if (row_sums == [19, 17, 20]) & (col_sums == [9, 11, 17, 10, 9]) & (row_products == [576, 384, 560]) & (col_products == [24, 40, 168, 32, 24]) & (a[0][0] == 3) & (a[2][4] == 4):
            print('bingo!!')
        else:
            print('lose!')
        input()

注释了一下,搞懂了大概逻辑之后就是一个反推,感觉手搓答案也是可以的,这里用z3来解决,脚本如下。

from z3 import *
a1=Int('a1')
a2=Int('a2')
a3=Int('a3')
a4=Int('a4')
a5=Int('a5')
b1=Int('b1')
b2=Int('b2')
b3=Int('b3')
b4=Int('b4')
b5=Int('b5')
c1=Int('c1')
c2=Int('c2')
c3=Int('c3')
c4=Int('c4')
c5=Int('c5')
s=Solver()
s.add(a1==3)
s.add(c5==4)
s.add(a1+a2+a3+a4+a5==19)
s.add(b1+b2+b3+b4+b5==17)
s.add(c1+c2+c3+c4+c5==20)
s.add(a2+b2+c2==11)
s.add(a3+b3+c3==17)
s.add(a4+b4+c4==10)
s.add(a5+b5+c5==9)
s.add(a1*a2*a3*a4*a5==576)
s.add(b1*b2*b3*b4*b5==384)
s.add(c1*c2*c3*c4*c5==560)
s.add(a1*b1*c1==24)
s.add(a2*b2*c2==40)
s.add(a3*c3*b3==168)
s.add(a4*b4*c4==32)
s.add(a5*b5*c5==24)
if s.check()==sat:
    print(s.model())
else:
    print('error')

#输出[a1 = 3,c5 = 4,b4 = 4,b2 = 2,a2 = 4,c3 = 7,c4 = 2,b5 = 3,b3 = 4,b1 = 4,a4 = 4,a3 = 6,a5 = 2,c1 = 2,c2 = 5]
#346424244325724

如果要设列表为未知解的话,再加上这是一个二维列表,百度了一下,发现好像是可以实现的,但是感觉应该很麻烦。想了一下直接设15个数都为未知数。笨人笨方法。

flag就是flag{346424244325724}

这次内部赛和舍友合砍第二,还是挺不错滴,虽然差点也能拿第一没拿到有些可惜。

文末附加内容
暂无评论

发送评论 编辑评论


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