使用 AI 輔助逆向工程將 ThinkPad X61 移植到 coreboot

AI 輔助逆向工程加速韌體移植

將大型語言模型 (LLMs) 整合到逆向工程工作流程中,可以將原本需要數月的韌體移植時間縮短至幾週。以 ThinkPad X61 為例,開發者使用 LLM 來分析廠商的 BIOS 模組並提取初始化序列,儘管該過程仍需要大量的人力介入與領域專業知識,以修正幻覺 (hallucinations) 與硬體特定的錯誤。

挑戰:移植 ThinkPad X61

ThinkPad X61 使用 GM965 北橋與 ICH8 南橋。雖然與受支援的平台(如 X200 (GM45))相似,但 X61 僅支援 DDR2,且缺乏洩漏的文檔,這使得逆向工程成為 coreboot 移植的唯一可行路徑。先前使用 SerialICE 等工具(在 QEMU 中執行韌體並將 IO/MMIO 轉發至實際硬體)的嘗試均未能成功產生可用的移植版本。

方法論:結合傳統工具與 LLMs

資料提取與基準建立

在利用 AI 之前,開發者透過標準 coreboot 工具從運作中的系統中傾印 (dump) 資訊,以建立一個已知的良好基準:

  • inteltool: 用於 PCI 配置空間以及北橋/南橋暫存器概覽。
  • acpidump, acpixtract, and iasl: 用於傾印與反編譯 ACPI 表,以理解裝置描述與電源管理。
  • ectool: 用於分析嵌入式控制器 (EC) 的 RAM 與行為。

AI Agent 整合

為了分析 Phoenix BIOS,開發者使用 bios_extract 將映像檔分割成模組,並為 AI agent (Claude Opus 4.6) 提供特定工具:

  • ghidra-cli: 用於分析 PE32 模組,例如在 raminit 中使用的 Intel Memory Reference Code (MRC),在這種情況下,C 風格的反編譯效果最為顯著。
  • radare2: 用於處理韌體的 16-bit 實模式 (real mode) 部分。

「情緒逆向工程」的現實情況

雖然初步結果看似立竿見影,但開發者指出,「情緒逆向工程」(vibe reverse engineering,僅依賴 LLM 輸出) 對於生產等級的韌體而言是不夠的。LLM 需要根據開發者對 X60 與 X200 平台的先前經驗進行大量的「手把手指導」與引導。

過程中需要進行的關鍵修正包括:

  • GPIO Muxing: 識別出 X61 在 GPIO42 上具有用於 SMBUS 的 GPIO 多工 (muxing),這會影響 SPD 與 EEPROM 的可見性。
  • 記憶體規格: 將記憶體控制器支援修正為 DDR2 533MT/s 與 666MT/s(LLM 錯誤地建議了 666/800MT/s)。
  • 暫存器存取: 修正錯誤的暫存器讀寫大小(例如,將 32-bit 寫入 16-bit 暫存器)並將 GMCH FSB 頻率的來源修正為 MCHBAR 暫存器。
  • CAS Semantics: 解決 coreboot 編碼與 MRC 編碼在 CAS 方面的混淆。

硬體測試與燒錄工作流程

測試是使用帶有 RS232 UART 連接器的擴充塢 (docking station) 進行的,用於序列埠輸出。燒錄則是使用 CH341A SPI 燒錄器,並透過夾具連接到電路板底部的 SOIC8 flash chip 上。使用的燒錄指令為:

flashprog -p ch341a_spi --ifd -i bios -w build/coreboot.rom

上游程式碼與品質保證

將程式碼提交至上游 (upstreaming) 時,揭露了幾個 LLM 引入或遺漏的「在我電腦上可以跑」的錯誤。經由資深貢獻者的徹底審查,確認了以下問題:

  • 幻覺語義 (Hallucinated Semantics): 在 GM965 0xa00 MCHBAR 範圍內,出現了錯誤的暫存器名稱與幻覺的區塊語義。
  • 邏輯錯誤: 索引錯誤的時序表 (timing tables) 以及意義錯誤的位元欄位 (bitfields)。
  • 硬編碼值 (Hardcoded Values): 某些初始化位元與裝置啟用設定僅適用於 X61,卻被呈現為通用的晶片組程式碼。

對韌體領域的更廣泛影響

此專案展示了逆向工程閉源二進位韌體的可能性正變得越來越高。開發者建議,這最終可以應用於 Intel FSP (Firmware Support Package),這是一種 Ghidra 可以分析的 32-bit PE code。這種轉變可能會降低晶片廠商依賴閉源二進位韌體的動機,因為理解與替換它的門檻正在持續降低。

社群洞察

社群討論強調了 X61 這一外型規格的持久吸引力,以及 LLM 能賦能非專業開發者處理先前「不可能」的移植專案的潛力。一位使用者指出:

"What a mixed blessing is it now that theoretically, especially as LLMs increase in competence, an idiot like me might actually be able to port Coreboot to an unsupported platform... it's probably the best shot I have since I probably won't find myself in such a scenario."

此外,開發者也透露將會把 X61 移植到使用 Rust 編寫的 coreboot/u-boot 替代方案 fstart

Sources