1、shamir重要数据损坏(Crypto)
shamir典型门限秘密共享,要形成(3,5)门限,则产生一个二次多项式
根据题目获得对应的三组(f(x),x)轻易的解出方程。
a = 5,b = 23, M = 2018
而M就为加密的信息,flag为2018提交成功。
2、misc2(MISC)
下载文件后,面对密密麻麻的压缩包真的慌的一批,所以一开始并没有认真的看这道题。
后来观测到压缩包全部为大小为3字节的文件,可以统一通过3位CRC32爆破来获取文件内容。
手上并没有能运行这么多crc碰撞的脚本,只能自己写了。
自己手动获取了40个压缩包的CRC32的值(崩溃中)放到TXT跑脚本
脚本代码如下
import datetime
import binascii
import sys
def showTime():
print datetime.datetime.now().strftime("%H:%M:%S")
def crack():
number = 0
f = open("crc.txt","r")
lines = f.readlines()
str1 = ''
for line in lines:
crc = int(line,16)
r = xrange(32, 127)
for a in r:
for b in r:
for c in r:
txt = chr(a)+chr(b)+chr(c)
crcx = binascii.crc32(txt)
if (crcx & 0xFFFFFFFF) == crc:
# print hex(crc)
# sys.stdout.write(chr(int(txt)))
str1 = str1 + chr(int(txt))
number += 1
print "find crc "+str(number)
print str1
if __name__ == "__main__":
showTime()
crack()
showTime()
耗时40秒跑出字符串“Z3hubmN0ZnsyaVBfQ3JjX2p1NXRfSzFEZDFuOX0=
”
后带等于号,放进BASE64解码尝试。
得到gxnnctf{2iP_Crc_ju5t_K1Dd1n9}
3、这是啥(MISC)
下载文件后,有一张图片
在图中提取字符串就得到了
GFE-YLCERCNSNLA-AIX{N-PYNET-TSTMYRA}
按图片内容猜测就是栅栏,当时也没认真看题目
只根据之前的经验,和结合这次比赛flag的格式GXNNCTF{*******}对这段字符拆分
尝试拆分代码
str1 = 'gfe-ylcercnsnla-aix{n-pynet-tstmyra}'
g,x,n,c,t,f, = [],[],[],[],[],[]
for i in range(0,35):
if str1[i]=='g':
g.append((i+1))
elif str1[i]=='x':
x.append((i+1))
elif str1[i]=='n':
n.append((i+1))
elif str1[i]=='c':
c.append((i+1))
elif str1[i]=='t':
t.append((i+1))
elif str1[i]=='f':
f.append((i+1))
print('g:'+str(g))
print('x:'+str(x))
print('n:'+str(n))
print('c:'+str(c))
print('t:'+str(t))
print('f:'+str(f))
可以看到对g,x,f固定位可以得出
我认为f就是栅栏密码的第二行,而如果将gxnnct这六个字符任意排序能变成等差数列的话,这题就解出来了。
所以最后结果
[图片上传中...(image.png-cd856d-1545043361871-0)]
恰好形成等差为6的6个数据,这个时候,我恍然大悟,原来题目的66666是这个意思。(汗!)
代码
a,b,c,d,e,f=1 ,19 ,13 ,25 ,7 ,31
for i in range(-1,5):
print (str1[a+i],end='')
print(str1[b+i],end='')
print(str1[c+i],end='')
print(str1[d+i],end='')
print(str1[e+i],end='')
print(str1[f+i],end='')
gxnnctf{leemenatry----crypatnalyiss}提交成功
4、伊丽莎白二世
伊丽莎白今年92岁,直接把标题丢进BASE92得到flag