[BJDCTF2020] 这是base??
- 考点:换表base64
题目附件中给出的文档明确指出本题的考点,并且给了一个码表,我们需要对照给的密文和码表还原出原来的base64密文才能进行解密
附原表
写脚本还原以下即可
dict={0: 'J', 1: 'K', 2: 'L', 3: 'M', 4: 'N', 5: 'O', 6: 'x', 7: 'y', 8: 'U', 9: 'V', 10: 'z', 11: 'A', 12: 'B', 13: 'C', 14: 'D', 15: 'E', 16: 'F', 17: 'G', 18: 'H', 19: '7', 20: '8', 21: '9', 22: 'P', 23: 'Q', 24: 'I', 25: 'a', 26: 'b', 27: 'c', 28: 'd', 29: 'e', 30: 'f', 31: 'g', 32: 'h', 33: 'i', 34: 'j', 35: 'k', 36: 'l', 37: 'm', 38: 'W', 39: 'X', 40: 'Y', 41: 'Z', 42: '0', 43: '1', 44: '2', 45: '3', 46: '4', 47: '5', 48: '6', 49: 'R', 50: 'S', 51: 'T', 52: 'n', 53: 'o', 54: 'p', 55: 'q', 56: 'r', 57: 's', 58: 't', 59: 'u', 60: 'v', 61: 'w', 62: '+', 63: '/', 64: '='} a='' for i in range(65,91): a+=chr(i) for i in range(97,123): a+=chr(i) for i in range(48,58): a+=chr(i) ch='FlZNfnF6Qol6e9w17WwQQoGYBQCgIkGTa9w3IQKw' s='' for i in ch: s+=a[list(dict.values()).index(i)] print s.decode('base64')
运行脚本得到flag:
flag{D0_Y0u_kNoW_Th1s_b4se_map}
[WUSTCTF2020] B@se
- 考点:未知位置换表base64
下载附件得到txt文件,其中给了密文和换了表的base64码表,但是表中缺失了四位
手动查一下发现缺少了
j u 3 4
这四位,通过对比密文,可以发现在缺少的四位中,密文只含有j 3
这两项,所以我们只需要枚举这两个字符在缺失的四位中的排列位置,写个脚本每次手动改一下就行d='JASGBWcQPRXEFLbCDIlmnHUVKTYZdMovwipatNOefghq56rs3**jkxyz012789+/' a='' for i in range(65,91): a+=chr(i) for i in range(97,123): a+=chr(i) for i in range(48,58): a+=chr(i) ch='MyLkTaP3FaA7KOWjTmKkVjWjVzKjdeNvTnAjoH9iZOIvTeHbvD' s='' for i in ch: s+=a[d.index(i)] s+='==' print s.decode('base64')
经过多次尝试,最终发现
3
在第一位,j
在第四位的时候可以成功解得flag
flag:
flag{base64_1s_v3ry_e@sy_and_fuN}
rot
- 考点:rot13 & md5爆破
下载附件得到txt文件,其中写了一长串的数字,第一个想法就是将每个数字都转换成对应的ASCII码,但是写脚本时每行一个数字比较方便,所以我们先将txt中多余内容删去,然后将空格替换为回车,此处就涉及到了如何替换成回车:回车在替换时可用
^p
表示替换后写脚本,将数字转换为对应的ASCII码,由于正常转换会出现不可显示的字符,而且本题题目的rot,我们尝试rot13
out='' f=open('rot.txt','r') while 1: a=f.readline().strip() if a: out+=chr(int(a)-13) else: break print out
得到结果如下
FLAG IS flag{www_shiyanbar_com_is_very_good_????} MD5:38e4c352809e150186920aac37190cbc
刚开始我以为上面的就是flag,但是交上去后却不对,而且还给了md5值,想到需要通过下面的md5值将完整的flag爆破出来,即求出flag中
?
表示的字符,而且在线网站也无法还原这道题中的MD5,所以写脚本import hashlib count=0 md5='38e4c352809e150186920aac37190cbc' str='flag{www_shiyanbar_com_is_very_good_' while count==0: for i in range(32,127): # 可显示字符ASCII码的对应值为32~126 a=chr(i) for i in range(32,127): b=chr(i) for i in range(32,127): c=chr(i) for i in range(32,127): d=chr(i) flag=str+a+b+c+d+'}' m=hashlib.md5(flag) m=m.hexdigest() if cmp(m,md5)==0: count=1 print flag
运行脚本得到flag:
flag{www_shiyanbar_com_is_very_good_@8Mu}
[ACTF_2020] crypto-classic1
- 考点:键盘密码 & 维吉尼亚密码
下载附件得到hint.txt和一个加密过的压缩包,查看hint.txt,是键盘密码的一种,由空格分隔的每个字符串都包上了键盘的一个字母,比如
xdfv
包上了c
,将这留个字母解出来拼在一起得到压缩包密码:circle
压缩包名字提示为维吉尼亚加密,但是没有给密钥,我们已知flag的格式为
ACTF{}
,即密文中的SRLU
对应明文的ACTF
,而维吉尼亚加密有一个特点(划重点),可以通过密文和明文来推导出密钥,我们将已知对应明文部分的密文(本题中即为SRLU
,对应ACTF
)作为明文,将已知的明文(即ACTF
)作为密钥进行解密
将得到的内容去重,即为加密的密钥,本题中即
sp
,再用sp
作为密钥解密即可得到flag,不过需要注意的是在解密时我们需要将那几个特殊符号{}
和_
用相同的字母替换掉,比如我都用b
替换掉
再将得到的明文中对应的位置换回原来的符号即可得到flag
flag:
flag{what_a_classical_vigenere}
yxx
- 考点:xor
本题和异性相吸那题差不多,可能题目名字里少了个
x
(2333下载附件得到两个txt文件,用010editor打开发现长度相同,直接尝试xor,即可得到flag
a = '6C 6F 76 65 6C 6F 76 65 6C 6F 76 65 6C 6F 76 65 6C 6F 76 65 6C 6F 76 65 6C 6F 76 65 6C 6F 76 65'.replace(' ','') b = '0A 03 17 02 56 01 15 11 0A 14 0E 0A 1E 30 0E 0A 1E 30 0E 0A 1E 30 14 0C 19 0D 1F 10 0E 06 03 18'.replace(' ','') flag = '' for i in range(0,len(a),2): x = '0x' + a[i:i+2] y = '0x' + b[i:i+2] flag += chr(int(x,16) ^ int(y,16)) print flag
flag:
flag{xor_xor_xor_biubiubiu}
info 评论功能已经关闭了呐!