> For the complete documentation index, see [llms.txt](https://blog.s1rn3tz.ovh/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://blog.s1rn3tz.ovh/pentest-physique/hardware-hacking/spi.md).

# SPI

## 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.

{% hint style="info" %}
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.
{% endhint %}

## 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.

&#x20;

<figure><img src="/files/4NRQgtY1xk9APUBWkd2k" alt=""><figcaption><p>Exemple ici en bas à gauche</p></figcaption></figure>

Une fois les pins identifiés, il est alors possible d'y brancher une [pince SOIC](/pentest-physique/equipements.md#pince-soic-8-et-16-pattes) 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](/pentest-physique/equipements.md#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:

<pre><code><strong>$ git clone https://github.com/devttys0/libmpsse
</strong>$ cd libmpsse
$ ./configure &#x26;&#x26; make
$ make install
</code></pre>

Utilisation:

*`$ spiflash.py -r out.bin -s $((<taille des données à lire>))`*

Exemple pour 8MB:

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


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://blog.s1rn3tz.ovh/pentest-physique/hardware-hacking/spi.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
