BUUCTF 每日打卡 2021-4-29

引言

蓝帽杯就一道 crypto
又是斐波那契数列,又是 AES
网上查到什么斐波那契数列双混沌加密
反正就是没做出来。。。
等什么时候 wp 出来再说吧。。。

boom

附件是一个 .exe 文件
不会是个 re 题吧。。。
在命令行打开(如果不在命令行打开,最后输出会直接关闭窗口)
在这里插入图片描述
Do you like van♂ you see?(大雾)
下一步
在这里插入图片描述
提交 md5
可以直接查询得到
在这里插入图片描述
输入结果
在这里插入图片描述
下一步
在这里插入图片描述
解三元一次方程组
当然你可以手算
这里我们直接用 sagemath 计算(躺)
结果如下:
在这里插入图片描述
最后一步:
在这里插入图片描述
还是用 sagemath 求解
在这里插入图片描述
输入其中一个解即可
在这里插入图片描述
当然你可以 re [doge]
把它丢尽 IDA 里面,可以得到程序的框架
这里用的的软件是 IDA Freeware 7.0
先看输出 flag 的部分:
在这里插入图片描述
发现 flag 是由三部分组成
第一部分:
在这里插入图片描述
第二部分:
在这里插入图片描述
第三部分:
在这里插入图片描述
容易知道 flag 即为上面三部分答案拼接而成

B@se

附件内容如下:

密文:MyLkTaP3FaA7KOWjTmKkVjWjVzKjdeNvTnAjoH9iZOIvTeHbvD==
JASGBWcQPRXEFLbCDIlmnHUVKTYZdMovwipatNOefghq56rs****kxyz012789+/

oh holy shit, something is missing...

第一行是密文
第二行容易猜到是重新排列的 Base64 编码对照表
只是其中几个字符缺失了
编写代码:

def judge(key, start, end):
    s = ''
    for i in range(start, end+1):
        if not chr(i) in key:
            s += chr(i)
    return s
unknown = judge(key, ord('A'), ord('Z')) + judge(key, ord('a'), ord('z')) + judge(key, ord('0'), ord('9'))
unknown_list = list(unknown)
print(unknown_list)

可以得出缺失的字符为 [‘j’, ‘u’, ‘3’, ‘4’]
对其进行排列组合,替换对照表中缺失的字符
然后按照 Base64 的编码规则编写程序
代码如下:

import itertools

c = 'MyLkTaP3FaA7KOWjTmKkVjWjVzKjdeNvTnAjoH9iZOIvTeHbvD=='
key = 'JASGBWcQPRXEFLbCDIlmnHUVKTYZdMovwipatNOefghq56rs****kxyz012789+/'

def decrypt(c, key):
    b = ''
    s = ''
    for i in range(len(c)):
        if c[i] == '=':
            b += '0'*6
        else:
            b += bin(list(key).index(c[i]))[2:].zfill(6)
    for i in range(0, len(b), 8):
        s += chr(int(b[i:i+8], 2))
    print(s)

def judge(key, start, end):
    s = ''
    for i in range(start, end+1):
        if not chr(i) in key:
            s += chr(i)
    return s
unknown = judge(key, ord('A'), ord('Z')) + judge(key, ord('a'), ord('z')) + judge(key, ord('0'), ord('9'))
unknown_list = list(unknown)
print(unknown_list)
combination = list(itertools.permutations(unknown_list,4))
for i in range(len(combination)):
    key_new = key.replace('****', ''.join(list(combination[i])))
    print(key_new)
    decrypt(c, key_new)

输出结果为:
在这里插入图片描述
可以看到会有很多重复的内容
应该是由于有些字符在编码表中没有对应的字符,或者对应的字符在不同排列组合的编码表中的位置相同
结果为:wctf2120{base64_1s_v3ry_e@sy_and_fuN}

结语

希望继续坚持

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值