import binascii

# Chemins des fichiers
input_file = "/var/www/html/modification_carto/ori"
output_file = "/var/www/html/modification_carto/ori_off"
mcuid_hex = "4104058606609011820600102403ED00"

# 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
reference_bytes = {
    1386045: 0x00,
    1395070: 0x6D,
    1395071: 0x05,
    1395072: 0xE1,
    1395073: 0x2C,
    1395074: 0x00,
    1395075: 0x90,
    1399726: 0x00,
    1399727: 0x90,
    2073408: 0x85,
    2073409: 0xD2,
    2073410: 0x04,
    2073412: 0x7B,
    2073413: 0x40,
    2073414: 0xE8,
    2073415: 0xFF,
    2073416: 0x1B,
    2073417: 0x6F,
    2073418: 0x63,
    2073419: 0xF3,
    2073420: 0xC6,
    2073421: 0xF2,
    2073422: 0x7B,
    2073423: 0x70,
    2073425: 0xF6,
    2073426: 0x1B,
    2073427: 0x5F,
    2073428: 0x60,
    2073429: 0xF8,
    2073430: 0xC6,
    2073431: 0xF2,
    2073432: 0x7B,
    2073433: 0x30,
    2073434: 0xF1,
    2073435: 0xF8,
    2073436: 0x1B,
    2073437: 0x3F,
    2073438: 0x0E,
    2073439: 0xFD,
    2073440: 0xC6,
    2073441: 0xF2,
    2073443: 0x90,
    2073444: 0x23
}

# 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 reference_bytes.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.")
