Flasher manuellement l’EFI d’un MacBook Pro

Vous vous souvenez peut-être que j’ai un prototype de MacBook Pro 2011 dans ma collection. La machine utilise une version bêta d’une ROM et je pensais que cette ROM empêchait de démarrer un OS récent (au-delà de Snow Leopard). J’ai donc cherché un moyen de flasher la ROM avec une version plus récente.

Vous vous en doutez, les mises à jour officielles ne fonctionnent pas, sinon je n’écrirais pas un article sur le sujet. L’idée est donc de trouver un moyen de remplacer le contenu de la ROM du MacBook Pro sans passer par les outils officiels. Pour commencer, j’ai essayé de trouver un moyen de forcer logiciellement le flash, sans succès. Je suis donc passé à la vitesse supérieure : flasher manuellement.

La méthode est un peu violente (elle est expliquée là) : elle consiste à aller flasher manuellement la puce qui contient la ROM. Le matériel nécessaire est simple : un BusPirate (une petite carte dédiée au développement), une pince ou des connecteurs de la taille de la puce du Mac, un breadboard (ou de quoi relier quelques fils) et c’est tout. Il suffit d’ouvrir le Mac, placer la pince sur la puce et passer à la partie logicielle.

Pince et BusPirate

Pince et BusPirate


La pince

La pince

La partie principale est plus compliquée. D’abord, il faut câbler correctement le BusPirate, en allant vérifier les datasheets de la puce qui contient la ROM (il faut l’identifier, mais les forums vous aideront). Le câblage en lui-même est simple quand on a les bonnes valeurs. Si quelqu’un essaye, je peux toujours fournir les informations dans mon cas précis, mais ça n’a pas grand intérêt. Ensuite, on relie le BusPirate à un ordinateur (dans mon cas, j’ai du passer par Windows) et on essaye de lire la ROM, plusieurs fois. L’idée est de vérifier que le système lit correctement, sans erreurs.

flashrom -p buspirate_spi:dev=COM3,spispeed=2M -c MX25L6405(D) -r nomdelarom

Sur ma machine, c’est cette puce (MX25…) qui est utilisée, mais ça peut varier. La lecture prend beaucoup de temps (un peu moins d’une heure) et j’ai effectué trois lectures, ensuite validée avec un hash MD5. Si jamais les trois lectures ne donnent pas le même résultat, il y a un souci.

La seconde étape consiste à remplacer la ROM par une nouvelle. L’écriture ne va pas poser de soucis, mais il faut évidemment une ROM. Récupérer celle fournie dans les mises à jour d’Apple ne fonctionne pas : il y a des changements au moment du flash, il y a donc deux solutions : soit lire la ROM d’une machine classique (la même), soit chercher sur Internet quelqu’un qui propose la bonne ROM en téléchargement. Attention à un point, la ROM contient le numéro de série, qu’il faut donc modifier en fonction de votre machine : sans cette étape, votre Mac flashé aura le même numéro de série que celui qui a fourni la ROM, ce qui peut poser des soucis, notamment avec iCloud. Une fois la ROM obtenue, l’écriture demande une seule commande (et du temps).

flashrom -p buspirate_spi:dev=COM3,spispeed=2M -c MX25L6405(D) -w nomdelarom

Dans l’absolu, une fois que c’est fait (c’est lent), il faut relire le contenu et vérifier qu’il correspond, avant d’essayer de rallumer la machine.

Si tout se passe bien, la machine va démarrer. Dans mon cas, c’est tout de même un échec : la machine bloque toujours avec un OS moderne, soit parce qu’elle diffère de la machine classique soit parce que la SMC pose des soucis, et je n’ai pas trouvé de moyens de modifier cette dernière. A noter que le changement de ROM permet aussi de faire sauter un mot de passe sur l’EFI, étant donné qu’il est stocké dans la ROM, et que certains ne se privent pas pour monnayer la manipulation.