2023 安洵杯 全国精英赛 暨 SYCTF WP

警告
本文最后更新于 2023-06-11,文中内容可能已过时。
P.S.

看完数独就看着二进制 看麻了

misc手坐大牢,还做了web1和cry1,等后面再补

烦人的压缩包

先爆破,密码是645321

在love.jpg文件尾发现zip

解压显示crc错误

修enum COMPTYPE deCompression和frCompression

改store为deflate (0->8)

解压即可

然后解Ook!得到flag

1
2
3
4
5
6
我测,你居然解出了这个压缩包
作为奖励,flag就给你吧

SYC{Yxx_Say_Thank3Q_v3ry_much}

还有,yxx说太谢谢你啦!

easy_sudoku

用sage解数独即可

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
from pwn import *
# context.log_level=('debug')
p = remote('47.108.165.60','30460')


def get_score():
    p.recvuntil('Please input:')
    p.sendline('1')
    p.recvuntil('Please select the level:')
    p.sendline('5')
    p.recvuntil('start\n',drop=True)
    x = p.recvuntil('now')
    print(x.decode().replace('\n','').replace('-','').replace('now',''))
    B = matrix(ZZ,9, [int(i) for i in su])
    # B
    res = sudoku(B)
    print(str(res).replace('[','').replace(']','').replace(' ',''))
    p.sendlineafter('give me you solve:\n',str(res).replace('[','').replace(']','').replace(' ',''))

for i in range(24):
	get_score()
p.interactive()

也可以难度选120分

会给全是0的数独

1
2
3
4
5
6
7
8
9
123456789
789123456
456789123
312845697
697312845
845697312
231564978
978231564
564978231

传这个即可

speedrun_sudoku

二血

一边nc,另一半解出完整的路径复制即可

不知道为什么我的pwntools收不到数据,只能半手工了

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# sage

su = input("input> ")

for i in range(12):
    su += input()

su= su.replace('\n','').replace('-','').replace('|','').replace(' ','')
B = matrix(ZZ,9, [int(i) for i in su])

res = sudoku(B)
res = str(res).replace('[','').replace(']','').replace(' ','')
# print(res)
res = res.split()
# res
path = []
for i1,r in enumerate(res):

    if i1 == len(res)-1:
        for i,v in enumerate(r):
            path.append( v + "d")
            if i == len(r)-1:
                path = path[:-1]
                path.append( v) 
    elif i1 %2 == 0:

        for i,v in enumerate(r):
            path.append( v + "d")
            if i == len(r)-1:
                path = path[:-1]
                path.append( v + "s")
    else:
        r=r[::-1]
        for i,v in enumerate(r):
            path.append( v + "a")
            if i == len(r)-1:
                path = path[:-1]
                path.append( v + "s") 
    

# print(path)

for i in path:
    print(i,end='')

image-20230610221511085

cancellation

image-20230610213203645

image-20230610213214128

mkv文件,用mkvtoolnix处理一下

image-20230610213304929

可以看到有两个PCM

分别导出,可以听出来是sstv

用RXSSTV转成图片看一下

分别是

image-20230610214003525

image-20230610214103394

可以看出来有二维码的那张图的背景是下面这张图,图片异或肯定是不行

联想noise这个名字,应该是通过一定的方法去给这个noise去掉

经测试不是diff,是在1的值大于2的时候,相减

先把提取出来的mkv用ffmpeg转成wav,用scipy处理方便

1
2
ffmpeg -i "noise.mka" 1.wav
ffmpeg -i "noise (1).mka" 2.wav

然后让ai写个脚本

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
import scipy.io.wavfile as wav

# 读取wav文件
wav1 = wav.read('1.wav')  
wav2 = wav.read('2.wav')
result = wav1

# 相减
for i in range(len(wav1[1])):
    if wav1[1][i] > wav2[1][i]:

        result[i] = wav1[1][i] - wav2[1][i] 

# 生成wav文件 
wav.write('result.wav', wav1[0], result)

image-20230610220644201

扫码得到的base64,转成png即可

image-20230610220716502

1
SYC{1_L0V3_5P4C3_7R4V3L}
0%