BUUCTF [RCTF2019]babyre1

1.先分析一下大致的流程:

1)输入flag,先进行长度判断,是不是16位

2)sub_562AB8800C00函数:判断输入的flag是否为16进制数

3)sub_562AB8801180函数:xxtea解密(无填充模式),密钥是unk_562AB8A02010

4)sub_562AB88013D0函数:CRC16校验,具体可以参考CRC校验码简介及CRC16的计算方法 - 21ic电子网

5)最后将解密后的数据与0x17异或,最终得到"Bingo!"

2.分析具体的解密过程

1)先将"Bingo!"与0x17异或,通过sub_562AB8801180函数可以看出解密之后一共有8位数,其中最后一位小于4,所以后两位的值需要爆破一下。

2)将异或后的数据进行xxtea加密(python中有这个模块,直接调用没问题),加密完之后hex()改一下值。

3)将第二步修改过的值包上"rctf{}",进行md5加密,与hint中的md5判断,如果md5值相等,输出其中的值,即为flag。

3.附上整体脚本:

import xxtea
import hashlib
key = [0xc7,0xe0,0xc7,0xe0,0xd7,0xd3,0xf1,0xc6,0xd3,0xc6,0xd3,0xc6,0xce,0xd2,0xd0,0xc4]
key = "".join(chr(m) for m in key)
text = [0x55,0x7e,0x79,0x70,0x78,0x36,0x0,0x0]
for i in range(0xff):
    for j in range(4):
        text[6] = i
        text[7] = j
        encrypt_data = xxtea.encrypt("".join(chr(n) for n in text),key)
        encrypt_data = encrypt_data.hex()
flag = "rctf{"+ encrypt_data +"}"
hl = hashlib.md5()
hl.update(flag.encode(encoding='utf-8'))
if hl.hexdigest() == '5f8243a662cf71bf31d2b2602638dc1d':
    print("yesyes")
    print(encrypt_data)

#rctf{05e8a376e4e0446e}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值