Untitled

 avatar
unknown
plain_text
a month ago
2.5 kB
3
Indexable
from Crypto.Cipher import AES, Blowfish
from Crypto.Util.Padding import unpad
from Crypto.Random import get_random_bytes
from Crypto.Protocol.KDF import scrypt

# Fonction pour extraire la clé dynamique (basée sur le contenu du fichier)
def generate_dynamic_key(file_data, salt):
    # Dérivation de la clé à partir du hachage SHA-256 du fichier avec un sel
    dynamic_key = scrypt(file_data, salt, key_len=32, N=2**14, r=8, p=1)
    return dynamic_key

# Fonction pour déchiffrer les données
def decrypt_data(encrypted_data, key):
    # Extraction des IVs
    blowfish_iv = encrypted_data[:8]
    aes_iv = encrypted_data[8 + len(encrypted_data)//2 : 8 + len(encrypted_data)//2 + AES.block_size]
    
    # Séparation des données chiffrées
    encrypted_part1 = encrypted_data[8 : 8 + len(encrypted_data)//2]
    encrypted_part2 = encrypted_data[8 + len(encrypted_data)//2 + AES.block_size :]

    # Décryptage Blowfish de la première moitié
    cipher_blowfish = Blowfish.new(key, Blowfish.MODE_CBC, blowfish_iv)
    decrypted_part1 = unpad(cipher_blowfish.decrypt(encrypted_part1), Blowfish.block_size)

    # Décryptage AES de la deuxième moitié
    cipher_aes = AES.new(key, AES.MODE_CBC, aes_iv)
    decrypted_part2 = unpad(cipher_aes.decrypt(encrypted_part2), AES.block_size)

    # Combiner les deux parties décryptées
    decrypted_data = decrypted_part1 + decrypted_part2
    return decrypted_data

# Fonction pour déchiffrer le fichier
def decrypt_exe(input_file, output_file):
    # Lire le fichier crypté
    with open(input_file, 'rb') as f:
        encrypted_data = f.read()

    # Extraire le sel du fichier crypté
    salt = encrypted_data[:16]  # Le sel est les premiers 16 octets du fichier crypté

    # Générer la clé dynamique à partir du fichier crypté et du sel
    dynamic_key = generate_dynamic_key(encrypted_data, salt)

    # Décryptage des données
    decrypted_data = decrypt_data(encrypted_data, dynamic_key)

    # Préparation des données à exécuter (c'est-à-dire le fichier décrypté)
    with open(output_file, 'wb') as f:
        f.write(decrypted_data)

    print(f"Fichier '{input_file}' décrypté avec succès sous '{output_file}'.")

# Exemple d'utilisation
input_encrypted_exe = 'mon_application_encrypted.exe'  # Le fichier crypté à déchiffrer
output_decrypted_exe = 'mon_application_decrypted.exe'  # Nom du fichier décrypté

decrypt_exe(input_encrypted_exe, output_decrypted_exe)
Leave a Comment