Casser un fichier Office ou PDF protégé par mot de passe avec hashcat
Extrayez le hash d'un Word, Excel ou PDF chiffré avec office2john / pdf2john, puis choisissez le bon mode hashcat — de 9400 à 10700 — pour retrouver le mot de passe.
Un .docx verrouillé par « Restreindre la modification » et un PDF qui exige un mot de passe avant même qu'Acrobat ne l'ouvre ressemblent à deux problèmes différents. En dessous, c'est le même problème : une clé de chiffrement dérivée d'un mot de passe, via une fonction de dérivation qu'il faut recalculer à chaque essai. Extrayez le bon hash, choisissez le bon mode hashcat, et les deux tombent avec le même flux wordlist-et-règles que vous utilisez déjà ailleurs.
Étape une : sortir le hash du fichier
Ni hashcat ni John the Ripper ne lisent directement un .docx, un .xlsx ou un .pdf. Il faut d'abord extraire les paramètres de chiffrement avec le script *2john correspondant, fourni par la distribution jumbo de John the Ripper (dans son dossier run/) :
python3 office2john.py protege.docx > office.hash
python3 pdf2john.py protege.pdf > pdf.hash
Les deux impriment une ligne nom:hash. Retirez le préfixe du nom de fichier avant de la passer à hashcat — John, lui, accepte la ligne telle quelle :
cut -d: -f2- office.hash > office_hashcat.txt
Choisir le mode Office
Les hash Office s'auto-décrivent : la chaîne commence par $office$*2007*, $office$*2010* ou $office$*2013*, inutile de deviner :
| Version Office | Préfixe du hash | Mode hashcat | Dérivation |
|---|---|---|---|
| 2007 | $office$*2007* | -m 9400 | SHA-1, 50 000 itérations |
| 2010 | $office$*2010* | -m 9500 | SHA-1, 100 000 itérations |
| 2013 / 2016 / 2019 / 365 | $office$*2013* | -m 9600 | SHA-512, 100 000 itérations |
hashcat -m 9600 office_hashcat.txt rockyou.txt -r /usr/share/hashcat/rules/best64.rule
John détecte automatiquement les trois sous un seul format :
john --format=office office.hash --wordlist=rockyou.txt
2013 est la version pour laquelle il faut prévoir du temps. Office est passé de SHA-1 à SHA-512 en gardant les 100 000 itérations, ce qui atterrit quelque part dans les centaines de milliers d'essais par seconde sur un bon GPU — un terrain proche de bcrypt, très loin des milliards par seconde du NTLM brut.
Choisir le mode PDF
Le chiffrement PDF a évolué différemment selon les versions d'Acrobat, et hashcat le répartit sur plusieurs modes. Les deux extrémités de la plage sont couvertes sur ce site :
| Révision PDF | Mode hashcat | Remarques |
|---|---|---|
| 1.1–1.3 (Acrobat 2–4) | -m 10400 | RC4 40 ou 128 bits, pas de KDF par essai — rapide |
| 1.4–1.6 (Acrobat 5–8) | -m 10500 | RC4 ou AES-128, un seul tour de MD5 |
| 1.7 Level 3 (Acrobat 9) | -m 10600 | AES-128, SHA-256 |
| 1.7 Level 8 (Acrobat 10–11) | -m 10700 | AES-256, SHA-256 x 64 tours — le lent |
pdf2john.py inscrit la révision directement dans la chaîne $pdf$, donc vous lisez le mode sur le hash plutôt que de le deviner à partir du fichier :
hashcat -m 10700 pdf_hashcat.txt rockyou.txt -r /usr/share/hashcat/rules/best64.rule
John, là encore, couvre toute la famille sous un seul format :
john --format=pdf pdf.hash --wordlist=rockyou.txt
Un vieux PDF (10400) se casse quasiment à la vitesse d'un hash brut. Un PDF AES-256 moderne (10700) est volontairement lent, le même compromis de conception que sha512crypt ou DCC2 : le nombre d'itérations existe précisément pour rendre la force brute coûteuse, donc une liste ciblée rapporte bien plus ici qu'une attaque par masque à l'aveugle. Si vous n'avez pas lu choisir sa wordlist et ses règles, commencez par là avant de brûler des heures sur la mauvaise liste.
Le piège du PDF : deux mots de passe, un seul fichier
Un PDF peut porter un mot de passe utilisateur (requis pour ouvrir le document) et un mot de passe propriétaire (requis pour changer les permissions comme l'impression ou la copie), indépendamment l'un de l'autre. Beaucoup de PDF « protégés » ne définissent qu'un mot de passe propriétaire et laissent le mot de passe utilisateur vide, ce qui veut dire que le fichier s'ouvre sans aucune invite même si pdf2john.py en extrait joyeusement un hash et que hashcat le casse tout aussi joyeusement. Avant de dépenser du temps de GPU, essayez simplement d'ouvrir le fichier avec un mot de passe vide. S'il s'ouvre, le vrai « cassage » dont vous avez besoin consiste à retirer les restrictions du mot de passe propriétaire, ce que la plupart des outils PDF font dès que vous fournissez le mot de passe utilisateur vide — sans cassage nécessaire.
Quand ça ne vaut pas le temps de GPU
Si identifier le hash vous indique qu'il s'agit d'Office 2013 ou de PDF 10700 protégeant un document sans autre piste, traitez-le comme un sha512crypt robuste : une liste courte et ciblée bat une liste générique longue, et une attaque par masque exhaustive au-delà de six ou sept caractères n'est pas réaliste sur du matériel grand public. Réglez d'abord la question de la provenance — voir trouver le bon mode hashcat si la chaîne extraite ne correspond pas clairement à l'un des tableaux ci-dessus — puis consacrez votre temps à la wordlist, pas à l'espace des clés.