Conférence · Sécurité & IATalk · Security & AI

« Est-ce que ça,
ça se pirate ? »

“Can this
be hacked?”

Une histoire vraie, un gadget à 30 €, une IA — et tout ce qui nous entoure.

A true story, a €30 gadget, an AI — and everything around us.

wanoo
Bruce / Flipper · reverse engineering
Le pitchThe pitch
Hacker, c'est comprendre.
Comprendre, c'est améliorer.
Sans limite.
Hacking is understanding.
Understanding is improving.
No limits.
L'histoire vraieA true story
« Hé… ce truc,
y a moyen de le hacker ? Easy ? »
“Hey… this thing,
can it be hacked? Easy?”

Un copain me fait découvrir son hobby : le ball-trap.

A buddy shows me his hobby: clay-pigeon shooting.

Le principe : une carte RFID qu'on scanne sur la télécommande → un jeton débloque 27 plateaux.

How it works: an RFID card scanned on the remote → a token unlocks 27 clays.

Cours de hack · 1Hacking 101 · 1

Par où entrer ? Le point de moindre résistance.

Where to get in? The path of least resistance.

La radioThe radio
la télécommande · sub-GHz ?the remote · sub-GHz?
La carteThe card
le déverrouillage · 13,56 MHzthe unlock · 13.56 MHz

resistance is futile — on attaque le maillon faible d'abord.hit the weakest link first.

Cas radio · la cibleRadio case · the target

Le ball-trap

The clay-trap

Contrôle motoriséMotorised control
Doc produit ouiProduct docs: yes
Doc technique : zéroTechnical docs: zero
Illustration : une télécommande radio générique
illustration · la vraie a 8 boutons machine (A→H), un canal réglé par +/− et M/Aillustration · the real one has 8 machine buttons (A→H), channel set via +/− and M/A

C'est sans fil… mais quelle radio ?It's wireless… but which radio?

B.A.-BA radio · quelle fréquence ?Radio basics · which frequency?

Sans fil, oui. Mais quelle radio ?

Wireless, sure. But which radio?

WiFi 2,4 GHz ?WiFi 2.4 GHz? BLE ? SubGHz : 315 · 433 · 868 MHz ?
antenne « quart d'onde » → longueur = λ/4 · donc λ = 4 × 17,25 cm = 0,69 m · les ondes : c = 300 000 km/s · f = c/λ = ≈ 433,92 MHz
quarter-wave antenna → length = λ/4 · so λ = 4 × 17.25 cm = 0.69 m · waves: c = 300,000 km/s · f = c/λ = ≈ 433.92 MHz
notice du récepteur · section « antenne » (reformulée)receiver manual · “antenna” section (paraphrased) Placer l'antenne en hauteur, jamais au fond d'une fosse. C'est un câble blindé 50 Ω, dénudé sur 20 cm au bout ; la partie blindée doit mesurer un multiple de 17,25 cm. Mount the antenna high, never at the bottom of a pit. It is a 50 Ω shielded cable, stripped for 20 cm at the end; the shielded part must be a multiple of 17.25 cm.
une phrase anodine de la notice — « multiple de 17,25 cm » — donne la fréquenceone harmless line in the manual — “multiple of 17.25 cm” — gives the frequency
L'outilThe tool

Le couteau suisse : Bruce, Flipper…

The Swiss army knife: Bruce, Flipper…

…ou n'importe quel outil d'analyse radio (SDR, RTL-SDR…).

…or any radio analysis tool (SDR, RTL-SDR…).

Flipper Zero
Flipper Zero
HackRF One
HackRF One · SDR
M5Shark
M5Shark (CYD)
▍ ÉcouterListen
▍ RejouerReplay
▍ Comprendre & bricolerUnderstand & tinker
~30 € · open-source · dans une poche~€30 · open-source · pocket-sized
Cours de hack · 2 · scannerHacking 101 · 2 · scan

Écouter, capturer… puis rejouer

