前言
BUUCTF逆向刷题涉及到这个问题RC4加密,变表base64编码
一、题目分析
题目一进来就能看到很清晰的函数逻辑,有三个关键函数,后面与密文比较: 这里的第一个函数是构造RC4的S盒,第二个函数是输入的flag进行RC第三个函数是变表base64加密,字符串中未找到相关变表,具体函数分析如下:
二、代码示例
import base64 a = r"Z`TzzTrD|fQP[_VVL|yneURyUmFklVJgLasJroZpHRxIUlH\vZE" table = '' for i in range(64): table = chr(i 61) table2 = 'BCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 /' biao = str.maketrans(table[1:],table2) enc = a.translate(biao) '=' c2 = base64.b64decode(enc.encode()) key = [16,32,48,48,32,32,16,64] flag = c2 s_box = list(range(256)) j = 0 for i in range(256): j = (j s_box[i] key[i % len(key)]) % 256 s_box[i], s_box[j] = s_box[j], s_box[i]
res = []
i = j = 0
for s in flag:
i = (i + 1) % 256
j = (j + s_box[i]) % 256
s_box[i], s_box[j] = s_box[j], s_box[i]
t = (s_box[i] + s_box[j]) % 256
k = s_box[t]
res.append(chr(s ^ k))
cipher = "".join(res)
print(cipher)
总结
脚本积累