環境搭建和必要工具:
Ps. 在Ubuntu16 (32bit)環境下使用QEMU對ARM架構的固件進行仿真。
1. 獲取固件
之前的文章物聯網設備固件獲取中詳細寫了如何獲取目標固件,一般會獲得trx或者bin后綴的固件文件。
2. 使用一些命令或工具對固件進行信息收集和初步分析
① file命令
file xxx.trx/xxx.bin
② hexdump命令
hexdump -C filename > hex.txt //輸出文件的十六進制形式到文件hex.txt中
③ strings命令 -- 可查看固件文件中的一些有實際意義的字符串,比如固件的型號等信息。
strings filename > strings.txt //命令顯示目標文件中的可打印字符串,結果輸出到strings.txt中
④ binwalk工具
安裝binwalk:https://github.com/ReFirmLabs/binwalk/wiki/Quick-Start-Guide
binwalk xxx.trx/xxx.bin
binwalk -e xxx.trx/xxx.bin //提取文件系統
⑤ readelf命令
readelf -h elf-filename //查看elf目標文件的文件頭內容 readelf -a elf-filename //顯示二進制程序的全部信息,可查看依賴的庫的信息 readelf -d elf-filename //指令查看二進制文件需要的共享庫
3. QEMU安裝和仿真
sudo apt-get install qemu //安裝系統模式的qemu
sudo apt-get install qemu-user-static // 安裝用戶模式的qemu
仿真之前需要將qemu-arm-static二進制文件復制到固件的根文件夾中。
可使用whereis命令查看qemu-arm-static的安裝位置:
whereis qemu-arm-static // /usr/bin/qemu-arm-static
然后,
cp /usr/bin/qemu-arm-static ./ //當前路徑為.......extracted/squashfs-root
仿真命令為:
sudo chroot ./ ./qemu-arm-static elf-filename
//chroot命令將當前路徑./設為根目錄,然后運行./qemu-arm-static文件,仿真elf-filename文件
(or)sudo qemu-arm-static -L ./ elf-filename //當前路徑下,使用-L選項指定庫文件搜索路徑
4. 注意
有時在仿真時,還會出現缺少lib文件的情況,因為固件架構是ARM,所以我們必須要找到ARM架構的lib文件,這時就需要進行交叉編譯。這一部分示例可以查看這篇文章。
參考資料:
Binwalk:固件分析利器(binwalk也可以分析trx后綴的固件)