Listen, capture… then replay

1
J'écoute le 433I listen on 433
pendant qu'il presse les boutons.while he presses the buttons.
2
Je captureI capture
24 trames · 4 canaux × 6 machines.24 frames · 4 channels × 6 machines.
3
Je rejoueI replay
…et la machine part.…and the machine fires.
Mais je n'ai rien compris.But I understood nothing.
copier-coller aveugle : je ne rejoue que ce que j'ai capturé.blind copy-paste: I can only replay what I captured.
Cours de hack · 3 · analyserHacking 101 · 3 · analyse

Voilà ce que le gadget vous donne

Here's what the gadget gives you

656 -580 560 -606 569 -589 585 -599 572 -576 588 -584 601 -577 599 -585 588 -570 605 -560 1174 -608 570 -1777 4663 -591 1167 -1181 565 -6448 620 -5827 1756 -582 1187 -582 589 -582 600 -578 602 -553 617 -570 575 -582 586 -53000 1752 -583 1183 -582 591 -582 595 -544 605 -589 582 -568 609 -581 590 -128000 626 -634 524 -620 563 -605 567 …

Un mur de microsecondes.A wall of microseconds.

4 PDF fournisseurs — aucun ne décrit le codage.4 vendor PDFs — none describes the encoding.

Reverse · onde → binaireReverse · wave → binary

Du signal aux bits

From signal to bits

4 captures réelles (S1…S4, même prise) · on échantillonne toutes les 585 µs (NRZ) : porteuse présente = 1, absente = 0 — pas encore de découpage, juste le signal brut → bits4 real captures (S1…S4, same button) · sampled every 585 µs (NRZ): carrier on = 1, off = 0 — no fields yet, just the raw signal → bits
Observer · variable vs figéObserve · variable vs fixed

Qu'est-ce qui change d'une trame à l'autre ?What changes from one frame to the next?

deux mêmes 24 trames, regroupées autrement · zones figées vs variables (cerclées)same 24 frames, grouped two ways · fixed vs variable zones (ringed)
▦ Par stand de tir (pièce)▦ By shooting stand (room)
▦ Par machine (prise)▦ By machine (button)

On ne sait pas encore ce que veut dire chaque zone — mais une logique apparaît : certaines ne bougent jamais, d'autres changent selon la pièce, d'autres selon la prise, une dernière à chaque trame. We don't yet know what each zone means — but a logic appears: some never move, some change with the room, some with the button, one on every frame.

Reverse · lire entre les lignesReverse · reading between the lines

Croiser la doc et les zones qui bougentCross the docs with the moving zones

La doc ne parle jamais de radio. Mais posée en face des zones variables, elle les nomme une à une — la doc est la pierre de Rosette.The docs never mention radio. But set against the variable zones, they name them one by one — the docs are the Rosetta stone.

la table des interrupteurs de la notice, redessinée — 5 DIP canal (32 canaux) + 3 DIP machine (8 machines) · la notice parle aussi d'un codethe manual's switch table, redrawn — 5 channel DIPs (32 channels) + 3 machine DIPs (8 machines) · the manual also mentions a code
1 · CanalChannel
Doc : 5 interrupteurs DIP → 2⁵ = 32 canaux · signal : zone de 5 bits, change par pièceDoc: 5 DIP switches → 2⁵ = 32 channels · signal: a 5-bit zone, changes per room
= (canal − 1) sur 5 bits · 4/32 capturéson 5 bits · 4/32 captured
2 · Machine
Doc : 3 interrupteurs DIP → 2³ = 8 machines (A→H) · signal : un-parmi-huit, change par priseDoc: 3 DIP switches → 2³ = 8 machines (A→H) · signal: one-hot, changes per button
3 bits DIP → un-parmi-huit · 6/8 capturés3 DIP bits → one-hot · 6/8 captured
3 · Un code ?A code?
Doc §12 : « encodé avec votre N° de stand… identique partout » · signal : zone figéeDoc §12: “encoded with your stand number… identical everywhere” · signal: fixed zone
= 1 octet (favori), 0 ici · à confirmer= 1 byte (favourite), 0 here · to confirm
Reverse · les dernières zones variablesReverse · the last variable zones

