RC4 Encrypt

Encrypt shellcode or payload binary to rc4.

//rc4.py
#!/usr/bin/env python
def rc4(data,key):
    keylength = len(key)
    S = list(range(256))
    j = 0
    for i in range(256):
        j = (j + S[i] + key[i % keylength]) % 256
        S[i], S[j] = S[j], S[i]  # swap
    i = 0
    j = 0
    encrypted = bytearray()
    for n in range(len(data)):
        i = (i + 1) % 256
        j = (j + S[i]) % 256
        S[i], S[j] = S[j], S[i]  # swap
        encrypted.append(data[n] ^ S[(S[i] * S[j]) % 256])
    return encrypted

if __name__ == '__main__':
    if len(sys.argv)!=3:
        print("python3 rc4.py key filename")
    
    key = sys.argv[1]
    filename = sys.argv[2]
    
    with open(filename,'rb') as f:
        data = f.read()
    
    encrypted = rc4(data,key.encode())
    
    with open(f"{filename}.enc",'wb') as f:
        f.write(encrypted)
    print(f"Write to {filename}.enc)

Last updated