CISCN gift

CISCN gift

题目下载: CISCN_gift.exe

golang 写的程序,要优化一个内置算法

程序逻辑如下(不是解题脚本)

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
tab1 = [0x0000000000000001, 0x0000000000000003, 0x0000000000000006, 0x0000000000000009, 0x000000000000000A, 0x000000000000000B, 0x000000000000000C, 0x000000000000000D, 0x000000000000000E, 0x000000000000000F, 0x0000000000000010, 0x0000000000000011, 0x0000000000000012, 0x0000000000000014, 0x0000000000000019, 0x000000000000001E, 0x0000000000000028, 0x0000000000000042, 0x0000000000000066, 0x00000000000000A0, 0x0000000000000936, 0x0000000000003D21, 0x00000000000149A7, 0x00000000000243AC, 0x00000000000CB5BE, 0x000000000047DC61, 0x00000000016C0F46, 0x000000000262C432, 0x0000000004ACE299, 0x0000000010FBC92A, 0x00000000329ECDFD, 0x00000000370D7470]
idx = 0
idddd = 0
def main_goooo(data):
v4 = [0] * 5
for i in range(len(data)):
v3 = data[i]
v4[v3] ^= 1
return v4[1] == 0 and v4[3] == 0

def main_wtf(pos, index, data, size1, size2):
global idx
global idddd
data[pos] = index
print(data)
if pos == size1 - 1:
if main_goooo(data):
idddd = idddd + 1
else:
for i in range(1, 5):
main_wtf(pos + 1, i, data, size1, size2)

def TestN(n):
global idddd
idddd = 0
aa = [0] * n
for i in range(1, 5):
main_wtf(0, i, aa, n, n)
return idddd

flag_i = [TestN(i) % 17 for i in tab1]

这个算法很慢,基本不可能跑出来。

TestN(1), TestN(2), TestN(3) … 跑一些比较小的额数据观察一下,很容易发现规律,用规律求解 flag 序列

1
2
3
4
5
6
7
8
9
10
flag_i = []
for i in range(len(tab1)):
t = tab1[i]
s1 = pow(2,t-1,17)
s2 = pow(2,t-1,17)+1
tmp = (s1*s2)%17
out.append(tmp)
print(flag_i)

=> [2, 3, 2, 2, 6, 3, 4, 0, 2, 12, 5, 2, 6, 4, 2, 2, 5, 6, 2, 5, 2, 2, 12, 4, 2, 2, 2, 6, 2, 6, 0, 5]

得到序列后直接映射到 flag 字符即可

CISCN{4b445b3247c45344c54c44734445452c}


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!