Ce qui reste : le checksum… et le tail

What's left: the checksum… and the tail

Une somme de contrôle : le récepteur ré-additionne les octets et vérifie le total. Pour repérer une erreur de transmission — pas pour sécuriser.

A control sum: the receiver re-adds the bytes and checks the total. To catch a transmission error — not to secure.

Une image : « Bonjour, je m'appelle Lucas » — et il t'envoie le nombre de L comme checksum. Tu comptes… il manque un L. Donc tu as mal entendu : il s'appelait Yuka, avec un Y. Picture it: “Hi, I'm Lucas” — and he sends you the number of L's as a checksum. You count… one L is missing. So you misheard: his name was Yuka, with a Y.
checksum = 0xAA + octet₁ + octet₂ + octet₃  (mod 256)checksum = 0xAA + byte₁ + byte₂ + byte₃  (mod 256)
octet₁ = fixe+canal · octet₂ = machine · octet₃ = 0byte₁ = fixed+channel · byte₂ = machine · byte₃ = 0
s1 · A → 170 + 144 + 1 + 0 = 315 → 59
… vérifié 24/24… verified 24/24
POURQUOI 0xAA ?WHY 0xAA?

0xAA = 10101010 en binaire. Un motif alterné, valeur de départ classique d'un checksum : non nul et distinctif, il attrape mieux les erreurs qu'un simple 0.

0xAA = 10101010 in binary. An alternating pattern, a classic checksum seed: non-zero and distinctive, it catches errors better than a plain 0.

LE TAIL · 4 bitsTHE TAIL · 4 bits

La toute dernière zone qui bouge — mais pas une donnée : une alternance qui repart du dernier bit du checksum (LSB 1 → 0101, 0 → 1010). Une horloge de fermeture.

The very last zone that moves — but not data: an alternation restarting from the checksum's last bit (LSB 1 → 0101, 0 → 1010). A closing clock.

Aucun secret → on le recalcule → on fabrique n'importe quelle commande.No secret → we recompute it → we forge any command.

Reverse · la trame décodéeReverse · the decoded frame

La trame, décodéeThe frame, decoded capture s1 · machine A

SynchroSync
·
100
CanalChannel
Machine
Code 0
Checksum
FinEnd
1111111101100100000000000100000000001110110101
Canal = (canal−1) XOR 16 · Machine = un-parmi-huit (A…F) · Code = 0x00 · Checksum = 0xAA + octets
Channel = (channel−1) XOR 16 · Machine = one-hot (A…F) · Code = 0x00 · Checksum = 0xAA + bytes
Reverse · on génèreReverse · we generate

On ne rejoue plus — on génère.

No more replay — we generate.

On connaît la règle (la pierre de Rosette). On choisit une combinaison — même jamais capturée — et on calcule la trame.

We know the rule (the Rosetta stone). We pick a combo — even one never captured — and compute the frame.

canal · machine
1 · H
ch. 10000 · machine 10000000 · checksum 186
canal · machine · au hasardchannel · machine · random
17 · B
ch. 00000 · machine 00000010 · checksum 44
syncfixecanalmachinecodecktail
1 · H — canal 10000 · machine 10000000 · ck 186
17 · B — canal 00000 · machine 00000010 · ck 44 · jamais capturéenever captured

Grâce au reverse engineering : nos propres protocoles.Thanks to reverse engineering: our own protocols.

Reverse · le doubléReverse · the true pair

Un doublé ? Ça s'additionne.

A true pair? It adds up.

On lisait « une machine parmi huit ». C'est un masque de relais : un bit par lanceur — et les bits s'ajoutent dans la même trame.

