
CTF de piratage matériel hcon2026hwctf - Exploitation de RISCV Hazard3 (@Wren6991) par @b1n4ri0 @antoniovazquezblanco & @therealdreg
Si vous êtes adepte de CTF hardware, voici le premier défi public du HC0N CTF 2026 avec des défis d'exploitation RISC-V RP2350 (bas niveau).
Nous avons essayé de ne pas rendre le challenge trop élitiste ou difficile, afin que les centaines de participants à la conférence aient une chance de résoudre les défis. J'espère que nous avons réussi.
Si vous voulez exécuter le CTF chez vous, prenez un Raspberry Pi Pico 2, flashez ce firmware, et ne lisez pas les solutions ! -> ctf.uf2
Note pour ceux qui utilisent une carte (RP2350/RP2354...) différente de celle du CTF :
Le PCB du CTF possède une LED CMS sur GPIO 25, vous devez avoir une LED sur cette GPIO

Quand vous aurez terminé ce CTF, si vous l'avez aimé, en voici un autre similaire avec des défis différents : https://github.com/therealdreg/ctfhardwarehackingcon2026
ATTENTION : Les solutions suivantes contiennent des spoilers pour les défis. Si vous voulez les résoudre par vous-même, nous vous recommandons de ne pas les lire avant d'avoir terminé le CTF.
Premier gagnant : @mrexodia (Duncan Ogilvie) writeups/first_winner.md

Lot : kit keylogger matériel okhi USB/PS2 + CWP (Certified WifiChallenge Professional) https://github.com/therealdreg/okhi
Deuxième gagnant : @M3RINOOOOO (Cristobal Merino Saez) writeups/second_winner.md

Lot : Pimoroni PGA2350, PICO2 WH, Pimoroni PICO PLUS 2W, PICO2 H, CWP (Certified WifiChallenge Professional)
Troisième gagnant : @p4bl0vx (Pablo Moya Lopez) writeups/third_winner.md

Lot : Pimoroni PGA2350, PICO2 WH, Pimoroni PICO PLUS 2W, CWP (Certified WifiChallenge Professional).
Nous allons vous fournir un peu d'aide pour rendre le Hardware Hacking CTF à HCON 2026 plus facile.

Un hôte Linux devrait être votre première option ;-), le débogage fonctionne mieux.
TeraTerm : Setup -> Terminal -> Transmit : CR+LF et [x] Local echo

Autres :
cutecom :``` sudo apt-get update sudo apt-get install cutecom
# AVERTISSEMENT
L’un des défis nécessite du débogage matériel. Si vous réalisez le défi depuis chez vous (sans coéquipier possédant une autre carte), vous devrez également acheter ces deux articles pour résoudre ce défi. (Si vous ne les achetez pas, pas de souci—mais vous ne pourrez pas résoudre ce défi précis.)
- https://www.tiendatec.es/raspberry-pi-pico/2025-raspberry-pi-debug-probe-5056561803265.html
- https://www.tiendatec.es/raspberry-pi-pico/1979-cable-depuracion-pico-jtag-jst-sh-1-0-a-dupont-hembra-15cm-8472496024846.html
# À propos des scripts
Les outils inclus dans ce dépôt ont été développés par @b1n4ri0 pour la communauté et spécifiquement pour le HCON 2026 Hardware Hacking Challenge.
# Exploitation du processeur RISCV Hazard3 (@Wren6991) à 3 étages RV32IMACZb* avec débogage
RISCV Hazard3 est un processeur à 3 étages RV32IMACZb* avec prise en charge du débogage. Il est utilisé dans le microcontrôleur RP2350 présent sur la carte HCON2026HWCTF.
# Extraction du firmware RISCV Hazard3 à l’aide de picotool
Extraire le firmware des appareils RP2350 avec `picotool` est un processus simple. Dans cette section, vous apprendrez à le faire efficacement.
Remarque : `picotool` interagit avec les appareils RP2350 (et RP2040) uniquement lorsqu’ils sont en mode BOOTSEL ou si le firmware exécuté inclut la prise en charge USB stdio du Pico SDK.
## Compilation de picotool
Installez les outils de compilation et les bibliothèques nécessaires via votre gestionnaire de paquets préféré.```bash
sudo apt-get update
sudo apt install build-essential pkg-config libusb-1.0-0-dev cmake -y
Créez un répertoire dédié pour garder vos outils organisés. Cela garantit que les chemins utilisés dans les étapes suivantes sont corrects.```bash cd $HOME mkdir rptools cd rptools
Clonez les projets `picotool` et `pico-sdk`, nous avons besoin à la fois de l'outil lui-même et du SDK. Notez que `picotool` nécessite `pico-sdk` pour compiler correctement.```bash
git clone https://github.com/raspberrypi/picotool.git
git clone https://github.com/raspberrypi/pico-sdk.git
cd picotool
Créez le répertoire de build et exécutez CMake.
Important : nous devons utiliser l'option -DPICO_SDK_PATH pour indiquer à CMake exactement où nous avons téléchargé le SDK à l'étape précédente, ou nous pouvons définir PICO_SDK_PATH dans l'environnement.```bash
mkdir build
cd build
cmake -DPICO_SDK_PATH=$HOME/rptools/pico-sdk ..
sudo make install
Par défaut, l'accès aux périphériques USB nécessite des privilèges root. Copiez le fichier de règles udev pour permettre d'exécuter `picotool` sans utiliser `sudo`.```bash
sudo cp ../udev/60-picotool.rules /etc/udev/rules.d/
Rechargez les règles udev (ou débranchez et rebranchez votre appareil) et vérifiez la version en exécutant picotool version pour vous assurer que tout fonctionne:```bash
$ ./picotool version
picotool v2.2.0-a4 (Linux, GNU-15.2.0, Release)
## Utilisation du binaire précompilé
Si vous préférez éviter le processus de compilation, vous pouvez télécharger le binaire précompilé depuis le [dépôt officiel](https://github.com/raspberrypi/pico-sdk-tools/releases).```bash
gunzip picotool-2.2.0-a4-x86_64-lin.tar.gz
tar -xf picotool-2.2.0-a4-x86_64-lin.tar
cd picotool
L'exécution de picotool version devrait fonctionner comme prévu :```bash
$ ./picotool version
picotool v2.2.0-a4 (Linux, GNU-11.4.0, Release)
## Activer le mode BOOTSEL sur RP2350
Pour effectuer des opérations comme le dump du firmware, `picotool` nécessite que le périphérique soit en mode BOOTSEL. Cependant, `picotool` peut également interagir avec le périphérique si le firmware actuellement exécuté inclut le support USB stdio du Pico SDK.
Ci-dessous, je mentionnerai plusieurs façons d'activer ce mode. Choisissez celle qui semble la plus appropriée pour votre cas ou simplement celle qui fonctionne pour vous.
Si votre carte **n'est pas en mode BOOTSEL**, mais contient le support USB stdio**,** vous verrez une sortie comme celle-ci lorsque vous essayez d'exécuter les commandes `picotool` :```bash
$ ./picotool info
No accessible RP-series devices in BOOTSEL mode were found.
but:
RP2350 device at bus 1, address 23 appears to have a USB serial connection, so consider -f (or -F) to force reboot in order to run the command.
Voici la méthode matérielle standard utilisée :