
اختراق الأجهزة 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:
تحتوي لوحة CTF على SMD LED على GPIO 25، يجب أن يكون لديك LED على هذا GPIO

عندما تنتهي من هذه المسابقة، إذا أعجبتك، فإليك مسابقة أخرى مشابهة بتحديات مختلفة: https://github.com/therealdreg/ctfhardwarehackingcon2026
تحذير: تحتوي الحلول التالية على مفسدات (spoilers) للتحديات. إذا كنت تريد حلها بنفسك، ننصحك بعدم قراءتها حتى تنهي المسابقة.
الفائز الأول: @mrexodia (Duncan Ogilvie) writeups/first_winner.md

الجائزة: كيت okhi لـ keylogger العتادي 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 هو خيارك الأول ;-)، فالتصحيح (debugging) يعمل بشكل أفضل.
TeraTerm: Setup -> Terminal -> Transmit: CR+LF & [x] Local echo

أخرى:
cutecom:``` sudo apt-get update sudo apt-get install cutecom
# تحذير
يتطلب أحد التحديات تصحيح أخطاء الأجهزة (hardware debugging). إذا كنت تقوم بالتحدي من المنزل (بدون زميل يمتلك لوحة أخرى)، فستحتاج أيضًا إلى شراء هذين العنصرين لحل هذا التحدي. (إذا لم تشتريهما، لا تقلق — لكنك لن تتمكن من حل هذا التحدي المحدد.)
- 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 Hardware Hacking Challenge.
# استغلال معالج RP2350 RISCV Hazard3 (@Wren6991) ثلاثي المراحل RV32IMACZb* مع التصحيح
RISCV Hazard3 هو معالج ثلاثي المراحل 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 صلاحيات الجذر. انسخ ملف قواعد 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.يجب الآن أن تكون قادرًا على تنفيذ أوامر 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 لإجبار التطبيق قيد التشغيل على قبول أمر إعادة التعيين.