We read "one machine out of eight". It is a relay mask: one bit per thrower — and the bits add up inside one frame.

syncfixecanalmachinecodecktail
lanceur Cthrower C
00000100
ck 62
+ lanceur Dthrower D
00001000
ck 66
= doublétrue pair
00001100
ck 70

la trame captée à la télécommandethe frame captured from the remote · canal et code inchangéschannel and code unchanged · seul le checksum bouge avec : 62 + 8 = 70only the checksum moves along: 62 + 8 = 70

Les deux plateaux partent au même instant. Rejouer un enregistrement ne sait pas faire ça.Both clays leave at the very same instant. Replaying a recording cannot do that.

Améliorer avec l'IA · le teaserImprove with AI · the teaser

Comprendre = construire mieux que l'original

Understand = build better than the original

6 boutons
→ une vraie appli.
6 buttons
→ a real app.
DisciplinesDisciplines SéquencesSequences VoixVoice Scores Hors-ligneOffline
Sous le capot · le bonusUnder the hood · the bonus

Un relais réseau qui tient dans 8 Ko de RAM

A network relay that fits in 8 KB of RAM

TéléphonePhone
le cerveau : broker HTTP, file de commandesthe brain: HTTP broker, command queue
→
WiFi · HTTP
Bruce (ESP32)
relais JS : interroge /next, puis tireJS relay: polls /next, then fires
))
433,92 MHz433.92 MHz
LanceursLaunchers
la trame partthe frame goes out
8 Ko8 KB
de RAM libre — sans PSRAMof free RAM — no PSRAM
// forcer le GC avant l'appel HTTP// force GC before the HTTP call
function fx(u,o){ gc(); return wifi.httpFetch(u,o); }

Le GC compacte la mémoire → l'objet HTTP se corrompt. Parade en une ligne.

The GC compacts memory → the HTTP object corrupts. One-line fix.

Démo · le système en vraiDemo · the real system

Écouter d'un côté, piloter de l'autre

Listen on one side, control on the other

◀ à gaucheleft — un Bruce qui écoutea Bruce that listens
au centrecentre — le téléphone + l'appthe phone + app
à droiteright ▶ — un Bruce compagnon qui tirea companion Bruce that fires
Et si c'était mieux fait ?What if it were done right?

Pourquoi ma porte de garage résiste ?

Why does my garage door resist?

Ball-trap · même code à chaque foisClay-trap · same code every time
A73FA73FA73F→ rejeu ✓ (faille)→ replay ✓ (flaw)
Porte de garage / voiture · code tournantGarage door / car · rolling code
A73F9C1044E2→ rejeu ✗ (protégé)→ replay ✗ (protected)

Un code roulant, et notre rejeu tombait à l'eau.A rolling code, and our replay would've been dead.

Cas carte · 13,56 MHzCard case · 13.56 MHz
Et la carte qui déverrouille tout ?
Sûrement mieux protégée…
And the card that unlocks it all?
Surely better protected…

Sur le ball-trap, une carte à jetons débloque la télécommande.On the clay-trap, a token card unlocks the remote.

Analyse d'une trame de carteAnalysing a card's data

Qu'y a-t-il dans la carte ?

What's inside the card?

UID — lisible, copiable— readable, copyable
Secteurs & blocsSectors & blocks
Clés A / BKeys A / B — toute la sécu— all the security
MIFARE Classic 1K — schéma mémoireMIFARE Classic 1K — memory map
UID04 A3 7C … (copiable)04 A3 7C … (copyable)
Secteur 0Sector 0blocs 0-3blocks 0-3
Secteur 1Sector 1blocs 4-7blocks 4-7
…16 secteurs16 sectors
Clés A/BKeys A/B1 par secteur1 per sector
Cas carte · le « comment »Card case · the « how »

16 serrures… et presque personne n'a changé la clé

16 locks… and almost nobody changed the key

Chaque secteur est fermé par une clé. Pour lire les données, il faut la clé. Alors comment Bruce les lit toutes ?

