Ce post est une première analyse des AirPods d’Apple.

AirPods

Les AirPods sont les écouteurs sans fil conçus par Apple. Ils ont été introduit avec l’iPhone 7, premier iPhone à ne plus fournir la prise mini-jack 3,5mm

Actuellement, il y a 3 générations différentes de AirPods : 1, 2 et Pro. Ce post sera dédié à la version Pro, car c’est la génération la plus récente. Mais il y aura quelques comparaisons avec les autres versions.

Hardware

Comme pour chaque appareil Apple, iFixit fourni une vue éclatée et détaillée des AirPods.

La carte mère des AirPods Pro contient quatre puces réparties sur le recto et le verso :

  • L476MGY6 A5 : ARM STM32L476MGY6 (Cortex M4).
  • Broadcom 59356A2KUBG : le module de chargement sans fil
  • TI 97A4PQ1
  • NXP 610A3B KN3308 : la puce de gestion de l’alimentation.

La fiche technique du processeur est accessible publiquement.

UART

Avec un câble Lightning DCSD, il est possible d’obtenir une sortie série sur la boite des AirPods 1 et 2. Avec un baudrate à 230400.

En regardant dans le firmware de la case, dont on parlera plus bas, on peut identifier certaines commandes. Comme les informations sur la batterie, les écouteurs et la case.

Dennis m’a fait remarquer que pour envoyer les commandes, il était nécessaire de les mettre entre crochets.

On remarquera que la commande [sr]nous affiche quelques informations sur la boite, notamment l’identifiant de la carte mère : B235 . De plus on voit qu’il y a un firmware de type EVT (Engineering Validation Test). Normalement cela correspond aux prototypes d’usine avant la mise en production.

Il y a un mode DFU (Device Firmware Upgrade) qui permet de mettre à jour le firmware des AirPods et de la boite.

Firmware

Contrairement à l’iPhone et à l’iPad, les firmwares des accessoires Apple ne sont pas directement accessibles sur le site d’Apple. Néanmoins, ils sont référencés sur The iPhone Wiki, dans la section OTA Updates.

Les fichiers de mise à jour OTA sont des fichiers ZIP, la structure des dossiers sera la généralement la même.

├── AppleInternal
│   └── Assets
├── AssetData
│   └── Firmware.acsw
│       ├── amai
│       │   ├── apimg4ticket.der
│       │   └── receipt.plist
│       ├── BuildManifest.plist
│       ├── ftab.bin
│       ├── Info.plist
│       ├── Restore.plist
│       ├── usr
│       │   └── local
│       │       └── standalone
│       │           └── firmware
│       └── version.plist
├── Info.plist
├── META-INF
│   └── com.apple.ZipMetadata.plist
└── version.plist

Ce qui nous intéresse est dans le répertoire AssetData. Il contient le binaire et les fichiers plist permettant la mise à jour de l’appareil.

apimg4ticket.der

Dans le répertoire AssetData/Firmware.acsw/amai on peut voir le fichier apimg4ticket.der, c’est un fichier fichier de certificat encodé au format DER. On peut le parcourir avec openssl :

λ ~ » openssl asn1parse -inform der -in  apimg4ticket.der
0:d=0  hl=4 l=3002 cons: SEQUENCE          
4:d=1  hl=2 l=   4 prim: IA5STRING         :IM4M
10:d=1  hl=2 l=   1 prim: INTEGER           :00
13:d=1  hl=4 l=1166 cons: SET               
17:d=2  hl=9 l=1157 cons: priv [ 1296125506 ] 
..
1617:d=6  hl=2 l=  37 cons: SEQUENCE          
1619:d=7  hl=2 l=   3 prim: OBJECT            :commonName
1624:d=7  hl=2 l=  30 prim: UTF8STRING        :Apple Secure Boot Root CA - G3
1656:d=5  hl=2 l=  19 cons: SET               
1658:d=6  hl=2 l=  17 cons: SEQUENCE          
1660:d=7  hl=2 l=   3 prim: OBJECT            :organizationName
1665:d=7  hl=2 l=  10 prim: UTF8STRING        :Apple Inc.
1677:d=5  hl=2 l=  11 cons: SET  
..
2319:d=6  hl=2 l=  14 cons: SEQUENCE          
2321:d=7  hl=2 l=   3 prim: OBJECT            :X509v3 Key Usage
2326:d=7  hl=2 l=   1 prim: BOOLEAN           :255
2329:d=7  hl=2 l=   4 prim: OCTET STRING      [HEX DUMP]:03020780
2335:d=6  hl=4 l= 263 cons: SEQUENCE          
2339:d=7  hl=2 l=  10 prim: OBJECT            :1.2.840.113635.100.6.1.15

ftab.bin

Le fichier ftab.bin est un fichier binaire pour architecture ARMv7e . La première chose que j’ai faite était de lancer binwalk pour analyser le fichier. Malheureusement ça n’a rien donné de concret.

En l’ouvrant dans un éditeur hexadécimal, on peut voir que ce binaire, contient plusieurs images. L’image ci-dessous correspond à l’index avec le nom, l’adresse et la taille chaque image.

On peut récupérer les informations suivantes:

  • en rouge l’offset qui contient le début de l’image
  • en vert, la taille de l’image.

Tout ceci avec un encodage little endian.

Avec l’utilitaire dd on peut extraire l’image en précisant les adresses en décimal:

λ ~ » dd if=ftab.bin of=rkos skip=768 count=947680 bs=1
947680+0 records in
947680+0 records out
947680 bytes (948 kB, 925 KiB) copied, 1.36564 s, 694 kB/s

Ca fonctionne bien si on veut extraire une seule partie du fichier. Mais j’ai compté 45 images embarquées ainsi qu’un certificat encodé au format DER. Un script python sera plus rapide pour les extraire.

Après les avoir extrait, voici la liste des fichiers et leur type :

La plupart sont des fichiers de données raw. J’ai pu en identifier certains :

  • rkos RTKit Operating System, utilisé comme base sur certains cores de l’iPhone 11 Pro. Il est probablement chargé par la BootROM du SoC.
  • aopf Always-On Processor Firmware.
  • case firmware du boitier des AirPods.
  • ls00 à ls09 des fichiers au format wave. Ils correspondent aux sons qu’émettent les AirPods, par exemple lorsqu’on les met à l’oreille, qu’on active Siri, ou encore lorsqu’ils n’ont plus de batterie.
  • lpda contient les hashes (sha384) des fichiers qui commencent par L (LahX, LanX, LaoX, etc…).
  • bver contient des informations sur la version du firmware ftab.bin.
  • ticket certificat DER.

Je pense les fichiers LahX, LanX, LaoX, etc… d’être des images qui sont affichées lorsque des AirPods sont à proximité, car je n’ai pas trouvé ces fichiers sur l’iPhone.


Donc voila ! C’était une première analyse sur la partie bas niveau des AirPods, il y a énormément d’autres sujets à aborder sur ce produit, notamment comment communiquer directement avec les écouteurs. Ainsi que la fonction de “pairing” grâce au Magic Pairing Manager et sa technologie de Proximity Pairing.

Je vous invite aussi à lire cet article sur le fiasco des mises à jour des AirPods Pro. C’est ça qui m’a donné envie de jeter un œil au produit.

Merci à tous ceux qui ont répondu à mon tweet pour apporter un maximum d’informations sur ce produit encore mystérieux.


Sources :