#!/bin/env python3 from sys import argv def info(msg): print(f"[+] {msg}") def success(msg): print(f"[*] {msg}") def KSA(key): S = list(range(256)) j = 0 for i in range(256): j = (j + S[i] + key[i % len(key)]) % 256 S[i], S[j] = S[j], S[i] return S def PRGA(sbox): i, j = 0, 0 while True: i = (i+1) % 256 j = (j + sbox[i]) % 256 sbox[i], sbox[j] = sbox[j], sbox[i] K = sbox[(sbox[i] + sbox[j]) % 256] yield K def rc4(data, key): S = KSA(key) gen = PRGA(S) result = "".join(chr(c ^ n) for c, n in zip(data, gen)) return str(result) def main(): CIPHER_FILE = argv[1] KEY_FILE = argv[2] # load cipher cipher = b'' with open(CIPHER_FILE, 'rb') as f: cipher = f.read() # load key key = b'' with open(KEY_FILE, 'rb') as f: key = f.read() # execute RC4 sbox = KSA(key) # output result result = rc4(cipher, key) success(result) if __name__ == "__main__": main()