
하드웨어 해킹 CTF hcon2026hwctf - RISCV Hazard3 (@Wren6991) 익스플로잇: @b1n4ri0 @antoniovazquezblanco & @therealdreg
하드웨어 CTF에 관심이 있다면, RISC-V RP2350 익스플로잇 챌린지(로우 레벨)를 다루는 HC0N CTF 2026의 첫 번째 공개 챌린지가 여기 있습니다.
우리는 이 챌린지를 너무 엘리트적이거나 어렵지 않게 만들려고 노력했습니다. 수백 명의 컨퍼런스 참가자들이 문제를 풀 기회를 가질 수 있도록요. 그 목표를 달성했기를 바랍니다.
CTF를 집에서 실행하고 싶다면 Raspberry Pi Pico 2를 하나 준비해서 이 펌웨어를 플래시하고, 라이트업은 읽지 마세요! -> ctf.uf2
CTF에 사용된 보드와 다른 보드(RP2350/RP2354...)를 사용하는 분들을 위한 참고 사항:
CTF PCB에는 GPIO 25에 SMD LED가 있습니다. 해당 GPIO에 LED가 반드시 있어야 합니다

이 CTF를 마친 후 마음에 들었다면, 다른 챌린지로 구성된 비슷한 CTF가 여기 있습니다: https://github.com/therealdreg/ctfhardwarehackingcon2026
경고: 아래 라이트업에는 챌린지에 대한 스포일러가 포함되어 있습니다. 직접 문제를 풀고 싶다면 CTF를 완료할 때까지 읽지 않는 것을 권장합니다.
1등 수상자: @mrexodia (Duncan Ogilvie) writeups/first_winner.md

상품: okhi 하드웨어 키로거 USB/PS2 키트 + CWP(Certified WifiChallenge Professional) https://github.com/therealdreg/okhi
2등 수상자: @M3RINOOOOO (Cristobal Merino Saez) writeups/second_winner.md

상품: Pimoroni PGA2350, PICO2 WH, Pimoroni PICO PLUS 2W, PICO2 H, CWP(Certified WifiChallenge Professional)
3등 수상자: @p4bl0vx (Pablo Moya Lopez) writeups/third_winner.md

상품: Pimoroni PGA2350, PICO2 WH, Pimoroni PICO PLUS 2W, CWP(Certified WifiChallenge Professional).
여기서는 HCON 2026의 Hardware Hacking CTF를 더 쉽게 풀 수 있도록 몇 가지 도움을 드리겠습니다.

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이 커뮤니티를 위해, 특히 2026 HCON 하드웨어 해킹 챌린지를 위해 개발했습니다.
# 디버그 지원 RP2350 RISCV Hazard3 (@Wren6991) 3-스테이지 RV32IMACZb* 프로세서 악용
RISCV Hazard3는 디버그 지원이 포함된 3-스테이지 RV32IMACZb* 프로세서입니다. HCON2026HWCTF 보드에 탑재된 RP2350 마이크로컨트롤러에 사용됩니다.
# picotool을 사용하여 RISCV Hazard3 펌웨어 덤프하기
`picotool`로 RP2350 장치에서 펌웨어를 덤프하는 것은 간단한 과정입니다. 이 섹션에서는 이를 효과적으로 수행하는 방법을 배우게 됩니다.
참고: `picotool`은 RP2350(및 RP2040) 장치가 BOOTSEL 모드이거나 실행 중인 펌웨어에 Pico SDK의 USB stdio 지원이 포함된 경우에만 상호 작용합니다.
## 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를 실행합니다.
중요: 이전 단계에서 SDK를 다운로드한 위치를 CMake에 정확히 알려주려면 -DPICO_SDK_PATH 플래그를 사용해야 합니다. 또는 환경 변수에 PICO_SDK_PATH를 설정할 수도 있습니다.```bash
mkdir build
cd build
cmake -DPICO_SDK_PATH=$HOME/rptools/pico-sdk ..
sudo make install
기본적으로 USB 장치에 접근하려면 root 권한이 필요합니다. `sudo`를 사용하지 않고 `picotool`을 실행할 수 있도록 udev 규칙 파일을 복사하십시오.```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)
## RP2350에서 BOOTSEL 모드 활성화
펌웨어 덤프와 같은 작업을 수행하려면 `picotool`은 장치가 BOOTSEL 모드에 있을 것을 필요로 합니다. 그러나 현재 실행 중인 펌웨어에 Pico SDK의 USB stdio 지원이 포함되어 있다면, `picotool`은 장치와 상호작용할 수도 있습니다.
아래에서 이 모드를 활성화하는 몇 가지 방법을 언급하겠습니다. 자신의 경우에 가장 적합해 보이는 방법이나, 단순히 자신에게 맞는 방법을 선택하세요.
보드가 **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을 놓으세요.이제 picotool 명령을 실행할 수 있습니다:```bash
$ ./picotool info
Program Information
name: hello_usb
features: USB stdin / stdout
binary start: 0x10000000
binary end: 0x10011d50
target chip: RP2350
image type: RISC-V
### BOOTSEL을 활성화하는 소프트웨어
장치 펌웨어가 실행 중이고 USB stdio 지원이 있는 경우, 보드를 건드리지 않고도 BOOTSEL 모드로 강제 전환할 수 있습니다.```bash
./picotool reboot -uf
이 명령은 -u 플래그를 사용하여 BOOTSEL 모드로 재부팅하도록 지정합니다. 그러나 장치가 현재 사용자 코드를 실행 중이므로 picotool은 기본적으로 이를 무시합니다. 따라서 실행 중인 애플리케이션이 리셋 명령을 수락하도록 강제하려면 -f 플래그를 추가해야 합니다.
-f가 없으면 도구가 장치가 이미 BOOTSEL 모드에 있을 것으로 기대하기 때문에 작업은 단순히 실패합니다.```bash
$ ./picotool info
Program Information
name: hello_usb
features: USB stdin / stdout
binary start: 0x10000000
binary end: 0x10011d50
target chip: RP2350
image type: RISC-V
**팁:** 수동으로 먼저 재부팅하지 않고도 실행 중인 장치에서 직접 명령을 실행하려면 명령에 `-f` 플래그를 추가하세요. `picotool`이 재부팅을 처리하고 명령을 실행한 후 애플리케이션으로 다시 재부팅합니다.```bash
$ ./picotool info -f
Tracking device serial number XXXXXXXXXXXXXXXX for reboot
The device was asked to reboot into BOOTSEL mode so the command can be executed.
Program Information
name: hello_usb
features: USB stdin / stdout
binary start: 0x10000000
binary end: 0x10011d50
target chip: RP2350
image type: RISC-V
The device was asked to reboot back into application mode.
이 CTF 챌린지에서는 BOOTSEL 모드로 진입하지 않고도 펌웨어를 직접 추출할 수 있습니다.
실행 중인 프로그램에 대한 정보를 수집하는 것을 권장합니다. 기본적으로 "Program Information" 섹션을 표시하는 info 명령을 사용하면 됩니다. 현재 장치가 코드를 실행 중이므로 연결을 강제하기 위해 -f 플래그를 추가합니다.```bash
$ ./picotool info -f
Tracking device serial number XXXXXXXXXXXXXXXX for reboot
The device was asked to reboot into BOOTSEL mode so the command can be executed.
Program Information name: hello_usb features: USB stdin / stdout binary start: 0x10000000 binary end: 0x10011d50 target chip: RP2350 image type: RISC-V