Plateforme ESP32 open-source

Un firmware. N'importe quelle capacité.

Une plateforme ESP32 modulaire. Le firmware part quasi vide ; tu pousses les capacités en modules signés à l'exécution, chiffrés par défaut. Domotique, un labo vite fait, un réseau décentralisé, une op red team. Même moteur, modules différents.

leHACK 2025

Comment Espilon est né

Notre talk à leHACK 2025, où le projet a été présenté pour la première fois.

Voir sur YouTube →

Un firmware, n'importe quelle capacité. L'appareil n'embarque qu'un loader, un cœur crypto et un transport. Tout le reste, un driver de capteur, un nœud de réseau, un module de recon, arrive en module signé, relocalisé en IRAM à l'exécution, chiffré en transit, et effacé au déchargement. Pas de reflash. Pas de clair. Pas de monolithe.

Architecture

Trois repos indépendants, une seule chaîne de confiance.

Tu pilotes tout depuis C3PO, un serveur Python Qt6. Il parle au firmware via un canal ChaCha20-Poly1305 transportant des messages protobuf. Le firmware vérifie et charge les modules en IRAM, les exécute sous un watchdog par module, et les efface une fois terminés.

Depuis C3PO, tu ouvres une session chiffrée vers un appareil, tu pousses un module signé, et il tourne sous son propre watchdog. Charger un capteur de température ou un nœud mesh, c'est exactement le même flux que charger n'importe quoi d'autre. Le firmware n'a jamais eu besoin de le savoir à l'avance.

C3PO
Serveur opérateur Python · Qt app
TCP · ChaCha20-Poly1305 · protobuf
Firmware
ESP32 · loader + crypto + transport seulement
ELF .o signé → IRAM
Modules
Chargés à l'exécution · effacés au déchargement

Les trois composants

Chacun son repo, chacun son rôle.

Firmware v0.2.0 · bientôt

La cible ESP32. Vide par conception.

  • N'embarque qu'un loader, un cœur crypto et un transport
  • Les capacités arrivent en modules, relocalisés en IRAM
  • Transport chiffré, jamais de clair sur le fil
  • Construit sur ESP-IDF / FreeRTOS, en C
  • Connectivité GPRS pour les déploiements terrain
  • Embarque ESPM comme composant synchronisé

ESPM v0.2.0 · bientôt

Le moteur de modules. Un composant ESP-IDF, autonome.

  • Relocateur ELF 32 bits : Xtensa et RISC-V
  • Vérification de signature HMAC-SHA256 avant tout chargement
  • Table syscall d'environ 90 fonctions, la seule API que voit un module
  • Watchdog par module : un module qui se fige est tué
  • Gestionnaire de panic conscient des modules
  • Persistance NVS pour l'autoload au démarrage

C3PO v0.2.0 · bientôt

Le serveur opérateur. Là où tu bosses vraiment.

  • Application de bureau Python Qt6
  • ChaCha20-Poly1305 sur TCP
  • Messages encadrés en protobuf
  • Signe et envoie les modules vers les appareils
  • Keystore par appareil, déclencheur OTA
  • Compilateur et injecteur de modules
Cas d'usage

Même moteur, plein de métiers

Ça a commencé comme un outil de red team. Le design modulaire s'est révélé bon à bien plus que l'offensif.

Domotique

Domotique

Pilote capteurs et actionneurs, un module par appareil, automatise les corvées. Ton hardware, tes règles. Sans compte cloud obligatoire.

Labo

Labo en kit

Monte un banc de test hardware en quelques minutes. Change de comportement en chargeant un module, sans reflasher à chaque essai.

Crypto

Comms chiffrées

Chaque lien est en ChaCha20-Poly1305 par défaut et les modules sont signés avant de s'exécuter. Jamais de clair sur le fil.

Mesh

Réseaux décentralisés

Construis des réseaux d'appareils qui ne dépendent du cloud de personne. Les nœuds se parlent entre eux ; la topologie, c'est toi qui la dessines.

Terrain

Déploiement terrain

Connectivité GPRS et modules over-the-air pour des nœuds loin de ton bureau. Pose-les et mets-les à jour à distance.

Red team

Offensif

Oui. Des modules offensifs aussi : Wi-Fi, recon, un C2 chiffré. C'est par là que le projet a commencé. Aujourd'hui c'est une capacité parmi d'autres.

Par où commencer

Documentation, code source et communauté. Tout ce qu'il faut pour builder avec le framework.