由于之前使用的都是前辈打包好的工具包镜像,QEMU等常用工具已安装完成,及之前使用QEMU时没有进行记录,导致本次在进行固件仿真时遇到了很多小问题,浪费了不少时间,本想对常见固件仿真进行汇总,由于篇幅太长看起来较为杂乱,故拆分开进行记录。
QEMU 简介
Qemu是一个开源的托管虚拟机,通过纯软件来实现虚拟化模拟器,几乎可以模拟任何硬件设备。比如:Qemu可以模拟出一个ARM系统中的:CPU、内存、IO设备等,然后在这个模拟层之上,可以跑一台ARM虚拟机,这个ARM虚拟机认为自己在和硬件进行打交道,但实际上这些硬件都是Qemu模拟出来的。
QEMU 支持两种操作模式:
user mode : qemu-mips(mipsel/arm)-static。可以利用动态代码翻译机制来执行不同主机架构的代码,用户只需要将各种不同平台的处理编译得到的Linux程序放在QEMU虚拟中运行即可,其他的事情全部由QEMU虚拟机来完成,不需要用户自定义内核和虚拟磁盘等文件。
system mode:qemu-system-mips(mipsel) : 用户可以为QEMU虚拟机指定运行的内核或者虚拟硬盘等文件,利用其它VMM(Xen, KVM)来使用硬件提供的虚拟化支持,创建接近于主机性能的全功能虚拟机。。
安装环境:
系统版本:Ubuntu 18.04
逆向软件:IDA Pro 7.6
调试固件:netis(WF2533)EN-V1.3.29493
QEMU :user mode
Qemu安装
1.通过apt-get安装:
$ sudo apt-get install qemu
//system mode,包含qemu-system-mips,qemu-system-mipsel,qemu-system-arm等
$ sudo apt-get install qemu-system //安装系统模式的qemu
//user mode,包含qemu-mips-static,qemu-mipsel-static,qemu-arm-static等
$ sudo apt-get install qemu-user-static // 安装用户模式的qemu
2.通过下载QEMU的源码安装:
1.安装依赖库文件
$ sudo apt-get update
$ sudo apt-get install libglib2.0 libglib2.0-dev
$ sudo apt-get install autoconf automake libtool
2.下载QEMU的源码
$ cd /opt
$ sudo git clone git://git.qemu-project.org/qemu.git
$ cd qemu
$ sudo git submodule update --init pixman
$ sudo git submodule update --init dtc
3.编译和安装QEMU
$ (sudo ./configure --static && sudo make && sudo make install)
QEMU固件仿真:
qemu较于其他仿真程序而言,其不能直接运行固件,也就是不能直接将固件进行仿真,只能运行固件中某些程序,仿真前需要对设备固件用fmk或者binwalk进行解包后再进行操作。
1.将固件递归解包
binwalk -Me firmware
2.将qemu-mips拷贝到squashfs-root根路径下
cp $(which qemu-mips) ./qemu-mip
chmod +x qemu-mips
3.运行固件仿真命令
chroot命令将当前路径./设为根目录,然后运行./qemu-arm-static文件
3. sudo chroot . ./qemu-mips elfname
可以看到上图QEMU成功运行。
1. 使用qemu-mips运行boa,通过-g参数绑定本地端口,进入gdb单步模式。
chroot . ./qemu-mipsel -g 12345 ./bin/boa
2.打开IDA选择/bin/boa文件
3.可以通过readelf -h ./bin/boa
查看需要选择的架构
4.选择MIPS little endian架构
5.在IDA中,选择Remote GDB debugger来attach
6.点击“Debug options”配置调试选项,高级设置
7.勾选Suspend on debugging start, Suspend on process entry point,Suspend on thread start/exit。
8.点击Set specific options,执行目标进程的架构为MIPS Little-endian
9.设置gdbserver地址
10.填写远程主机IP和端口,如下图。
11.附加正在运行的线程
12.动态调试设置成功
由于路由器固件分析IDA F5插件不支持 mips,查找资料过程中发现了IDA插件Retdec,由于不支持ida 7.x 系列,没有进行尝试,有兴趣的小伙伴可以自行尝试。
question 1:
bin/busybox: Invalid ELF image for this architecture
错误原因:
未正确选择大小端及架构
解决方法:
使用 readelf -h file
查看架构是ARM还是MIPS
根据不同架构选择不同qemu模式qemu-arm、qemu-mipsel
question 2:
chroot: cannot change root directory to 'qemu-mipsel': Not a directory
问题原因:
即使已经把qemu-mipsel文件拷贝到当前目录中,但没有把相应的动态链接库拷贝进去,qemu-mipsel依然无法运行。
解决方法:
ldd ./qemu-mips
查看依赖的动态链接库,在qemu-mips所在目录下建立新目录将动态链接库拷贝进去,即可正常运行
question 3:
./qemu-mipsel: error while loading shared libraries: libglib-2.0.so.0: cannot open shared object file: No such file or directory
问题原因:
类似于question 2,使用chroot是用来定义根目录的,这里没有共享库故无法运行;
解决方法:
查找到所要求的库的位置,进行动态链接库补全;
locate libglib-2.0.so.0
参考链接
https://www.freesion.com/article/2796306431/
https://blog.csdn.net/whatday/article/details/53696538
https://bbs.pediy.com/thread-246192.htm
https://bbs.pediy.com/thread-227079.htm
E
N
D
关
于
我
们
Tide安全团队正式成立于2019年1月,是新潮信息旗下以互联网攻防技术研究为目标的安全团队,团队致力于分享高质量原创文章、开源安全工具、交流安全技术,研究方向覆盖网络攻防、系统安全、Web安全、移动终端、安全开发、物联网/工控安全/AI安全等多个领域。
团队作为“省级等保关键技术实验室”先后与哈工大、齐鲁银行、聊城大学、交通学院等多个高校名企建立联合技术实验室。团队公众号自创建以来,共发布原创文章370余篇,自研平台达到26个,目有15个平台已开源。此外积极参加各类线上、线下CTF比赛并取得了优异的成绩。如有对安全行业感兴趣的小伙伴可以踊跃加入或关注我们。