litctf

ezpy

这个文件一看是python打包的

然后本身解包很简单,但是找主函数调用的库找不到QAQ

但是exe可以执行,那么肯定库是在的

根据Pyinstaller打包的exe之一键反编译py脚本与防反编译_pyinstaller防止反编译-CSDN博客

查找资料,通过把PYZ-00.pyz打开查看内容找到最后的库

1
2
pyi-archive_viewer ezpy.exe
o PYZ-00.pyz
1
x xxx.lib

然后就和普通的操作一样了

CISCN

asm_re

这个是arm的汇编,看起来有点难QAQ

写脚本把代码跑出来又不是很现实

所以尝试丢给ai,写脚本解

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
from prism import *
# 原始数据
data = """
__const:0000000100003F10 D7 unk_100003F10 DCB 0xD7 ; DATA XREF: _main+34↑o
__const:0000000100003F11 1F DCB 0x1F
__const:0000000100003F12 00 DCB 0
__const:0000000100003F13 00 DCB 0
__const:0000000100003F14 B7 DCB 0xB7
__const:0000000100003F15 21 DCB 0x21 ; !
__const:0000000100003F16 00 DCB 0
__const:0000000100003F17 00 DCB 0
__const:0000000100003F18 47 DCB 0x47 ; G
__const:0000000100003F19 1E DCB 0x1E
__const:0000000100003F1A 00 DCB 0
__const:0000000100003F1B 00 DCB 0
__const:0000000100003F1C 27 DCB 0x27 ; '
__const:0000000100003F1D 20 DCB 0x20
__const:0000000100003F1E 00 DCB 0
__const:0000000100003F1F 00 DCB 0
__const:0000000100003F20 E7 DCB 0xE7
__const:0000000100003F21 26 DCB 0x26 ; &
__const:0000000100003F22 00 DCB 0
__const:0000000100003F23 00 DCB 0
__const:0000000100003F24 D7 DCB 0xD7
__const:0000000100003F25 10 DCB 0x10
__const:0000000100003F26 00 DCB 0
__const:0000000100003F27 00 DCB 0
__const:0000000100003F28 27 DCB 0x27 ; '
__const:0000000100003F29 11 DCB 0x11
__const:0000000100003F2A 00 DCB 0
__const:0000000100003F2B 00 DCB 0
__const:0000000100003F2C 07 DCB 7
__const:0000000100003F2D 20 DCB 0x20
__const:0000000100003F2E 00 DCB 0
__const:0000000100003F2F 00 DCB 0
__const:0000000100003F30 C7 DCB 0xC7
__const:0000000100003F31 11 DCB 0x11
__const:0000000100003F32 00 DCB 0
__const:0000000100003F33 00 DCB 0
__const:0000000100003F34 47 DCB 0x47 ; G
__const:0000000100003F35 1E DCB 0x1E
__const:0000000100003F36 00 DCB 0
__const:0000000100003F37 00 DCB 0
__const:0000000100003F38 17 DCB 0x17
__const:0000000100003F39 10 DCB 0x10
__const:0000000100003F3A 00 DCB 0
__const:0000000100003F3B 00 DCB 0
__const:0000000100003F3C 17 DCB 0x17
__const:0000000100003F3D 10 DCB 0x10
__const:0000000100003F3E 00 DCB 0
__const:0000000100003F3F 00 DCB 0
__const:0000000100003F40 F7 DCB 0xF7
__const:0000000100003F41 11 DCB 0x11
__const:0000000100003F42 00 DCB 0
__const:0000000100003F43 00 DCB 0
__const:0000000100003F44 07 DCB 7
__const:0000000100003F45 20 DCB 0x20
__const:0000000100003F46 00 DCB 0
__const:0000000100003F47 00 DCB 0
__const:0000000100003F48 37 DCB 0x37 ; 7
__const:0000000100003F49 10 DCB 0x10
__const:0000000100003F4A 00 DCB 0
__const:0000000100003F4B 00 DCB 0
__const:0000000100003F4C 07 DCB 7
__const:0000000100003F4D 11 DCB 0x11
__const:0000000100003F4E 00 DCB 0
__const:0000000100003F4F 00 DCB 0
__const:0000000100003F50 17 DCB 0x17
__const:0000000100003F51 1F DCB 0x1F
__const:0000000100003F52 00 DCB 0
__const:0000000100003F53 00 DCB 0
__const:0000000100003F54 D7 DCB 0xD7
__const:0000000100003F55 10 DCB 0x10
__const:0000000100003F56 00 DCB 0
__const:0000000100003F57 00 DCB 0
__const:0000000100003F58 17 DCB 0x17
__const:0000000100003F59 10 DCB 0x10
__const:0000000100003F5A 00 DCB 0
__const:0000000100003F5B 00 DCB 0
__const:0000000100003F5C 17 DCB 0x17
__const:0000000100003F5D 10 DCB 0x10
__const:0000000100003F5E 00 DCB 0
__const:0000000100003F5F 00 DCB 0
__const:0000000100003F60 67 DCB 0x67 ; g
__const:0000000100003F61 1F DCB 0x1F
__const:0000000100003F62 00 DCB 0
__const:0000000100003F63 00 DCB 0
__const:0000000100003F64 17 DCB 0x17
__const:0000000100003F65 10 DCB 0x10
__const:0000000100003F66 00 DCB 0
__const:0000000100003F67 00 DCB 0
__const:0000000100003F68 C7 DCB 0xC7
__const:0000000100003F69 11 DCB 0x11
__const:0000000100003F6A 00 DCB 0
__const:0000000100003F6B 00 DCB 0
__const:0000000100003F6C C7 DCB 0xC7
__const:0000000100003F6D 11 DCB 0x11
__const:0000000100003F6E 00 DCB 0
__const:0000000100003F6F 00 DCB 0
__const:0000000100003F70 17 DCB 0x17
__const:0000000100003F71 10 DCB 0x10
__const:0000000100003F72 00 DCB 0
__const:0000000100003F73 00 DCB 0
__const:0000000100003F74 D7 DCB 0xD7
__const:0000000100003F75 1F DCB 0x1F
__const:0000000100003F76 00 DCB 0
__const:0000000100003F77 00 DCB 0
__const:0000000100003F78 17 DCB 0x17
__const:0000000100003F79 1F DCB 0x1F
__const:0000000100003F7A 00 DCB 0
__const:0000000100003F7B 00 DCB 0
__const:0000000100003F7C 07 DCB 7
__const:0000000100003F7D 11 DCB 0x11
__const:0000000100003F7E 00 DCB 0
__const:0000000100003F7F 00 DCB 0
__const:0000000100003F80 47 DCB 0x47 ; G
__const:0000000100003F81 0F DCB 0xF
__const:0000000100003F82 00 DCB 0
__const:0000000100003F83 00 DCB 0
__const:0000000100003F84 27 DCB 0x27 ; '
__const:0000000100003F85 11 DCB 0x11
__const:0000000100003F86 00 DCB 0
__const:0000000100003F87 00 DCB 0
__const:0000000100003F88 37 DCB 0x37 ; 7
__const:0000000100003F89 10 DCB 0x10
__const:0000000100003F8A 00 DCB 0
__const:0000000100003F8B 00 DCB 0
__const:0000000100003F8C 47 DCB 0x47 ; G
__const:0000000100003F8D 1E DCB 0x1E
__const:0000000100003F8E 00 DCB 0
__const:0000000100003F8F 00 DCB 0
__const:0000000100003F90 37 DCB 0x37 ; 7
__const:0000000100003F91 10 DCB 0x10
__const:0000000100003F92 00 DCB 0
__const:0000000100003F93 00 DCB 0
__const:0000000100003F94 D7 DCB 0xD7
__const:0000000100003F95 1F DCB 0x1F
__const:0000000100003F96 00 DCB 0
__const:0000000100003F97 00 DCB 0
__const:0000000100003F98 07 DCB 7
__const:0000000100003F99 11 DCB 0x11
__const:0000000100003F9A 00 DCB 0
__const:0000000100003F9B 00 DCB 0
__const:0000000100003F9C D7 DCB 0xD7
__const:0000000100003F9D 1F DCB 0x1F
__const:0000000100003F9E 00 DCB 0
__const:0000000100003F9F 00 DCB 0
__const:0000000100003FA0 07 DCB 7
__const:0000000100003FA1 11 DCB 0x11
__const:0000000100003FA2 00 DCB 0
__const:0000000100003FA3 00 DCB 0
__const:0000000100003FA4 87 DCB 0x87
__const:0000000100003FA5 27 DCB 0x27 ; '
__const:0000000100003FA6 00 DCB 0
__const:0000000100003FA7 00 DCB 0

"""

