Comment débloquer un Mac bloqué par iCloud

Aujourd’hui, un sujet que j’ai un peu hésité à faire : comment faire passer outre un code iCloud sur un Mac. J’ai bien conscience que c’est utilisable pour débloquer un Mac volé, mais en même temps il est intéressant de voir que ça reste assez trivial dans certains cas. En clair, si vous avez des données importantes, ne considérez pas que « Localiser mon Mac » est une protection, ça va dans le meilleur des cas ralentir une personne motivée.
find_icon

On va commencer par ce qui se passe réellement quand on bloque un Mac. Il y a en effet plusieurs possibilités, qui dépendent de la façon dont vous avez protégé votre Mac. Si vous avez activé FileVault 2, ce que je vous conseille de faire si vous avez des données importantes, certaines choses sont différentes et les données sont protégées.

Quand vous allez bloquer le Mac, iCloud va vous demander un code de verrouillage, soit à quatre chiffre soit à six chiffres. J’ai essayé de trouver une logique dans le choix de la longueur du code, mais sans succès. J’ai lu que le code a six chiffres était proposé quand on verrouille depuis un Mac et le code à quatre chiffres quand on verrouille depuis un appareil iOS, mais dans mon cas j’ai certains appareils qui demandent toujours un code à six chiffres et dans d’autres cas un code à quatre chiffres. La longueur est importante : un code à quatre chiffres peut être passé en quelques dizaines d’heures, un code à six chiffres demande beaucoup plus de temps.

4 chiffres seulement

4 chiffres seulement

Un Mac bloqué va démarrer sur la partition de restauration et demander le code. Vous avez 8 essais avant que le Mac soit bloqué pendant une minute. Ensuite, après un autre code faux, le Mac est bloqué pendant cinq minute, puis — si vous faites encore une erreur — il reste bloqué pendant quinze minutes avant que la boucle recommence. Dans le meilleur des cas, on peut donc tester environ 30 codes par heure, ce qui est bien trop faible pour tester toutes les possibilités. Une astuce existe pour améliorer les statistiques : redémarrez le Mac après les 8 premiers essais, ce qui remet le code à zéro. En comptant deux bonnes minutes de redémarrage à chaque fois, on descend à environ 190 codes par heures, ce qui est déjà nettement plus efficace.

Maintenant, il y a un point intéressant : quand on bloque un Mac avec iCloud et qu’il n’avait pas de mot de passe EFI, le code iCloud est utilisé comme mot de passe EFI. C’est intéressant, car l’EFI n’impose pas de limites dans les essais : on peut tenter toutes les possibilités séquentiellement. Dans le meilleur des cas, on peut tester un code en environ 10 secondes, soit 360 par heures, en pratique les tests que j’ai effectué sont plus proches de 18 secondes par codes (~200 par heures).

C’est une solution efficace, mais pas dans tous les cas : il faut supposer que la personne n’avait pas mis de mot de passe EFI. Si c’était le cas, c’est son mot de passe qui est de la partie, et il n’est donc pas identique au mot de passe iCloud.

Ce que je vais présenter est donc efficace sur les machines bloquées avec un code à quatre chiffres et sans mot de passe EFI au départ.

Petit aparté : si la machine est un peu ancienne et que le but n’est pas de récupérer les données (qui sont pas ailleurs peut-être effacées), il y a une solution efficace : effacer le mot de passe EFI et réinstaller la machine. Sur les modèles sortis en 2009 et avant, il suffit de modifier la quantité de mémoire vive pour effacer la PRAM, et le mot de passe EFI est stocké dans cette dernière. En clair (sauf dans les MacBook Air), il suffit d’enlever une barrette de RAM, de démarrer et de réinstaller Mac OS X. Sur les Mac à partir de 2010, le mot de passe EFI est stocké dans une mémoire non volatile et c’est donc nettement moins trivial de le faire sauter (mais c’est possible, j’y reviendrais un jour).

L’idée est simple : on va tester toutes les possibilités (il n’y en a « que » 10 000) pour trouver le code et débloquer la machine. Bien évidemment, je ne vais pas vous dire de taper tous les codes, on va automatiser la chose et il faut un peu de matériel. Le plus simple est d’utiliser un Teensy 3.0, une petite carte de développement qui est capable d’émuler un clavier et une souris. Je l’ai déjà utilisée dans un autre projet, et elle vaut une petite vingtaine de dollars. Pour éviter de rester devant votre Mac, il faut aussi un autre ordinateur avec un webcam et une horloge (ou n’importe quel truc qui affiche l’heure).

Le Teensy

Le Teensy

Soyons clair, je n’ai rien inventé : j’ai utilisé le code qui est là avec quelques modifications pour tester sur un Mac en AZERTY (parce qu’il diffère un peu sur la gestion des chiffres).

Une fois le Teensy programmé avec le code, c’est assez simple : vous démarrez le Mac en pressant option (alt) pour arriver sur l’EFI, vous fixez la webcam vers ce dernier avec l’heure bien visible et vous enregistrez. Ensuite vous branchez le Teensy, qui va commencer à tester tous les codes. Là, vous attendez, ça peut prendre beaucoup de temps (une cinquantaine d’heures si vous n’avez pas de chances).

La webcam est là pour vous empêcher de rester devant le Mac et pour estimer le code. Le fonctionnement est simple : quand le bon code est trouvé, le Mac va passer sur l’interface iCloud, il faut donc estimer quel code était tapé au moment de la découverte du code EFI. L’horloge et la webcam servent à ça : vous pouvez savoir à quelle heure le Mac a redémarré. Une fois que c’est fait, vous pouvez calculer à peu près le code : si le Mac a tourné 2 heures 35 minutes, vous devez convertir le tout en secondes (9 300 ici) et utiliser la table proposée sur le site du concepteur du logiciel. En gros, un code prend entre 18,7 secondes et 19,7 secondes à être tapé, donc il est compris dans l’exemple entre 472 et 497. Il suffit ensuite de tester manuellement les codes pour trouver le bon.

Une fois le code EFI trouvé, la première chose à faire est de démarrer sur la partition de restauration, de supprimer le code EFI et ensuite de vider la PRAM. Puis vous pouvez réinstaller la machine (ou démarrer directement dessus en utilisant le code).

Truc à savoir, si le mot de passe EFI n’est pas le même que le code iCloud, il existe une solution intéressante : iCloudHacker. Je n’ai pas testé, mais l’idée est de tester des codes et de redémarrer la machine automatiquement après quelques essais en émulant une souris. C’est efficace sur les portables, mais il faut une version différente par taille d’écran et c’est un peu plus lent que tester l’EFI. On peut aussi attaquer directement le code iCloud en prenant en compte les temps d’attente, mais c’est très lent, comptez une vingtaine de jours dans le pire des cas. Enfin, même si je n’ai pas trouvé de solution qui en tire parti, il faut prendre en compte le facteur humain : quand on demande de taper un code à quatre chiffres, certains reviennent plus que d’autres. Il doit être possible de trouver le code iCloud bien plus vite (statistiquement) en utilisant des combinaisons connues avant de tout tester de façon séquentielle.

A noter que j’ai vu des gens vendre des Teensy avec un afficheur LCD qui montre le code courant, ce qui simplifie les choses avec une webcam, et même avec la possibilité de détecter le changement d’image sur l’écran et donc le fait que le code est le bon.