qemu是乙個處理器模擬軟體,可以用來在pc中模擬arm、mips等多種架構的軟硬體執行環境。qemu主要有兩種模擬模式:
user mode;
system mode。
system模式中,它可以在乙個主機環境中虛擬不同的虛擬計算機系統,比如可以在ubuntu系統中虛擬出乙個mips架構的debian系統。
user模式中,它可以執行乙個為其他處理器編寫的應用程式,比如可以在x64-ubuntu系統中直接執行乙個mips-linux的應用程式。
通常情況下,我們在路由器韌體程式逆向分析過程中,會比較依賴使用qemu,因為在真實的路由器環境中通常不存在除錯服務程式,也就不能使用ida等工具進行動態除錯了。而qemu除了能夠模擬不同硬體架構應用程式的執行環境外,也能夠使待除錯的程式以除錯模式啟動,這樣就能配合ida等工具進行動態分析了。
qemu功能強大,其早期版本安裝起來也比較麻煩,尤其像書中需要使用靜態鏈結的qemu的情況。但在ubuntu16.04版本中,只需要一條命令就可以把qemu的user模式和system模式的可執行檔案安裝好:
sudo
apt-get
install qemu-user-static qemu-system-mips
注意這裡我們安裝的是qemu-user模式的static版本,也就是靜態鏈結的qemu。
安裝好qemu命令後,我們可以編譯乙個我們自己編寫的mips-linux應用程式。要完成這個目標,我們需要首先安裝乙個能夠編譯mips-linux架構應用程式的編譯器,同樣的,使用一條簡單的命令就可以完成:
sudo
apt-get
install gcc-mips-linux-gnu
安裝好編譯器以後,我們使用一段helloworld c**測試一下:
#include
intmain
(void
)
編譯這段**的命令如下:
$ mips-linux-gnu-gcc \
-static hello.c -o hello
然後使用qemu命令執行測試:
$ cp /usr/bin/qemu-mips-static .
$ qemu-mips-static ./hello
hello
另外,我們也可以使用「韌體分析利器-binwalk」一節中使用binwalk命令解包的d-link dir605l韌體為例,使用qemu-mips-static命令執行韌體中的"ls /"命令:
$ pwd
/home/test/.../squashfs-root-0
$ ls
bin dev etc lib mydlink proc
sbin tmp usr var web web-lang
$ which qemu-mips-static
/usr/bin/qemu-mips-static
$ cp /usr/bin/qemu-mips-static .
$ sudo
chroot
. \ /qemu-mips-static /bin/ls /
bin lib
qemu-mips-static usr
web-lang dev
mydlink sbin
var etc
proc tmp
web$
上面的命令首先將qemu-mips-static命令拷貝到d-link dir605l韌體檔案系統的根目錄下,然後使用「chroot .」命令將系統的根目錄重定位為「.」,也就是當前目錄,然後使用「/bin/ls /」命令檢視系統根目錄下的檔案,由命令的執行結果可以知道,我們已經使用qemu-mips命令成功的將d-link dir605l韌體檔案系統中bin/ls可執行檔案執行了。
在下一次的分享中,我會繼續介紹qemu+mips環境搭建的qemu system模式部分。
希望本次的分享能夠對你有幫助。謝謝大家。
Ubuntu上LAMP環境搭建
1.安裝apache 2 sudo apt get install apache2 測試 firefox 127.0.0.1 2.安裝php sudo apt get install php5 安裝php5 sudo etc init.d apache2 restart 重啟apache 測試 首先...
PC上LINUX環境搭建
1.安裝linux 本人是64位系統 vm版本 vmware workstation full 8.0.2 591240 後來發現裝不上32位的庫。又裝了一下32位的12.04.飛凌使用者盤提供的。安裝有這樣乙個提示 piix4 smbus host smbus controller not ena...
ubuntu上samba環境搭建
1 ubuntu上安裝smb伺服器。網路上有很多安裝的步驟,所以不用記錄。2 安裝完後開啟smb伺服器。這裡和redhat系統上有點區別,在redhat使用service smb start 在ubuntu 使用的是smbd start 3 在linux系統上簡單測試。smbclient l 10....