| | from Crypto.Cipher import AES
|
| | from Crypto.Protocol.KDF import PBKDF2
|
| | import os
|
| | import tempfile
|
| | from dotenv import load_dotenv
|
| |
|
| | load_dotenv()
|
| |
|
| | def unpad(data):
|
| | return data[:-data[-1]]
|
| |
|
| | def decrypt_and_run():
|
| |
|
| | password = os.getenv("PASSWORD")
|
| | if not password:
|
| | raise ValueError("PASSWORD secret not found in environment variables")
|
| |
|
| | password = password.encode()
|
| |
|
| | with open("code.enc", "rb") as f:
|
| | encrypted = f.read()
|
| |
|
| | salt = encrypted[:16]
|
| | iv = encrypted[16:32]
|
| | ciphertext = encrypted[32:]
|
| |
|
| | key = PBKDF2(password, salt, dkLen=32, count=1000000)
|
| | cipher = AES.new(key, AES.MODE_CBC, iv)
|
| |
|
| | plaintext = unpad(cipher.decrypt(ciphertext))
|
| |
|
| | with tempfile.NamedTemporaryFile(suffix=".py", delete=False, mode='wb') as tmp:
|
| | tmp.write(plaintext)
|
| | tmp.flush()
|
| | print(f"[INFO] Running decrypted code from {tmp.name}")
|
| | os.system(f"python {tmp.name}")
|
| |
|
| | if __name__ == "__main__":
|
| | decrypt_and_run()
|
| |
|
| |
|
| | |