Each sector is locked by a key. To read the data, you need the key. So how does Bruce read them all?

1
La clé d'usineThe factory key
presque jamais changée. Bruce teste une liste de clés connues — plein de secteurs s'ouvrent d'un coup.almost never changed. Bruce tries a list of known keys — many sectors pop open at once.
2
Le verrou est casséThe lock is broken
crypto1 (1994) publié cassé en 2008. Connais une clé, et la carte te livre les autres toute seule.crypto1 (1994) published broken in 2008. Know one key, and the card hands you the rest by itself.
3
Bruce enchaîneBruce chains it
tout est automatique. La carte est vidée en quelques secondes, secteur par secteur.all automatic. The card is dumped in seconds, sector by sector.
La basculeThe twist

Rien de magique : la carte participe à sa propre ouverture. Une clé qu'on a laissée par défaut, derrière un verrou publié cassé il y a 16 ans.

Nothing magical: the card helps open itself. A key left at its default, behind a lock published broken 16 years ago.

Cas carte · notre journal de bordCard case · our field log

Trois attaques sur la carte du club

Three attacks on the club's card

La carte encaisse les deux premières. La troisième ne lui laisse aucune chance.

The card takes the first two. The third leaves it no chance.

1
Dictionnaire · mfocDictionary · mfoc
4549 clés connues testées → 0. Pas de clé d'usine : clé custom.4549 known keys tried → 0. No factory key: custom key.
2
Darkside · mfcukDarkside · mfcuk
casser la clé sur la carte seule, sans lecteur → bloqué (hasard non exploitable).crack the key from the card alone, no reader → blocked (nonce not exploitable).
3
Mfkey32 · le lecteurMfkey32 · the reader
on retourne la carte contre le lecteur → la clé custom tombe. La seule voie, et elle passe.turn the card against the reader → the custom key falls. The only way, and it works.
La solution ultimeThe ultimate solution

Clé changée, carte durcie : deux portes fermées. Mais tant qu'un lecteur doit s'authentifier, il y a une clé à capturer. Mfkey32 ne dépend d'aucune clé de départ — c'est l'attaque ultime contre MIFARE Classic.

Key changed, card hardened: two doors shut. But as long as a reader must authenticate, there's a key to capture. Mfkey32 needs no starting key — it's the ultimate attack on MIFARE Classic.

Cas carte · et si aucune clé ne marche ?Card case · what if no key works?

Mfkey32 : on retourne la carte contre le lecteur

Mfkey32: turn the card against the reader

Clé custom, dans aucun dictionnaire ? On n'ouvre aucun secteur… alors on change de camp.

A custom key, in no dictionary? We can't open a single sector… so we switch sides.

