首页 > 技术文章 > 基于QEMU的固件二进制文件仿真

from-zero 2020-03-22 13:52 原文

环境搭建和必要工具:

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后缀的固件)

推荐阅读