# Chemins des fichiers
file_paths = {
    "input_file": "/var/www/html/modification_carto/golf pcr fls full read boot foxfls.unknown"
}

# Lire le contenu du fichier d'entrée
with open(file_paths["input_file"], "rb") as file:
    original_bytes = list(file.read())

# Positions et octets de référence pour les transformations génériques
reference_bytes = [
    0x00, 0x6d, 0x05, 0xe1, 0x2c, 0x00, 0x90, 0x00, 0x90, 0x85, 0xd2, 0x04, 0x7b,
    0x40, 0xe8, 0xff, 0x1b, 0x6f, 0x63, 0xf3, 0xc6, 0xf2, 0x7b, 0x70, 0xf6, 0x1b,
    0x5f, 0x60, 0xf8, 0xc6, 0xf2, 0x7b, 0x30, 0xf1, 0xf8, 0x1b, 0x3f, 0x0e, 0xfd,
    0xc6, 0xf2, 0x90, 0x23
]

relevant_positions = [
    1386045, 1395070, 1395071, 1395072, 1395073, 1395074, 1395075,
    1399726, 1399727, 2073408, 2073409, 2073410, 2073412, 2073413,
    2073414, 2073415, 2073416, 2073417, 2073418, 2073419, 2073420,
    2073421, 2073422, 2073423, 2073425, 2073426, 2073427, 2073428,
    2073429, 2073430, 2073431, 2073432, 2073433, 2073434, 2073435,
    2073436, 2073437, 2073438, 2073439, 2073440, 2073441, 2073443,
    2073444
]

# Fonction pour déduire le MCUID
def deduce_mcuid(original_bytes, reference_bytes, relevant_positions):
    possible_mcuid_bytes = []
    
    for i, pos in enumerate(relevant_positions[:16]):  # Limiter à 16 octets pour le MCUID
        original_byte = original_bytes[pos]
        reference_byte = reference_bytes[i]
        
        # Tenter différentes opérations inverses pour déduire le MCUID
        transformations = [
            (reference_byte - original_byte) % 256,
            (reference_byte ^ original_byte) % 256,
            ((original_byte - reference_byte) % 256),
            ((2 * reference_byte - original_byte) % 256),
            ((original_byte - 2 * reference_byte) % 256)
        ]
        
        # Ajouter toutes les transformations possibles pour l'analyse
        possible_mcuid_bytes.append(transformations)
    
    # Trouver la transformation la plus cohérente pour tous les octets
    mcuid_bytes = []
    for i in range(16):
        byte_counts = {}
        for transformation in possible_mcuid_bytes:
            byte = transformation[i % len(transformation)]
            if byte in byte_counts:
                byte_counts[byte] += 1
            else:
                byte_counts[byte] = 1
        # Choisir l'octet le plus fréquent
        mcuid_bytes.append(max(byte_counts, key=byte_counts.get))
    
    return mcuid_bytes

# Dédure le MCUID
deduced_mcuid_bytes = deduce_mcuid(original_bytes, reference_bytes, relevant_positions)
deduced_mcuid_hex = ''.join(format(x, '02x') for x in deduced_mcuid_bytes)

print("MCUID déduit:", deduced_mcuid_hex)
