BUUCTF密码进阶-DAY4

388 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第16天,点击查看活动详情

[ACTF新生赛2020]crypto-classic1

下载附件得到一个hint和一个压缩包:

哇,这里有压缩包的密码哦,于是我低下了头,看向了我的双手,试图从中找到某些规律
xdfv ujko98 edft54 xdfv pok,.; wsdr43

判断是键盘加密,每组字母包围起来的字母分别为:circle。

于是我们可以解得密文:

SRLU{LZPL_S_UASHKXUPD_NXYTFTJT}

根据以往得做题经验,SRLU未加密前应为ACTF,编写脚本如下来去解维吉尼亚密码:

#破解key
s='ABCDEFGHIJKLMNOPQRSTUVWXYZ' 
s1='ACTF' 
s2='SRLU' 
key =''
for i in range(len(s1)): 
    key+=s[(s.find(s2[i])-s.find(s1[i]))%26] 
print key
 
 
#解密
cipher = 'SRLU{LZPL_S_UASHKXUPD_NXYTFTJT}'
key = 'SP'
#decode
flag = ''
for i in range(0,len(cipher)):
	flag += table[(table.find(cipher[i])+26-table.find(key[i%len(key)]))%26]
print flag
#ACTFHWHATKAKCLASSICALKVIGENEREH
 
'''
cipher = SRLU{LZPL_S_UASHKXUPD_NXYTFTJT}
flag{WHAT_A_CLASSICAL_VIGENERE}
'''

[ACTF新生赛2020]crypto-aes

下载附件得到AES.py:

from Cryptodome.Cipher import AES
import os
import gmpy2
from flag import FLAG
from Cryptodome.Util.number import *
def main():
    key=os.urandom(2)*16
    iv=os.urandom(16)
    print(bytes_to_long(key)^bytes_to_long(iv))
    aes=AES.new(key,AES.MODE_CBC,iv)
    enc_flag = aes.encrypt(FLAG)
    print(enc_flag)
if __name__=="__main__":
    main()

output里的内容为:

91144196586662942563895769614300232343026691029427747065707381728622849079757
b'\x8c-\xcd\xde\xa7\xe9\x7f.b\x8aKs\xf1\xba\xc75\xc4d\x13\x07\xac\xa4&\xd6\x91\xfe\xf3\x14\x10|\xf8p'

简单分析一下里面得函数:

形如os.urandom(n)*k是返回k个n随机字节,key是两个不断重复的字节组成,key是32字节,iv(偏移量)是16字节,只有 iv 与 key的低128位相异或,所以key的高128位是固定不变的。我们根据推理求出iv的值,然后就可以解密了:

from Crypto.Cipher import AES
import os
from gmpy2 import*
from Crypto.Util.number import*


xor = 91144196586662942563895769614300232343026691029427747065707381728622849079757
enc_flag = b'\x8c-\xcd\xde\xa7\xe9\x7f.b\x8aKs\xf1\xba\xc75\xc4d\x13\x07\xac\xa4&\xd6\x91\xfe\xf3\x14\x10|\xf8p'
out = long_to_bytes(xor)
key = out[:16]*2
# print(key)
iv = bytes_to_long(key[16:])^bytes_to_long(out[16:])
# print(iv)
iv = long_to_bytes(iv)
# print(iv)
aes = AES.new(key,AES.MODE_CBC,iv)
flag = aes.decrypt(enc_flag)
print(flag)

得到flag:

actf{W0W_y0u_can_so1v3_AES_now!}

[GUET-CTF2019]NO SOS

下载附件,得到:

..-.-.-.–…….–..-…-..-…–.-.-….-..-..–.-.-..-.-..—-

怀疑是莫斯密码,但根据NO SOS判断又不是SOS密码。

因为密文格式不太规范,我们修改一下:

..-.-.-.--.......--..-...-..-...--.-.-....-..-..--.-.-..-.-..----

转成二进制数据看一下:

0010101011000000011001000100100011010100001001001101010001001111

尝试一下培根密码,把01看成ab

aababababbaaaaaaabbaabaaabaabaaabbababaaaabaabaabbababaababaabbbb

找个网站解密一下:

rumkin.com/tools/ciphe…

得到:

flag{guetkkp}

突然发现好久没做密码题目了,于是我今天就简单刷了几个密码题目,感觉都还是挺有难度的,包括但不先AES的异或,还有了解比较少的培根密码,也算是扩展了一下做题的思路。也学到了一些不曾重视的知识点。明天继续刷一下。