CTF [网络安全实验室] [解密关第6题]

CTF [网络安全实验室] [解密关第6题]

网络安全实验室
http://hackinglab.cn

解密关
6.异常数据
分值: 200
小明今天去妹纸家开Party,而妹纸却给他出了一个谜语,说只要他能答出来,她就会答应小明一个要求.
这是妹纸给小明的谜语序列:AGV5IULSB3ZLVSE=
Tips:key就是解密结果

初略一看,密语后面有等号,必定是base加密,使用base64解密
在这里插入图片描述
解密网址:http://tool.chinaz.com/tools/base64.aspx

解密结果: ey!B�vKU!

得到这么一串怪怪的字符串,尝试提交答案,果然不正确,考虑到可能是多层加密,又开始找各种加解密工具进行解密,均无法得到解密结果。
上网查询,大神说题目叫异常数据,而且给的整个谜语数列都是大写,那么很有可能原数列进行过upper()处理,所有的小写字符都变成了大写字符。
那么意思就是原字符串应该含有一个或多个小写字符。利用python,通过深度搜索,遍历所有可能的情况,然后对每一个可能的字符串进行base64解密。

import base64

# 判断字符串是否都有ascii码中可见字符组成,剔除控制字符和中文字符
def is_all_char(str):
    for i in range(len(str)):
        if ord(str[i])<32 or ord(str[i])>126:
            return False
    return True

# 对字符串进行base64解码,并对可能的结果进行输出
def de_base(str):
    try:
        key = base64.b64decode(str).decode('utf-8')
        if is_all_char(key):
            print(f'pass_str={str}')
            print(f'key={key}')
    except Exception:
        return

# 将字符串中某个字符进行替换
def replace_char(str, i, char):
    str_list = list(str)
    str_list[i] = char
    return ''.join(str_list)

# dfs深度搜索,遍历每一种可能的字符串情况
def get_pass(pass_str, start):
    for i in range(start, len(pass_str)):
        if pass_str[i] >='A' and pass_str[i]<='Z' :
            pass_str = replace_char(pass_str, i, pass_str[i].lower())
            de_base(pass_str)
            get_pass(pass_str, i+1)
            pass_str = replace_char(pass_str, i, pass_str[i].upper())

if __name__ == "__main__":
    pass_str = 'AGV5IULSB3ZLVSE='
    get_pass(pass_str, 0)

在这里插入图片描述
排除掉包含控制字符的结果后,依然有很多符合要求的结果,选中最有可能的一条
key=hey!IloveU!
提交答案,成功!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值