2024CISCN铁人三项_RE2
原创2025年1月1日大约 1 分钟
2024CISCN铁人三项_RE2
发现有key,和RC4加密。
上面是key,下面是密文。
968FB8085DA76844F2649264427A78E6EAC278B8639E5B3DD9283FC87306EE6B8D0C4BA323AECA40EDD1
然后用在线解密发现解不开,自己写脚本也解不开。
发现左侧有个xor,而且这些函数都在一起,按顺序就是先异或,RC4初始化,RC4加密,检查。 然后就抱着试着的心态,在RC4解密完后,加个异或,和下一位异或。
from Crypto.Cipher import ARC4
# 定义密钥
key = b"testkey"
# 加密数据(十六进制表示)
enc = [
0x96, 0x8F, 0xB8, 0x08, 0x5D, 0xA7, 0x68, 0x44, 0xF2, 0x64,
0x92, 0x64, 0x42, 0x7A, 0x78, 0xE6, 0xEA, 0xC2, 0x78, 0xB8,
0x63, 0x9E, 0x5B, 0x3D, 0xD9, 0x28, 0x3F, 0xC8, 0x73, 0x06,
0xEE, 0x6B, 0x8D, 0x0C, 0x4B, 0xA3, 0x23, 0xAE, 0xCA, 0x40,
0xED, 0xD1
]
# 初始化 ARC4 解密器
cipher = ARC4.new(key)
# 将加密的整数列表转换为字节并解密
decrypted_data = cipher.decrypt(bytes(enc))
# 转换为 bytearray 以支持位操作
flag = bytearray(decrypted_data)
# 逐字节解密操作
for i in range(len(flag) - 1, 0, -1):
flag[i - 1] ^= flag[i] # 当前字节与下一个字节异或
# 输出解密结果
print(flag.decode("utf-8", errors="replace")) # 尝试将字节解码为字符串
#flag{d0f5b330-9a74-11ef-9afd-acde48001122}