Untitled

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

# Fonction de mélange non linéaire pour perturber les données
def non_linear_mixer(data):
    mixed_data = bytearray()
    for i in range(len(data)):
        mixed_data.append((data[i] * (i + 1) ^ 0x5A) % 256)
    return mixed_data

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

# Fonction pour mélanger et compresser les données avant le cryptage
def preprocess_data(file_data):
    # Applique un mélange non linéaire
    mixed_data = non_linear_mixer(file_data)
    
    # Effectue un hachage pour ajouter de la confusion
    hashed_data = hashlib.sha256(bytes(mixed_data)).digest()
    
    # Retourne les données combinées (mélangées + hachées)
    return bytes(mixed_data + hashed_data)

# Fonction pour chiffrer les données avec un cryptage hybride (AES + Blowfish)
def encrypt_data(file_data, key):
    # Prétraitement des données (mélange et hachage)
    preprocessed_data = preprocess_data(file_data)
    
    # Diviser les données en deux parties égales
    mid_point = len(preprocessed_data) // 2
    part1, part2 = preprocessed_data[:mid_point], preprocessed_data[mid_point:]
    
    # Chiffrement Blowfish sur la première moitié
    cipher_blowfish = Blowfish.new(key, Blowfish.MODE_CBC)
    encrypted_part1 = cipher_blowfish.encrypt(pad(part1, Blowfish.block_size))
    
    # Chiffrement AES sur la deuxième moitié
    iv = get_random_bytes(AES.block_size)
    cipher_aes = AES.new(key, AES.MODE_CBC, iv)
    encrypted_part2 = cipher_aes.encrypt(pad(part2, AES.block_size))
    
    # Combiner les deux parties chiffrées
    encrypted_data = cipher_blowfish.iv + encrypted_part1 + iv + encrypted_part2
    return encrypted_data

# Fonction principale pour crypter le fichier .exe
def encrypt_exe(input_file, output_file):
    # Lecture du fichier .exe
    with open(input_file, 'rb') as f:
        file_data = f.read()

    # Générer une clé dynamique à partir du contenu du fichier
    dynamic_key = generate_dynamic_key(file_data)

    # Crypter les données avec cryptage hybride
    encrypted_data = encrypt_data(file_data, dynamic_key)

    # Écrire le fichier crypté dans le fichier de sortie
    with open(output_file, 'wb') as f:
        f.write(encrypted_data)

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

# Exemple d'utilisation
input_exe = 'mon_application.exe'  # Chemin vers votre fichier .exe à crypter
output_exe = 'mon_application_encrypted.exe'  # Nom du fichier crypté

encrypt_exe(input_exe, output_exe)
Leave a Comment