๐ŸชขSPI

Serial Peripheral Interface

Description

Une liaison SPI est un bus de donnรฉes sรฉrie synchrone baptisรฉ ainsi par Motorola, au milieu des annรฉes 1980 qui opรจre en mode full-duplex. Les circuits communiquent selon un schรฉma maรฎtre-esclave, oรน le maรฎtre contrรดle la communication.

SPI utilise les quatre lignes suivantes pour communiquer (sans compter la terre):

  • CIPO (Controller In, Peripheral Out): Pour les messages envoyรฉs des pรฉriphรฉriques au contrรดleur.

  • COPI (Controller Out, Peripheral In): Pour les messages envoyรฉs du contrรดleur aux pรฉriphรฉriques.

  • SCK (Serial Clock): Pour un signal oscillant qui indique quand les appareils doivent lire les lignes de donnรฉes.

  • CS (Chip Select): Pour sรฉlectionner le pรฉriphรฉrique qui doit recevoir les donnรฉes.

SPI est plus simple et plus rapide que l'UART ce qui en fait une technologie plus utilisรฉ que l'UART dans le domaine de l'IoT.

Dumper l'EEPROM via SPI

Les puces de mรฉmoire flash contiennent souvent le micrologiciel de l'appareil et d'autres รฉlรฉments importants, ce qui en fait une cible idรฉal pour un pirate.

Identifier la puce et les pins

Les puces de mรฉmoire flash sont gรฉnรฉralement constituรฉs de 8 ou 16 pins, il est รฉgalement possible de retrouver ces informations via la datasheet du produit retrouvable sur le site du fabriquant ou sur le web. Une fois la puce identifiรฉe, on devrait รชtre capable de trouver le premier pin en se fiant au point se trouvant normalement sur l'un des coin de la puce.

Exemple ici en bas ร  gauche

Une fois les pins identifiรฉs, il est alors possible d'y brancher une pince SOIC 8 ou 16 pattes selon la puce.

Communication

Une fois le branchement effectuรฉ, on va ensuite utiliser un adaptateur USB to serial type Bus Pirate pour permettre de faire le lien entre l'EEPROM et notre PC.

On va ensuite utiliser l'utilitaire flashrom disponible nativement dans linux pour interagir avec la puce.

Dans un premier temps, on va vรฉrifier si l'appareil est connectรฉ avec la commande:

$ ls /dev/tty*

On va ensuite utiliser la commande $ flashrom -p buspirate_spi:dev=/dev/ttyUSBX avec X = numรฉro associรฉ ร  l'appareil connectรฉ.

Cette commande identifiera alors la puce SPI ou renverra No EEPROM/flash device found si il est incapable de l'identifier.

Lire le contenu de la puce

Pour lire le contenu de la puce, on va d'abord utiliser la commande:

$ flashrom -p buspirate_spi:dev=/dev/ttyUSBX -r out.bin

Puis afin d'obtenir un rรฉsultat lisible, on va utiliser le script spiflash.py de libmpsse.*

ressource: https://github.com/devttys0/libmpsse

Installation:

$ git clone https://github.com/devttys0/libmpsse
$ cd libmpsse
$ ./configure && make
$ make install

Utilisation:

$ spiflash.py -r out.bin -s $((<taille des donnรฉes ร  lire>))

Exemple pour 8MB:

$ spiflash.py -r out.bin -s $((0x800000))

Derniรจre mise ร  jour