# 分割数据
lines = data.strip().split("\n")

# 初始化结果列表
result = []
f = 0
k = ''
for line in lines:
parts = line.split()
byte_data = parts[1]

hex_data = int(byte_data, 16)
a = hex(hex_data)[2:]
a = a.zfill(2)
k = a+k
f+=1
if f==4:
f = 0
result.append("0x"+k)
k = ''

for i in range(len(result)):
result[i] = int(result[i],16)
result[i]-=0x1e
result[i]^=ord('M')
result[i]-=0x14
result[i]//=ord('P')
pl(result)
#flag{67e9a228e45b622c2992fb5174a4f5f5}

androidso_re

感谢Z神的帮助,不然凭借我垃圾的安卓能力,一定会被吊死的QAQ

之后做安卓题的时候

先用die查看存档记录:

image-20240531202856657

这个存档记录不知道什么意思,但是后面有写对应的安卓版本,如果使用dex编辑器可以看到mainactivity在classes3.dex中,

image-20240531204001444

这个表明要用安卓7来打开它QAQ

之前试过用安卓10来调试,结果百分百寄,痛苦,用ida调so也断不了,QAQ

于是可以顺利用安卓7打开来调试

jadx:

image-20240531204430593

直接拿到密钥和iv

直接解

image-20240531204507379

