Exercice : la protection des feuilles Excel®




Excel utilise un système très simple pour protéger une feuille. Les explications sont ici:


encrypt.html



On le trouve dans le menu Outils → Protection → Protéger feuille.

Le mot de passe est haché par un algorithme simple, et le hachage est enregistré dans le fichier. Si le mot de passe est p1p2…pk, le hachage H est calculé comme suit :


    • H = (p1 <<15 1) ⊕ (p2 <<15 2) ⊕ (p3 <<15 3) ⊕ … (pk <<15 k) ⊕ k ⊕ 0xCE4B.
    • H est un mot de 16 bits (2 octets) et il est enregistré dans le fichier.
    • Pour déprotéger la feuille, Excel demande un mot de passe, calcule son hachage et vérifie qu'il est égal à celui enregistré.

On note
a <<15 b le décalage (avec rotation) du code ascii du caractère ‘a’ sur la gauche ‘b’ fois, utilisant seulement les 15 bits de poids faible et replaçant les bits restants (au delà de 15) à droite.


Exemple : ‘a’ = 0x61; ‘a’ <<15 10 = 0x2803.


Exemple : le mot de passe “test” de 4 caractères donne 0xCBEB.

Exemple : le mot de passe est 'abcdefghij' :


    •    a -> 0x61 << 1 == 0x00C2
    •    b -> 0x62 << 2 == 0x0188
    •    c -> 0x63 << 3 == 0x0318
    •    d -> 0x64 << 4 == 0x0640
    •    e -> 0x65 << 5 == 0x0CA0
    •    f -> 0x66 << 6 == 0x1980
    •    g -> 0x67 << 7 == 0x3380
    •    h -> 0x68 << 8 == 0x6800
    •    i -> 0x69 << 9 == 0x5201 (avant rotation : 0xD200)
    •    j -> 0x6A << 10 == 0x2803 (avant rotation : 0x1A800)
    

H = 0x00C2 ⊕ 0x0188 ⊕ 0x0318 ⊕ 0x0640 ⊕ 0x0CA0 ⊕ 0x1980 ⊕ 0x3380 ⊕
    0x6800 ⊕ 0x5201 ⊕ 0x2803 ⊕ 0x000A ⊕ 0xCE4B = 0xFEF1.


    1. Protéger une feuille Excel avec le mot de passe ‘test’. Quelle est la valeur du hash H?
    2. En utilisant un éditeur hexadécimal (comme ghex2, ou Hex Edit: http://www.expertcomsoft.com/) pour ouvrir votre fichier Excel :
        
              a. Repérer l'emplacement des 2 octets du mot de passe haché. Indication :
                  il existe deux formats, Little-Endian et Big-Endian (http://www.webopedia.com/TERM/b/big_endian.html). Lequel est utilisé par Excel ?
                  
              b. Comment retrouver le hash automatiquement dans un fichier Excel quelconque ? (indication : regarder les caractères précédant et suivant le hash).
                  
3. Trouver deux mots de passe différents de 'test' qui permettent de déprotéger la feuille.

4. Que pensez-vous de ce système de protection ?

5. Écrire un programme permettant de déprotéger toutes les feuilles d'un fichier Excel.