Bugku ctf杂项 不可破译的密码

文章讲述了作者解码一个包含复杂替换和加密步骤的谜题,过程涉及ASCII替换、16进制、CRC32碰撞、密码字典破解以及多种编码转换(如Base32和Base64),最终揭示了一个隐藏的flag。
摘要由CSDN通过智能技术生成

下载附件,里面是2个txt文件,打开flag.txt

里面是解题的提示,暂时不知道是什么意思,再打开cipher_text.txt

里面是很长一段密文,看见开头是504Q0304,非常接近zip文件的开头,再看提示,如果按照listA里“Q”对应“B”进行替换,那么就可以还原出504B0304

密文再往后看,第二个字母是I,I按照listA替换就不行了,因为“W”不是16进制数,再看listB,“I”对应“F”,不确定对不对但至少是16进制数了,此时结合密钥提示,推测应该是要用ABCDE这5个表轮流依次进行替换解密,简单验证一下后面的字母替换后确实是16进制数。

找个单表替换的脚本,修改一下,创建5个字典然后轮流依次进行替换。因为16进制数只有a~f,所以只取前6个来创建字典。

dic=[
{'P':'a', 'Q':'b', 'L':'c', 'N':'d', 'E':'e', 'Y':'f'},
{'H':'a', 'R':'b', 'V':'c', 'K':'d', 'E':'e', 'I':'f'},
{'S':'a', 'N':'b', 'U':'c', 'K':'d', 'R':'e', 'T':'f'},
{'J':'a', 'T':'b', 'K':'c', 'Q':'d', 'V':'e', 'F':'f'},
{'J':'a', 'Z':'b', 'B':'c', 'L':'d', 'E':'e', 'P':'f'}
     ]

def replace_decrypt(ciphertext, dictionary):
    plaintext = ""
    i = 0
    j = 0
    while i < len(ciphertext):
        found_match = False
        for key in dictionary[j].keys():
            if ciphertext[i:i+len(key)] == key:
                plaintext += dictionary[j][key]
                i += len(key)
                j += 1
                if j == 5:
                    j = 0
                found_match = True
                break
        if not found_match:
            plaintext += ciphertext[i]
            i += 1
    return plaintext
with open('cipher_text.txt', 'r') as file:
    ciphertext = file.read()

plaintext = replace_decrypt(ciphertext, dic)
with open('result.txt', 'w') as file:
    file.write(plaintext)

运行脚本得到结果

用010editor另存为zip文件

zip文件是加密的,里面有6个txt文件,观察到几个password文本的大小都只有6个字节,应该是使用crc32碰撞,网上可以找到现场的工具或脚本,这里使用的是crc32-master

由于碰撞出来的结果并不能找到明显的可读字符,并且结果比较多,所以只好做一个密码字典,然后用ARCHPR进行字典爆破

拿到解压口令,解压文件得到flag.txt

接下来就进入了可怕的套娃地狱

flag.txt打开拉到最后,是3个等号,应该是base32加密,顺便看到左下角的600w+字符,还是找个脚本解密吧,用工具打开直接卡死了

然后是20多层的套娃,中间会用到base32、16进制转字符、base64,最后得到了

最后的F{__y_4Lyav_StAo4esm!Gue4oa}应该就是flag了,不过显然还有一层栅栏加密,解密后得到

栏数是4时得到最终flag,别忘了题目提示里flag小写,最终flag为

flag{you_a4e_ve4y_so_Sma4t!}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值