基于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文件,这时就需要进行交叉编译。这一部分示例可以查看这篇文章。
参考资料:
Binwalk:固件分析利器(binwalk也可以分析trx后缀的固件)