1
On devient la carteWe become the card
le gadget émule la carte et se présente au vrai lecteur (la télécommande du club).the gadget emulates the card and faces the real reader (the club's remote).
2
Le lecteur essaie SA cléThe reader tries ITS key
il veut ouvrir « sa » carte, donc il tente sa clé secrète sur nous. 2 essais suffisent.it wants to open 'its' card, so it tries its secret key on us. 2 tries are enough.
3
Crypto1 fuitCrypto1 leaks
son « hasard » est prévisible et sa réponse laisse filer quelques bits → on calcule la clé.its 'randomness' is predictable and its answer leaks a few bits → we compute the key.
Le twistThe twist

Le lecteur te confie son secret rien qu'en essayant de l'utiliser. Voilà ce qui rend la faille exécutable même avec zéro clé connue.

The reader hands you its secret just by trying to use it. That's what makes the flaw executable even with zero known key.

Cas carte · la véritéCard case · the truth

MIFARE Classic : Bruce & Flipper la lisent… et l'émulent

MIFARE Classic: Bruce & Flipper read it… and emulate it

1
ScannerScan
UID + structure en 1 seconde.UID + structure in 1 second.
2
ÉmulerEmulate
rejouer la carte depuis le gadget.replay the card from the gadget.
3
ClonerClone
l'écrire sur une carte vierge.write it to a blank card.
La douche froideThe cold shower

crypto1 cassé depuis 2008. Clés par défaut, UID recopiable. Pas plus sûr que la radio.

crypto1 broken since 2008. Default keys, copyable UID. No safer than the radio.

Cas carte · analyse comparéeCard case · compared reads

On compare les cartes — comme les signaux

We compare the cards — like the signals

Même méthode : on lit plusieurs cartes, on repère l'octet qui change = le compteur de jetons.

Same method: read several cards, spot the byte that changes = the token counter.

carte · 12 jetonscard · 12 tokens sect.1 bloc4 =sect.1 blk4 = 0C 00 00 A7 1F 8C 4E …
carte · 3 jetonscard · 3 tokens sect.1 bloc4 =sect.1 blk4 = 03 00 00 A7 1F 8C 4E …
carte · 0 jetoncard · 0 tokens sect.1 bloc4 =sect.1 blk4 = 00 00 00 A7 1F 8C 4E …

Un seul octet bouge = le solde de jetons. On le réécrit → carte rechargée. (données d'exemple — vraies captures à venir)A single byte moves = the token balance. Rewrite it → recharged card. (placeholder data — real reads coming)

La vraie leçonThe real lesson

Ce cas de figure est partout.

This pattern is everywhere.

Bluetooth WiFi AirTag lunettes MetaMeta glasses clés de voiturecar keys badges
Nos vies numériques hurlent de la métadata sur nous.Our digital lives scream metadata about us.

Apprenons à écouter — et à comprendre — ce qui nous entoure.Let's learn to listen — and understand — what's around us.

Écouter ce qui nous entoureListening to what surrounds us

Un moniteur existe déjà :A monitor already exists: SquachWatch

Détecteur de surveillance open-source — sur le même « Cheap Yellow Display » que notre Bruce.Open-source surveillance detector — on the same “Cheap Yellow Display” as our Bruce.

Scan en direct SquachWatch
scan en direct — TRACKER : 1 : un AirTag repérélive scan — TRACKER : 1: an AirTag spotted
Écran SquachWatch
l'écran du détecteurthe detector's screen
Ce que SquachWatch détecte
ce qu'il repère autour de toiwhat it spots around you
squachwatch.com · github.com/skizzophrenic/SquachWatch-CYD
« Stay squachy out there. »
Aparté vécuA lived aside

L'IA, gardienne du « savoir sacré »

The AI, guardian of “sacred knowledge”

« Désolé, je ne peux pas. »
Vous voilà impie devant le secret.

“Sorry, I can't.”
And there you are, impious before the secret.

Ruser en permanenceScheme constantly
Jongler entre modèles & agentsJuggle models & agents
C'est pénible.It's a pain.
Vécu, pendant CETTE confLived, during THIS talk
“

En préparant ces slides, une réponse de l'IA a été coupée net par un classifieur de sécurité.

While preparing these slides, an AI reply was cut clean off by a safety classifier.

Sur une conf de sécurité. L'ironie était parfaite.

At a security talk. The irony was perfect.

BD : les gardiens du savoirComic: the guardians of knowledge
À retenirTakeaways

Trois idées à emporter

Three things to take away

1
Un gadget pour OUVRIRA gadget to OPEN
2
L'IA pour COMPRENDREAI to UNDERSTAND
3
Comprendre pour AMÉLIORERUnderstanding to IMPROVE
Une dernière chose…One last thing…
Et je vous ai dit que j'ai
une amie qui joue au golf… ?
Did I mention I have
a friend who plays golf…?

à suivre.to be continued.

Questions ?Questions?
← → pour naviguer · N pour les notes · F plein écran · L langue← → navigate · N notes · F fullscreen · L language
est-ce que ça, ça se pirate ?can this be hacked?
01 / 27
Note présentateurPresenter note