DEF CON 33 BiC Village - Sydney Johns RE for the Rest of Us An Introduction to Reverse Engineering
三句話摘要
DEFCon初學者逆向工程講座:透過Arduino與Ghidra學習硬體及軟體逆向工程的完整流程。 逆向工程是一門需要系統思維與工具掌握的技藝,從硬體拆解、軟體反編譯到敏感數據提取的完整流程,只要掌握核心工具、記錄過程、持續練習,初學者也能有效地分析與理解任何設備或程序的運作邏輯。 硬體逆向工程的系統化步驟:從識別芯片與查閱數據手冊開始,再進行連通性測試確認電路板是否正常工作,接著尋找診斷端口(如UART、JTAG)以便提取固件,每個步驟都有具體的檢測工具與方法。
重點整理
重點- 1
硬體逆向工程的系統化步驟:從識別芯片與查閱數據手冊開始,再進行連通性測試確認電路板是否正常工作,接著尋找診斷端口(如UART、JTAG)以便提取固件,每個步驟都有具體的檢測工具與方法。
- 2
軟體逆向工程的三層認知:同一個程序在原始C代碼、彙編代碼、二進制代碼三種格式間存在對應關係,需要理解這些層級如何相互轉換,才能從二進制還原出可讀的邏輯。
- 3
靜態分析與動態分析的互補性:靜態分析無需執行代碼即可理解其結構(如用Ghidra搜尋字符串與變數),動態分析則需執行程序觀察運行行為,兩者結合才能完整揭示程序的工作原理。
- 4
實踐導向的學習路徑:從簡單的LED閃爍程序開始,逐步進階到硬編碼的用戶認證信息提取,通過親手操作工具與記錄過程來累積經驗。
實用技巧與重點
乾貨- 核心工具:AVRdude(固件提取)、Binwalk(文件結構識別)、Ghidra(反編譯與分析)、Floss(敏感數據查找)、Object Dump(二進制檢查)
- Arduino硬體規格:ATmega微控制器(28個引腳、UART接口)、USB轉串口轉換器(32位引腳)、16兆赫晶體振盪器、5V與3.3V電源輸出
- 固件刷寫過程:下載INO文件 → Arduino IDE驗證 → 透過USB上傳至開發板
- 數據類型與內存映射:示例代碼中整數變數A=5、B=12對應寄存器R24;字符陣列硬編碼的用戶名「Alice」與密碼「password123」每個字符存儲在不同的內存位置
- Ghidra搜尋技巧:使用Ctrl+F搜尋變數、十六進制值與字符串;區分大小寫搜尋;利用函數列表直接跳轉至主函數
- 診斷端口類型:UART(串列接口)、JTAG、USB-B接口
- 測試方法:萬用表連通性測試(零歐姆表示正常)、電壓檢測(確認5V與3.3V輸出正常)
- 學習資源:官方GitHub頁面包含所有幻燈片、INO文件、Ghidra導出資源
結論
結論“逆向工程是一門需要系統思維與工具掌握的技藝,從硬體拆解、軟體反編譯到敏感數據提取的完整流程,只要掌握核心工具、記錄過程、持續練習,初學者也能有效地分析與理解任何設備或程序的運作邏輯。”
完整解析
詳細逆向工程的本質是分析現有物品來提取、複製或理解其技術信息。本講座將其分為硬體與軟體兩個領域,展示了如何用Arduino作為教學案例,從最基礎的物理檢測進階到二進制代碼分析。
硬體逆向工程的第一步是物理檢查。講者帶領現場學員識別Arduino開發板上的各個芯片,包括ATmega微控制器(Arduino的「大腦」,負責輸入輸出與周邊控制)、USB轉串口轉換器、晶體振盪器與電容器。每個組件都需要查閱數據手冊以確認其功能、引腳數與使用的接口協議。識別完成後,使用萬用表進行連通性測試,在兩端分別接觸探針,若聽到嗶聲且屏幕顯示0.00歐姆,則表示該電路連接正常;同時也要測量5V與3.3V電源輸出是否符合預期,確保電路板整體工作狀態良好。這個過程對於排查故障或驗證新購入的組件特別重要。
軟體逆向工程則從固件提取開始。講者使用預先準備好的ELF文件(可執行與可鏈接格式),演示如何透過Binwalk等工具分析文件結構,再用Ghidra這個反編譯器查看汇編代碼與反編譯後的C代碼。這裡的關鍵洞察是:同一個程序存在於三種形式——高級語言的C代碼、中間層的汇編代碼、與最底層的二進制/十六進制。以簡單的加法程序(5+12=17)為例,用高級語言寫起來只需三行,但轉換為汇编後會增加數倍的指令行數,到了二進制表示時更是難以直接閱讀。因此逆向工程師需要學會在這些層級間轉換思維。
實踐階段,講者指導學員將包含LED閃爍邏輯與硬編碼用戶認證信息的INO程序刷入Arduino。這個「GiveMe_attitude」程序(名字源於內存中的一個位置)會執行兩項操作:將兩個整數相加,並打印出用戶凭证(用戶名Alice、密碼password123)。隨後在Ghidra中打開對應的ELF文件,使用Ctrl+F搜尋變數名稱與十六進制值,追蹤這些數據在內存中的位置與對應的寄存器。例如搜尋變數BD時會發現其映射到寄存器R24;搜尋字符串時,Ghidra會列出所有硬編碼在二進制中的文本,包括用戶名與密碼。這展示了即使只有二進制文件而沒有源代碼,仍然可以用反編譯器輕鬆提取出敏感信息。
講座結尾強調了學習的實踐性:掌握Ghidra、Binwalk與Object Dump等核心工具,建立記錄逆向過程的習慣(這樣遇到類似設備時能加快分析速度),透過重複練習逐漸累積經驗。她推薦了YouTube頻道與GitHub教程作為自主學習資源,並表示Kali Linux內建了大多數所需工具,初學者可以免費開始學習。
關鍵時刻
Pipeline v2帶時間戳的重點,會在逐字稿層級分析上線後產生。目前請先透過原始影片觀看。
事實查核
Pipeline v2說法查證是下一次管線升級的一部分。KeyFrame 只會顯示它真正能驗證的內容。

