xctf攻防世界 CRYPTO高手进阶区 Decode_The_File

0x01. 进入环境,下载附件

题目给出了一个无后缀文件,使用txt打开,如图:
在这里插入图片描述

0x02. 问题分析

可以看出,题目包含的内容就是base64字符,想办法接触base64编码内容即可。但是这么多编码信息,如何拿到flag?

解题过程参考大佬的博客,https://www.cnblogs.com/coming1890/p/13540370.html,在此引用一张图片:

在这里插入图片描述
在这里,说明加密后的填充位0,解码过程中,即使当 a i ≠ 0 a_i≠0 ai=0,解码过程也能正确进行。那么也就是可以使用 a i a_i ai传递一些信息。因此,将编码中的ai提取出来

0x03. 直接上代码

from string import ascii_uppercase, ascii_lowercase, digits
from Crypto.Util.number import long_to_bytes


def solve():
    with open('pic/1a351e90fb2b476a929d1e2666d7c511', 'r') as file:
        f = file.read()
    lc = f.split('\n')[:-1]  # split最后一个字符为空,因此要去到倒数第二个
    # base就是对应的64个字符
    base = ascii_uppercase + ascii_lowercase + digits + '+/'

    re2 = []
    for code in lc:
        if '==' in code:  # 如果是编码一个字节
            re2.append(bin(base.find(code[-3]))[2:].rjust(6, '0')[2:])
        elif '=' in code:  # 如果是编码两个字节
            re2.append(bin(base.find(code[-2]))[2:].rjust(6, '0')[4:])
    ret = ''.join(re2)
    return long_to_bytes(int(ret[:ret.rfind('1') + 1], 2), 2).decode()


if __name__ == '__main__':
    print(solve())

运行后,最终的答案为:ROIS{base_GA_caN_b3_d1ffeR3nT}

最后,base64编码的原理一定要知道,后续作为内容进行整理!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

l8947943

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值