0%

[SWPUCTF 2021 新生赛]PYRE WriteUp

2024-07-04 11:33By
Pu99y
RC4Base64PythonPYC逆向

Problem: [SWPUCTF 2021 新生赛]PYRE

[[toc]]

思路

RC4是对称加密,加密和解密的操作完全相同,因此使用相同的 Encrypt 函数即可解密已加密的数据。

EXP

# 题目 import hashlib import base64 # 密钥调度 def init(a, b): n = 0 b = hashlib.md5(b.encode()).hexdigest() m = [] for i in range(256): a.append(i) m.append(b[i % len(b)]) for i in range(256): n = (n + a[i] + ord(m[i])) % 256 a[i], a[n] = a[n], a[i] # 伪随机数生成 def Encrypt(a, b): n = c = 0 s = '' for i in b: n = (n + 1) % 256 c = (c + a[n]) % 256 a[n], a[c] = a[c], a[n] t = chr(ord(i) ^ a[(a[n] + a[c]) % 256]) s += t s = base64.b64encode(s.encode()) return s input_str = input('input flag pls:') s = [] init(s, 'bJLVFYw3WI5ncGez') if Encrypt(s, input_str).decode() == 'w4s1PUYsJ8OYwpRXVjvDkVPCgzIEJ27Dt2I=': print('good!')
# 解密 import hashlib import base64 # 密钥调度 def init(a, b): n = 0 b = hashlib.md5(b.encode()).hexdigest() m = [] for i in range(256): a.append(i) m.append(b[i % len(b)]) for i in range(256): n = (n + a[i] + ord(m[i])) % 256 a[i], a[n] = a[n], a[i] # 伪随机数生成 def Encrypt(a, b): n = c = 0 s = '' for i in b: n = (n + 1) % 256 c = (c + a[n]) % 256 a[n], a[c] = a[c], a[n] t = chr(ord(i) ^ a[(a[n] + a[c]) % 256]) s += t # s = base64.b64encode(s.encode()) return s # 重现初始化步骤 s = [] init(s, 'bJLVFYw3WI5ncGez') # 解码加密结果 encoded_str = 'w4s1PUYsJ8OYwpRXVjvDkVPCgzIEJ27Dt2I=' decoded_bytes = base64.b64decode(encoded_str) # 使用 RC4 解密 decrypted_str = Encrypt(s, decoded_bytes.decode()) print(decrypted_str)
还没有人赞赏,快来当第一个赞赏的人吧!
  
© 著作权归作者所有
加载失败
广告
×
评论区
添加新评论