 Ladybirds:STM32 SWD 調(diào)試口攻擊與 GDB 內(nèi)存補丁完全指南)
【免費下載鏈接】PwnPadPwnPad is an affordable, hands-on hardware hacking platform built for practical learning. It features a range of challenges that walk users through key hardware security concepts, from PCB design to side-channel attacks.項目地址https://gitcode.com/gh_mirrors/pwn/PwnPad點擊查看免費下載PwnPad 是一款低成本、可動手的硬件破解學(xué)習(xí)平臺帶你從 PCB 設(shè)計一路走到側(cè)信道攻擊。第14關(guān)Ladybirds正是它的經(jīng)典進(jìn)階題通過ST-Link接上 STM32 的SWD 調(diào)試口用gdb-multiarch停下 CPU、找到固件里的保險箱校驗邏輯再用一句內(nèi)存補丁繞過去直接解鎖保險箱并讀到 flag。本文用最少代碼帶你完整走通這套SWD 調(diào)試 內(nèi)存補丁的硬件攻擊思路。 全程只需一個ST-Link調(diào)試器配合 PwnPad 自帶的 STM32F1x 模塊 即可完成無需額外燒錄。認(rèn)識 PwnPad你的硬件破解訓(xùn)練場PwnPad 的核心是一個可插拔、可跳線選擇的硬件平臺全部搭建成本約20 美元完成所有挑戰(zhàn)的工具約50 美元即可搞定。它把 UART、SPI、I2C、故障注入、側(cè)信道等真實攻擊場景做成了 15 個循序漸進(jìn)的關(guān)卡。平臺用一個5 位跳線Challenge Select來決定當(dāng)前跑哪個挑戰(zhàn)切換挑戰(zhàn)不用重新燒錄固件改好跳線按一次 RESET 就行。這個設(shè)計讓 Ladybirds 這類 SWD 題可以反復(fù)演練。想從零焊一塊自己的直接看官方 docs/PwnPad_building_instruction.pdf。為什么這題值得做Ladybirds 是 PwnPad 里少有的黑盒調(diào)試 逆向組合題它逼你掌握三個真實安全崗位的核心技能物理接入調(diào)試口找到 SWD 焊盤、確認(rèn)電壓域調(diào)試器工作流ST-Link → GDB 服務(wù)器 → halt 目標(biāo)核內(nèi)存/Flash 補丁不重新編譯直接改運行中的程序邏輯掌握它第15關(guān)的 JTAG 固件提取也就水到渠成。挑戰(zhàn)目標(biāo)用 SWD 解鎖保險箱打開 challenges/14. Ladybirds.md 就能看到本題的官方劇情一臺緊湊保險箱被一段頑固的固件校驗保護(hù)著你要通過暴露出來的SWD 焊盤把某個特定內(nèi)存位置改掉讓保險箱開門。官方給出的任務(wù)清單是找到并識別板上的SWD 焊盤確認(rèn)目標(biāo)電壓域別想當(dāng)然當(dāng)成 3.3V接好 ST-Link注意接地與 VTarget用st-util 或 openocd拉起 GDB 服務(wù)器再用gdb-multiarch連上停核monitor reset halt/ 中斷定位認(rèn)證例程查看 RAM 與 Flash找到那道校驗打上補丁解鎖保險箱 通關(guān)判定很簡單PwnPad 主板的 handheld_challenge_swd() 會持續(xù)讀一個輸入腳一旦 STM32 側(cè)把開門信號拉高串口就打印DOOR STATUS: UNLOCKED和 flag——你的補丁是否生效一眼可見。準(zhǔn)備工作硬件與工具清單類別需要的東西說明調(diào)試器ST-Link V2/V3提供 SWD 信號與 VTarget軟件gdb-multiarch通用 GDB跨架構(gòu)連目標(biāo)核軟件st-util或openocd為 ST-Link 拉起 GDB 服務(wù)器線材杜邦線 萬用表接 SWD 焊盤、測電壓文檔SWDJTAG 模塊固件理解 STM32 側(cè)開門信號邏輯SWD 只用兩根信號線SWDIO/SWCLK加上GND和參考VTarget就夠了比 JTAG 的 4 線接口更輕量這也是它被大量量產(chǎn)設(shè)備保留下來的原因。第 1 步配置 Challenge Select 跳線按 challenges/14. Ladybirds.md 末尾的Challenge Select表設(shè)置 5 個跳線1 -- 1 2 -- 0 3 -- 0 4 -- 1 5 -- 1設(shè)好后按下主板上的RESET鍵PwnPad 就會加載 Ladybirds 挑戰(zhàn)。跳線是 5 位二進(jìn)制選擇器Pin1 為最低位Pin5 為最高位這個機(jī)制在 challengeSelector() 里實現(xiàn)。第 2 步連接 ST-Link 到 SWD 接口在 STM32F1x 模塊原理圖 上找到 SWD 焊盤SWDIO、SWCLK、GND、VTarget / 3.3V接法ST-Link 的 GND→ 模塊GND必須先共地防止電平漂移SWDIO→ SWDIOSWCLK→ SWCLKVTarget→ 目標(biāo)3.3V參考腳?? 官方反復(fù)強(qiáng)調(diào)別假設(shè)是 3.3V。先用萬用表量一下目標(biāo)實際電壓域接錯電壓是燒芯片最常見的原因。第 3 步啟動 GDB 服務(wù)器并 halt CPU開一個終端拉起 GDB 服務(wù)器二選一# 方式 Ast-util輕量 st-util -p 32f103 # 方式 BOpenOCD openocd -f interface/stlink.cfg -f target/stm32f1x.cfg再開一個終端連目標(biāo)核并停核gdb-multiarch (gdb) target remote :3333 (gdb) monitor reset halt此時 CPU 已被halt暫停你可以安全地讀寄存器、看內(nèi)存、翻 Flash而不會破壞運行狀態(tài)。第 4 步定位校驗邏輯并內(nèi)存補丁停核后先用x/i $pc看當(dāng)前指令、用info registers看寄存器再結(jié)合 SWDJTAG.ino 的邏輯它會讀一個輸入腳條件成立才把開門信號拉高。換句話說保險箱鎖著的根源是某個判斷沒通過。兩種常見、非破壞性的打補丁手法改內(nèi)存值找到那個控制開門信號的變量/寄存器直接set {int}0xADDR 1NOP 掉分支把校驗的BNE/BL指令改成NOP0x00 0x00讓程序無條件通過在 GDB 里就是(gdb) x/i 0x08000xxx # 找到那條條件跳轉(zhuǎn) (gdb) set {int}0x20000xxx 1 # 方案1直接寫內(nèi)存 # 或 set {hword}0x08000xxx 0x0000 # 方案2NOP 掉分支 優(yōu)先選內(nèi)存補丁而非改寫 Flash——它不破壞固件隨時可重啟復(fù)位最安全、最可逆。第 5 步恢復(fù)運行讀取 flag補丁打好后恢復(fù)運行(gdb) continue回到串口默認(rèn) 9600 波特率你會看到[] DOOR STATUS: UNLOCKED ------------------------- TS{5WD_15_P0werFu11_Use}保險箱打開flag 到手 。想記錄進(jìn)度和提交 flag可以跑一下本地 Web 應(yīng)用bash ./tools/webapp/start.sh然后瀏覽器打開http://127.0.0.1:12530提交。啟動腳本見 tools/webapp/start.sh。常見坑位與排錯現(xiàn)象可能原因處理target remote連不上服務(wù)器沒起 / 地址端口不對確認(rèn) st-util 或 openocd 已運行停核后無響應(yīng)電壓域沒量對、沒共地萬用表復(fù)核 3.3V先接 GND補丁后不開門改錯了變量地址回到x/i $pc重新定位判斷分支一接上就死機(jī)SWDIO/SWCLK 接反對照原理圖交換兩根線進(jìn)階從 SWD 到 JTAG第15關(guān)搞定 Ladybirds 后challenges/15. Ladybird I Am Your Father.md 會把難度再提一檔這次保險箱隱藏了固件你得用JTAG OpenOCD把整段 Flash 讀成二進(jìn)制離線做靜態(tài)/動態(tài)分析再回來打補丁。SWD 的兩線調(diào)試經(jīng)驗會直接幫你上手 JTAG 的四線接口這也是 PwnPad 把它倆排在一起的原因。小結(jié)SWD 只用 SWDIO SWCLK 兩根信號線接好 GND 與電壓參考是安全前提st-util / openocd 拉服務(wù)器gdb-multiarch 停核是調(diào)試 STM32 的標(biāo)準(zhǔn)姿勢內(nèi)存補丁優(yōu)先于改寫 Flash非破壞、可逆、最安全打通 Ladybirds你就掌握了硬件安全里最實用的調(diào)試口攻擊 內(nèi)存補丁組合拳動手試試吧PwnPad 的下一扇門正等著你的 ST-Link。贊分享【免費下載鏈接】PwnPadPwnPad is an affordable, hands-on hardware hacking platform built for practical learning. It features a range of challenges that walk users through key hardware security concepts, from PCB design to side-channel attacks.項目地址https://gitcode.com/gh_mirrors/pwn/PwnPad點擊查看免費下載相關(guān)推薦SerenityOS 移植 GDB 調(diào)試器6 個關(guān)鍵補丁的源碼級解析SerenityOS 移植 GDB 調(diào)試器6 個關(guān)鍵補丁的源碼級解析 本篇技術(shù)指南以 Ports/gdb/patches/ReadMe.md https://操作系統(tǒng)內(nèi)核驅(qū)動PX4 Autopilot 使用 MCU-Link 調(diào)試探針LinkServer 與 pyOCD 的 SWD/GDB 完整調(diào)試指南PX4 Autopilot 使用 MCU Link 調(diào)試探針LinkServer 與 pyOCD 的 SWD/GDB 完整調(diào)試指南 本文以 PX4 Autop嵌入式物聯(lián)網(wǎng)機(jī)器人自動駕駛智能硬件os-tutorial 第 14 講代碼重構(gòu)、可擴(kuò)展 Makefile 與用 GDB 調(diào)試內(nèi)核的完整實戰(zhàn)os tutorial 第 14 講代碼重構(gòu)、可擴(kuò)展 Makefile 與用 GDB 調(diào)試內(nèi)核的完整實戰(zhàn) 導(dǎo)讀 本篇文章聚焦 os tutorial http示例工程創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考