import binascii

# Chemins des fichiers
input_file = "/var/www/html/modification_carto/ori"
output_file = "/var/www/html/modification_carto/ori_off"
mcuid_hex = "41848a850960a14682060010240d0500"

# Lire le fichier en mode binaire
with open(input_file, 'rb') as file:
    file_content = file.read()

# Convertir le contenu binaire en hexadécimal pour une meilleure lisibilité
hex_content = binascii.hexlify(file_content).decode('utf-8')

# Afficher les 1000 premiers caractères pour analyse initiale
print("First 1000 characters of the file in hex:")
print(hex_content[:1000])

# Définir le MCUID en octets
mcuid_bytes = bytes.fromhex(mcuid_hex)

# Fonction pour calculer les positions spécifiques par rapport au MCUID
def calculate_positions_from_mcuid(mcuid_bytes, data_length, step=100000):
    positions = []
    mcuid_length = len(mcuid_bytes)
    base_position = sum(mcuid_bytes)
    for i in range(mcuid_length):
        position = (base_position + i * step + mcuid_bytes[i % mcuid_length]) % data_length
        positions.append(position)
    return positions

data_length = len(file_content)

# Calculer toutes les positions spécifiques par rapport au MCUID
positions_from_mcuid = calculate_positions_from_mcuid(mcuid_bytes, data_length)

# Définir les octets de référence (les différences manuelles restantes)
manual_differences = {
    1372541: 0x00,
    1381566: 0x6D,
    1381567: 0x05,
    1381568: 0x41,
    1381569: 0x47,
    1381570: 0x00,
    1381571: 0x90,
    1386045: 0xF2,
    1386222: 0x00,
    1386223: 0x90,
    1395070: 0x65,
    1395071: 0x38,
    1395072: 0x42,
    1395073: 0x20,
    1395074: 0x37,
    1395075: 0x00,
    1399726: 0x05,
    1399727: 0x80,
    2073423: 0xA0,
    2073427: 0xAF,
    2073428: 0x58,
    2073433: 0xD0,
    2073434: 0x82,
    2073435: 0xFD,
    2073438: 0x36
}

# Convertir le contenu binaire en liste d'octets pour modification
byte_array = bytearray(file_content)

# Appliquer les transformations spécifiques
for pos, ref_value in manual_differences.items():
    byte_array[pos] = ref_value

# Écrire le fichier de sortie
with open(output_file, "wb") as file:
    file.write(byte_array)

print("Transformations spécifiques appliquées avec succès.")

# Vérifier les transformations restantes
remaining_differences = []
for pos in manual_differences:
    if byte_array[pos] != manual_differences[pos]:
        remaining_differences.append((pos, byte_array[pos], manual_differences[pos]))

print(f"Remaining differences after manual transformation: {remaining_differences}")
print(f"Total remaining differences: {len(remaining_differences)}")