1
flag{188cba3a5c0fbb2250b5a2e590c391ce}

rust_baby

打开文件

随便调一下,看到一个一大串连续的指令,应该就是加密‭‭‭
看到有一堆base64,解一下

1
2
3
4
5
6
7
8
9
10
{
"henhenaaa!":[1,1,4,5,1,4,1,9,1,9,8,1,0],
"cryforhelp":"igdydo19TVE13ogW1AT5DgjPzHwPDQle1X7kS8TzHK8S5KCu9mnJ0uCnAQ4aV3CSYUl6QycpibWSLmqm2y/GqW6PNJBZ/C2RZuu+DfQFCxvLGHT5goG8BNl1ji2XB3x9GMg9T8Clatc=",
"whatadoor":"1145141919810WTF",
"iwantovisit":"O0PSwantf1agnow1"
}{
"where":"where is your flag?:",
"omg":"correct flag",
"nonono":"nope, wrong flag"
}
1
2
3
4
5
{
"where":"where is your flag?:",
"omg":"correct flag",
"nonono":"nope, wrong flag"
}

由于一开始看到了isdebugpresent,所以尝试了附加调试,但是调试的时候发现程序会直接退出

image-20240531221756988

是因为这个程序有多个线程,这个时候不是main线程,这时要先切换到main线程再继续调试。

1
2
3
4
5
6
11111111111
00112233
aaaaaaaaaaa
``aabbcc

-1 -1 0 0 1 1 2 2

不写了,shi

QAQ

go_reverse

go逆向

看到函数表

image-20240604004730098

在main开头的函数里找到了这个

怀疑是aes cbc,经过分析,应该是

xor-tea-sm4-aes-base32

然后想了很久,硬是没发现flag是在哪里的,最后放弃,去找flag,发现那个题是环境题,题目只给了最后的secret

那么假定

1
ZR23CZDIW3Q73KKTC3UJKENFAHFUFKOBNMM7FCHXGGY3BJY3B4FWQ4DCI5DQOEEMM5I6O5AZRABUNXA7CVWEDYKDOT4JLVSLE3WFGXI=

这个是我的secret,QAQ

解完base32后解AES,这里看到了两个值

