基於QEMU的固件二進制文件仿真


環境搭建和必要工具:

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文件,這時就需要進行交叉編譯。這一部分示例可以查看這篇文章

 

參考資料:

基於QEMU的NVRAM仿真

【技術分享】物聯網設備的固件分析技術

【技術分享】固件二進制代碼仿真及漏洞利用技術

【技術分享】物聯網設備安全分析之網絡攝像頭篇

Qemu用戶態模擬仿真並運行程序

Binwalk:固件分析利器(binwalk也可以分析trx后綴的固件)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM