Gemei A330

反組譯韌體


官方韌體(*.HXF)檔案包含所有韌體程式、資源以及圖片檔案,因此,我們只需要解壓縮HXF檔案就可以開始逆向官方韌體程式,網路上已經有高手將解壓縮HXF檔案寫成一個工具(HXF Extract),該工具除了可以解壓縮之外,也支援再壓縮的功能。

需要注意的是,開啟該工具後,可能會出現類別未登錄的錯誤訊息,若出現該訊息,代表沒有註冊comdlg32.ocx物件,使用者只需要下載comdlg32.ocx並使用如下指令進行註冊即可

c:\> regsvr32 comdlg32.ocx


該工具的操作相當簡單,只需要點選Unpack HXF按鈕,即可選擇HXF檔案進行解壓縮,解壓縮完成後會產生out_hxf資料夾,該資料夾裡面就會包含許多圖片、韌體程式、DL等檔案,而GA330的韌體檔案位於codecs\MPU.BIN,針對這個檔案,使用如下指令即可進行反組譯

c:\> arm-linux-objcopy --change-addresses=0x00000000 -I binary -O elf32-littlearm -B arm MPU.BIN rom-elf
c:\> arm-linux-objcopy --set-section-flags .data=code rom-elf
c:\> arm-linux-objdump -d rom-elf > rom.dis

因為解壓縮的HXF包含許多DL、BIN檔案,如何知道哪一個BIN檔案才是ARM的主程式呢?因為ARM的主程式開頭是從中斷向量開始執行,因此,只要反組譯後可以看到類似的中斷向量指令,就代表是ARM的主程式

MPU.bin: file format elf32-littlearm
Disassembly of section .data:

00000000 "_binary_MPU_BIN_start":
  0: ea000033  b d4 "_binary_MPU_BIN_start+0xd4"
  4: ea000011  b 50 "_binary_MPU_BIN_start+0x50"
  8: ea000016  b 68 "_binary_MPU_BIN_start+0x68"
  c: ea000021  b 98 "_binary_MPU_BIN_start+0x98"
 10: ea00001a  b 80 "_binary_MPU_BIN_start+0x80"
 14: eafffffe  b 14 "_binary_MPU_BIN_start+0x14"
 18: ea000006  b 38 "_binary_MPU_BIN_start+0x38"
 1c: eaffffff  b 20 "_binary_MPU_BIN_start+0x20"
 20: e24dd004  sub sp, sp, #4 ; 0x4
 24: e92d0001  stmdb sp!, {r0}
 28: e59f01a4  ldr r0, [pc, #420] ; 1d4 "_binary_MPU_BIN_start+0x1d4"

看到上面反組譯的片段程式碼,即可知道MPU.bin檔案是主要韌體程式。


返回上一頁