dPGWgcLpqmxw3uOXhKpKV009Cql和Bs^8*wZ4lu8oR&@k

第一个是密钥可以解密,第二个应该是iv

然后继续看sm4,传入了Bs^8*wZ4lu8oR&@kpg5g#k6Qo3L&1EzT

如果用流程图可以看到

image-20240605180853890

这里说明了模式是CTR,逐步动调,分别可以看到一个128位值,一个16位值,和在自己写的flag下面两段相同的32位值,以及动调两步,在加密完后上面32位值下面添加了32位值

再动调,值没了

image-20240605182238963

而下一步的输入

image-20240605182501943

用这个可以猜aes的key和iv的值

image-20240605183107505

发现key和iv是一样的,同理,后面也不知道SM4是怎么加密的


下面的调试步骤一共调了5次,可能数据对不上QAQ

观察输入和输出,已知key:pg5g#k6Qo3L&1EzT

1
2
3
4
5
[+] Dump 0xC00001E480 - 0xC00001E4A0 (32 bytes) :
[0xE1, 0x41, 0xA7, 0xFF, 0x25, 0x51, 0xA6, 0xCC, 0x83, 0x5F, 0x38, 0x43, 0xBD, 0x93, 0xCC, 0x37, 0x88, 0x94, 0xF5, 0x44, 0xDC, 0xAB, 0xC2, 0xCB, 0x92, 0x1D, 0xF2, 0x05, 0xA4, 0x26, 0xC3, 0xD5]

[+] Dump 0xC00001A330 - 0xC00001A360 (48 bytes) :
[0xA8, 0x37, 0x7D, 0xE3, 0xF1, 0xE0, 0x64, 0x7B, 0x7D, 0xAE, 0xEF, 0xEC, 0x0E, 0x53, 0x26, 0x1F, 0x74, 0xCA, 0x39, 0xD2, 0x73, 0x5A, 0xA6, 0x69, 0xEB, 0xF4, 0x7E, 0xF1, 0x56, 0x6B, 0x93, 0xEE, 0xCB, 0xA8, 0x3A, 0x73, 0x5C, 0x79, 0xEC, 0xAE, 0xD1, 0x05, 0x6D, 0x18, 0x68, 0x38, 0xEA, 0x47]

从32变成了48,sm4是块加密,一块为128位,16字节,输入正好是16的倍数,不应该增加位数,

再次调试,发现input是一样的,也就是说这里是先干了其它的然后才SM4

继续调试:可以推测128字节的值是s盒

在一个位置得到一个16长度的值s,值是

1
[0xF5, 0xEE, 0x67, 0xFD, 0xD9, 0x8D, 0xD2, 0xA2, 0xCB, 0xAC, 0x8A, 0x44, 0x90, 0x17, 0xEB, 0xEC]

下断点,发现它在加密中被读取了,并发现输入在后面被填充了

1
[0x71, 0xBF, 0xC2, 0x5A, 0xAA, 0x6E, 0x9C, 0xA0, 0x45, 0x00, 0x68, 0xF3, 0x51, 0x07, 0x31, 0x3C]

然后s被添加了值变成了

1
[0x76, 0x6D, 0x54, 0x43, 0xEB, 0x59, 0x17, 0x36, 0xAE, 0xB1, 0xE0, 0x2C, 0xB3, 0x8C, 0x40, 0x44, 0x76, 0x6D, 0x54, 0x43, 0xEB, 0x59, 0x17, 0x36, 0xAE, 0xB1, 0xE0, 0x2C, 0xB3, 0x8C, 0x40, 0x64]

有32个,后面添加的值只有最后一位从44变成了64

输入在后面添加了值

1
[0x16, 0xCB, 0xBF, 0x5F, 0x3E, 0x55, 0x54, 0x17, 0x24, 0x77, 0x5C, 0xAB, 0x8F, 0xA1, 0x0D, 0x4E]

image-20240605204649515

rax保存了这个值,定位var28

重调:

image-20240605212044032

在输入末尾

image-20240605212131738

临近结束,这个状态还在,保存一下值

