Exercice : la protection des feuilles Excel®
Excel
utilise un système très simple pour protéger une feuille. Les
explications sont ici:
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.