【网络攻防CTF】python写的base64循环解码小工具(保姆级图文)

本文档介绍了一个用于解决CTF(Capture The Flag)比赛中的密码学问题的Python工具,该工具能够进行多次Base64解码,直到找到预期的解密结果。通过示例展示了如何使用该工具逐步解码一个加密字符串,最终揭示隐藏的flag。工具支持手动和自动解码模式,并提供了预期答案的标志检查功能,以便在解码过程中自动终止。文章还提供了完整的代码实现,便于读者理解和复用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


欢迎关注 『网络攻防CTF』 系列,持续更新中
欢迎关注 『网络攻防CTF』 系列,持续更新中

实现效果

欢迎使用mzh制作的多次循环base64解码工具
按1继续base64解码
按2结束,退出程序
按3根据设定好的预期答案标志,自动循环执行解码

在这里插入图片描述


CTF密码学需求

求flag
Vm1wSmQyVkZOVWhTYTJScFRUTkNjbFZ0ZUdGV1ZsWnpWMjFHYVZac1dqQmFSVkpUVlcxS1JtSkVVbFZOVm5CRVZsUktTMUpYU2tkWGJGcE9VbXh3TmxadGRHRmliVlpIVlc1T1YySkdjRzlVVnpWdlZWWmFXR05GTld0TlZUUjZXVzV2ZDFOM2J6MEsK

对于上面的题目,看这个密文结构:

关于这个编码的规则:
①.把3个字节变成4个字节。
②每76个字符加一个换行符。
③.最后的结束符也要处理。

直接就想到了base64,但是我们发现它的结尾不是==,我们解密就是多试试,多次解密发现他每一次都会变短,那么就很有可能是多次进行了base64加密

1 次base64解码
VmpJd2VFNUhSa2RpTTNCclVteGFWVlZzV21GaVZsWjBaRVJTVW1KRmJEUlVNVnBEVlRKS1JXSkdXbFpOUmxwNlZtdGFibVZHVW5OV2JGcG9UVzVvVVZaWGNFNWtNVTR6WW5vd1N3bz0K

2 次base64解码
VjIweE5HRkdiM3BrUmxaVVVsWmFiVlZ0ZERSUmJFbDRUMVpDVTJKRWJGWlZNRlp6VmtabmVGUnNWbFpoTW5oUVZXcE5kMU4zYnowSwo=

3 次base64解码
V20xNGFGb3pkRlZUUlZabVVtdDRRbEl4T1ZCU2JEbFZVMFZzVkZneFRsVlZhMnhQVWpNd1N3bz0K

4 次base64解码
Wm14aFozdFVTRVZmUmt4QlIxOVBSbDlVU0VsVFgxTlVVa2xPUjMwSwo=

5 次base64解码
ZmxhZ3tUSEVfRkxBR19PRl9USElTX1NUUklOR30K

6 次base64解码
flag{THE_FLAG_OF_THIS_STRING}

实现思路

  • 传入的是字符串格式的密文,所以要进行编码转化为btye格式
decode_str = base64.decodebytes(bytes(s, encoding='utf8') )
  • 然后对btye格式解码
result=decode_str.decode()
print(result)
  • 当auto_flag==0表示手动模式,如果输入命令3,则将当auto_flag=1,进行自动循环解码模式
auto_flag=1#进行自动循环解码模式
  • flag_list设定可能出现的预期答案标志,如果result中包含这些列表中的标志,break循环
flag_list=["flag","ctf"]

实现代码

需要安装base64

# @Time    : 2022/3/7 15:20
# @Author  : 南黎mzh
# @FileName: 多次循环base64解码按1继续按2结束按3智能解码.py
import base64
print('''####################
欢迎使用mzh制作的多次循环base64解码工具

按1继续base64解码
按2结束,退出程序
按3根据设定好的预期答案标志,自动循环执行解码
####################\n
''')

def base64_auto(s,flag_list):
    auto_flag=0 #当auto_flag==0表示手动模式,如果输入命令3,则将当auto_flag=1,进行自动循环解码模式
    for i in range(1,99999):
        if auto_flag==0:
            num=eval(input("请输入命令:"))
            if num==1:
                print(i, "次base64解码")
            elif num==2:
                break
            elif num==3:
                print(i, "次base64解码")
                auto_flag=1#进行自动循环解码模式
            else:
                print("请正确输入命令")
        elif auto_flag==1:
            print(i, "次base64解码")
        decode_str = base64.decodebytes(bytes(s, encoding='utf8') )
        result=decode_str.decode()
        print(result)


        s=result#把result赋值给s,用于下一次的解码
        #如果出现了flag答案标志,结束
        for j in flag_list:
            if j in result:
                print("出现了flag答案标志{},结束".format(j))
                return


#s是初始待解码的字符串
s = 'Vm1wSmQyVkZOVWhTYTJScFRUTkNjbFZ0ZUdGV1ZsWnpWMjFHYVZac1dqQmFSVkpUVlcxS1JtSkVVbFZOVm5CRVZsUktTMUpYU2tkWGJGcE9VbXh3TmxadGRHRmliVlpIVlc1T1YySkdjRzlVVnpWdlZWWmFXR05GTld0TlZUUjZXVzV2ZDFOM2J6MEsK'  # string
#flag_list设定可能出现的预期答案标志,如果result中包含这些列表中的标志,break循环
flag_list=["flag","ctf"]
base64_auto(s,flag_list)

总结

大家喜欢的话,给个👍,点个关注!继续跟大家分享敲代码过程中遇到的问题!

版权声明:

发现你走远了@mzh原创作品,转载必须标注原文链接

Copyright 2022 mzh

Crated:2022-3-6

欢迎关注 『网络攻防CTF』 系列,持续更新中
欢迎关注 『网络攻防CTF』 系列,持续更新中
python写的base64循环解码小工具(保姆级图文)
【更多内容敬请期待】


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

发现你走远了

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

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

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

打赏作者

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

抵扣说明:

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

余额充值