1
2
input_ = [0xE1, 0x41, 0xA7, 0xFF, 0x25, 0x51, 0xA6, 0xCC, 0x83, 0x5F, 0x38, 0x43, 0xBD, 0x93, 0xCC, 0x37, 0x88, 0x94, 0xF5, 0x44, 0xDC, 0xAB, 0xC2, 0xCB, 0x92, 0x1D, 0xF2, 0x05, 0xA4, 0x26, 0xC3, 0xD5, 0x88, 0x8F, 0x9B, 0xCE, 0xD2, 0x3C, 0x34, 0x44, 0xE0, 0x4D, 0xC4, 0x45, 0x68, 0x56, 0x7A, 0x09, 0xC6, 0x70, 0x65, 0x34, 0x13, 0xF6, 0xC4, 0xF6, 0xFC, 0x15, 0x6E, 0x9C, 0xA5, 0x0F, 0x87, 0xCB]
p = [0x6F, 0xA3, 0x58, 0x57, 0x08, 0x3C, 0x9F, 0x1F, 0x7A, 0x09, 0x4F, 0x56, 0xDD, 0x7D, 0x8D, 0xB9, 0x6F, 0xA3, 0x58, 0x57, 0x08, 0x3C, 0x9F, 0x1F, 0x7A, 0x09, 0x4F, 0x56, 0xDD, 0x7D, 0x8D, 0xD9]

image-20240605213108529

这里保存了p的前16个值,然后p变成了

1
0x88, 0x8F, 0x9B, 0xCE, 0xD2, 0x3C, 0x34, 0x44, 0xE0, 0x4D, 0xC4, 0x45, 0x68, 0x56, 0x7A, 0x09, 0xC6, 0x70, 0x65, 0x34, 0x13, 0xF6, 0xC4, 0xF6, 0xFC, 0x15, 0x6E, 0x9C, 0xA5, 0x0F, 0x87, 0xCB

即input加长后的32位,有理由

1
out = [0x6F, 0xA3, 0x58, 0x57, 0x08, 0x3C, 0x9F, 0x1F, 0x7A, 0x09, 0x4F, 0x56, 0xDD, 0x7D, 0x8D, 0xB9, 0x88, 0x8F, 0x9B, 0xCE, 0xD2, 0x3C, 0x34, 0x44, 0xE0, 0x4D, 0xC4, 0x45, 0x68, 0x56, 0x7A, 0x09, 0xC6, 0x70, 0x65, 0x34, 0x13, 0xF6, 0xC4, 0xF6, 0xFC, 0x15, 0x6E, 0x9C, 0xA5, 0x0F, 0x87, 0xCB]

好好好,我理解了,看了一下CTR的定义,相当于其实是对计数器加密,然后和明文异或

image-20240605225958990

然后还是没有发现第三个部分,看了网上的wp才知道有第三段QAQ

得到了明文

1
0xe1,0x41,0xa7,0xff,0x25,0x51,0xa6,0xcc,0x83,0x5f,0x38,0x43,0xbd,0x93,0xcc,0x37,0x67,0xd8,0x8c,0xbc,0x24,0x6e,0x04,0x8d,0xcf,0x79,0xcb,0x6e,0xfe,0xf4,0x45,0xe2,0x12,0xbf,0x16,0x3d,0x3b,0x4a,0xf7,0x77,0x58,0x6f,0x66,0xd4,0xab,0xab,0xb5,0x11,0xd0,0x28,0x5e,0xce,0xcd,0x95,0x9a,0x11,0x9a,0x62,0x27,0xd5,0x71,0x82,0xbe,0x9c

然后解xxtea

1

啊啊啊啊啊啊啊啊啊啊啊啊啊啊,我谢谢你:)

解不出来放弃。QWQ

whereisThel1b

看佬的blog:

佬给了两个做法

硬分析:seed=0

