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檔案是主要韌體程式。