
Hardware Hacking CTF hcon2026hwctf - RISCV Hazard3 (@Wren6991) Эксплуатация от @b1n4ri0 @antoniovazquezblanco и @therealdreg
Если вы интересуетесь аппаратными CTF, вот первый публичный челлендж с HC0N CTF 2026, посвящённый эксплуатации RISC-V RP2350 (низкий уровень)
Мы постарались сделать челлендж не слишком элитарным или сложным, чтобы сотни участников конференции имели шанс его решить. Надеюсь, у нас это получилось.
Если вы хотите запустить CTF дома, возьмите Raspberry Pi Pico 2, залейте эту прошивку и не читайте разборы! -> ctf.uf2
Примечание для тех, кто использует плату (RP2350/RP2354...), отличную от оригинальной CTF:
На PCB CTF есть SMD светодиод на GPIO 25, у вас должен быть светодиод на этом GPIO

Когда вы закончите этот CTF, если он вам понравился, вот ещё один похожий с другими заданиями: https://github.com/therealdreg/ctfhardwarehackingcon2026
ПРЕДУПРЕЖДЕНИЕ: Следующие write-ups содержат спойлеры к заданиям. Если вы хотите решить их самостоятельно, рекомендуем не читать их, пока не завершите CTF.
Первый Победитель: @mrexodia (Duncan Ogilvie) writeups/first_winner.md

Приз: okhi аппаратный кейлоггер USB/PS2 комплект + CWP (Certified WifiChallenge Professional) https://github.com/therealdreg/okhi
Второй Победитель: @M3RINOOOOO (Cristobal Merino Saez) writeups/second_winner.md

Приз: Pimoroni PGA2350, PICO2 WH, Pimoroni PICO PLUS 2W, PICO2 H, CWP (Certified WifiChallenge Professional)
Третий Победитель: @p4bl0vx (Pablo Moya Lopez) writeups/third_winner.md

Приз: Pimoroni PGA2350, PICO2 WH, Pimoroni PICO PLUS 2W, CWP (Certified WifiChallenge Professional).
Здесь мы подготовили несколько советов, которые помогут упростить Hardware Hacking CTF на HCON 2026.

Linux хост должен быть вашим первым выбором ;-), отладка работает лучше.
TeraTerm: Setup -> Terminal -> Transmit: CR+LF & [x] Local echo

Другие:
cutecom:``` sudo apt-get update sudo apt-get install cutecom
# ПРЕДУПРЕЖДЕНИЕ
Одно из заданий требует аппаратной отладки. Если вы выполняете задание из дома (без товарища по команде, у которого есть другая плата), то для решения этого задания вам также понадобится купить эти два предмета. (Если вы не купите их, ничего страшного — но вы не сможете решить это конкретное задание.)
- 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
# О скриптах
Инструменты, включённые в этот репозиторий, были разработаны @b1n4ri0 для сообщества и специально для соревнования по аппаратному взлому HCON 2026.
# Эксплуатация 3-стадийного процессора RP2350 RISCV Hazard3 (@Wren6991) RV32IMACZb* с отладкой
RISCV Hazard3 — это 3-стадийный процессор RV32IMACZb* с поддержкой отладки. Он используется в микроконтроллере RP2350, который установлен на плате HCON2026HWCTF.
# Дампинг прошивки RISCV Hazard3 с помощью picotool
Дампинг прошивки с устройств RP2350 с помощью `picotool` — это простой процесс. В этом разделе вы узнаете, как делать это эффективно.
Примечание: `picotool` взаимодействует с устройствами RP2350 (и RP2040) только когда они находятся в режиме BOOTSEL или если запущенная прошивка включает поддержку USB stdio из Pico SDK.
## Сборка picotool
Установите необходимые инструменты сборки и библиотеки через ваш любимый менеджер пакетов.```bash
sudo apt-get update
sudo apt install build-essential pkg-config libusb-1.0-0-dev cmake -y
Создайте выделенный каталог для хранения ваших инструментов в упорядоченном виде. Это гарантирует правильность путей, используемых на последующих этапах.```bash cd $HOME mkdir rptools cd rptools
Клонируйте проекты `picotool` и `pico-sdk`, нам нужны как сам инструмент, так и SDK. Обратите внимание, что `picotool` требует `pico-sdk` для корректной компиляции.```bash
git clone https://github.com/raspberrypi/picotool.git
git clone https://github.com/raspberrypi/pico-sdk.git
cd picotool
Создайте директорию сборки и запустите CMake.
Важно: Мы должны использовать флаг -DPICO_SDK_PATH, чтобы указать CMake точное местоположение загруженного SDK на предыдущем шаге, или мы можем установить переменную среды PICO_SDK_PATH.```bash
mkdir build
cd build
cmake -DPICO_SDK_PATH=$HOME/rptools/pico-sdk ..
sudo make install
По умолчанию для доступа к USB-устройствам требуются привилегии root. Скопируйте файл правил udev, чтобы разрешить запуск `picotool` без использования `sudo`.```bash
sudo cp ../udev/60-picotool.rules /etc/udev/rules.d/
Перезагрузите правила udev (или отключите и снова подключите ваше устройство) и проверьте версию, выполнив picotool version, чтобы убедиться, что всё работает:```bash
$ ./picotool version
picotool v2.2.0-a4 (Linux, GNU-15.2.0, Release)
## Использование предварительно собранного бинарного файла
Если вы предпочитаете пропустить процесс сборки, вы можете скачать предварительно скомпилированный бинарный файл из [официального репозитория](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
Запуск picotool version должен работать как ожидается:```bash
$ ./picotool version
picotool v2.2.0-a4 (Linux, GNU-11.4.0, Release)
## Включение режима BOOTSEL на RP2350
Для выполнения таких операций, как дамп прошивки, `picotool` требует, чтобы устройство находилось в режиме BOOTSEL. Однако `picotool` также может взаимодействовать с устройством, если текущая запущенная прошивка включает поддержку USB stdio из Pico SDK.
Ниже я упомяну несколько способов активации этого режима. Выберите тот, который кажется наиболее подходящим для вашего случая, или просто тот, который работает для вас.
Если ваша плата **не находится в режиме BOOTSEL**, но содержит поддержку USB stdio**,** вы увидите вывод, подобный следующему, при попытке выполнить команды `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.
Используется стандартный аппаратный метод:
BOOTSEL или BOOT.BOOTSEL.Альтернатива (если вы не хотите отключать плату):
BOOTSEL.RESET или RST.BOOTSEL.