1
2
3
4
5
6
7
8
9
10
11
import base64
import random
encry = [108, 117, 72, 80, 64, 49, 99, 19, 69, 115, 94, 93, 94, 115, 71, 95, 84, 89, 56, 101, 70, 2, 84, 75, 127, 68, 103,
85, 105, 113, 80, 103, 95, 67, 81, 7, 113, 70, 47, 73, 92, 124, 93, 120, 104, 108, 106, 17, 80, 102, 101, 75, 93, 68, 121, 26]
lens=len(encry)
random.seed(0)
rand=[random.randint(0,lens) for i in range(len(encry))]
flag=''
for i in range(len(encry)):
flag+=chr(rand[i]^encry[i])
print(base64.b64decode(flag))

愚者杯2023

ez_re

打开一看,是一个变体rc4,这算是我第一次遇见这种

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
int __cdecl main(int argc, const char **argv, const char **envp)
{
int key1_; // ebx
int key2_; // ecx
unsigned int i; // edi
unsigned int len; // kr00_4
int v7; // eax
int v9; // [esp-4h] [ebp-414h]
int key2__; // [esp+10h] [ebp-400h]
int key1; // [esp+18h] [ebp-3F8h] BYREF
int key2; // [esp+1Ch] [ebp-3F4h] BYREF
char input[1004]; // [esp+20h] [ebp-3F0h] BYREF

print(std::cout, byte_DA31E8);
scanf(input);
print(std::cout, byte_DA31F8);
std::istream::operator>>(std::cin, &key1);
std::istream::operator>>(std::cin, &key2);
key1_ = key1 % 299;
key2_ = key2 % 299;
i = 0;
key2__ = key2 % 299;
len = strlen(input);
if ( len )
{
do
{
v9 = dword_DA3AA0[300 * key1_ + key2_] ^ input[i];
key1_ = (v9 + key1_) % 299;
key2__ = (v9 + key2__) % 300;
v7 = std::ostream::operator<<(std::cout, v9);
print(v7, ",");
key2_ = key2__;
++i;
}
while ( i < len );
}
print(std::cout, after);
return 0;
}

这里的dword_DA3AA0是类似S盒的东西,但是有两个key,正常逆是逆不回去的,但是根据异或的性质,如果两个key一样,input和output正好可以相互解密,同时这是一个双射,一一对应,output就是v9的所有值,而key在循环中是加法,所以应当使用从最后到开始反着写,key组合一共只有90000种,而提示有base之后的flag值,由于最后的enc不能base回去,所以猜是先base后encode,flagbase之后是Zmxh,根据这个条件爆破

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
for key1 in range(0,299):
for key2 in range(0,299):
k1 = key1
k2 = key2
mid = enc[len(enc)-1]
for i in range(len(enc)-1,-1,-1):
k1 = (k1-enc[i])%299
k2 = (k2-enc[i])%300
mid = table[300*k1+k2]^enc[i]
out.append(mid)
out = out[::-1]
if bytes(out)[:4]==b'Zmxh':
print(key1)
print(key2)
print(b64decode(bytes(out)).decode('utf-8'))
break
out = []

得到key:223和241和

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
flag不在这里呦,
就像生活,
你跨过了人山人海,
你跨过了明月清风,
你见过了三更灯火,
你见过了黎明的城市。

你觉得你已经足够努力,
你觉得你理应破浪乘风。
你满身疲惫
你筋疲力竭

可惜,罗马不在前方。
或者,罗马永远在前方,
在别人出生的地方。

本狸,强烈建议你回到最初的地方
好好研究下加密矩阵
有惊喜哦

然后看看加密矩阵,不理解,应该是说S盒,但是可以知道这个很长,并且是90000个数,不理解,看wp发现这是一个图片的单通道数据,作为红色

1
2
3
4
5
6
7
8
from PIL import Image
import numpy as np
single_channel_array = np.array(table, dtype=np.uint8).reshape(300, 300)

rgb_array = np.zeros((300, 300, 3), dtype=np.uint8)
rgb_array[:,:,0] = single_channel_array
img = Image.fromarray(rgb_array, 'RGB')
img.save('output_image.png')

然后flag在图片中

1
ctfshow{d244daeb-7182-4c98-bec6-0c99329ab71f}

这真不是misc,不过下次应该就能想到了


CISCN好难啊啊啊啊

裂开

QAQ

不管了,还有好多东西没写