0X00 前言

由于之前使用的都是前辈打包好的工具包镜像,QEMU等常用工具已安装完成,及之前使用QEMU时没有进行记录,导致本次在进行固件仿真时遇到了很多小问题,浪费了不少时间,本想对常见固件仿真进行汇总,由于篇幅太长看起来较为杂乱,故拆分开进行记录。

0X01 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 //systemmode,包含qemu-system-mips,qemu-system-mipsel,qemu-system-arm等$ sudo apt-getinstall qemu-system //安装系统模式的qemu//usermode,包含qemu-mips-static,qemu-mipsel-static,qemu-arm-static$ sudo apt-getinstall 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 libtool2.下载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 dtc3.编译和安装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-mipchmod +x qemu-mips
3.运行固件仿真命令
chroot命令将当前路径./设为根目录,然后运行./qemu-arm-static文件
3. sudo chroot . ./qemu-mips elfname

可以看到上图QEMU成功运行。

0X02 IDA远程调试


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 系列,没有进行尝试,有兴趣的小伙伴可以自行尝试。

0X03 QEMU仿真过程中遇到的问题:

question 1:
bin/busybox: Invalid ELF image forthis architecture
错误原因:
未正确选择大小端及架构

解决方法:
使用 readelf -h file查看架构是ARM还是MIPS
根据不同架构选择不同qemu模式qemu-arm、qemu-mipsel
question 2:
chroot: cannot change root directoryto'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是用来定义根目录的,这里没有共享库故无法运行;
解决方法:
查找到所要求的库的位置,进行动态链接库补全;
locatelibglib-2.0.so.0

参考链接https://www.freesion.com/article/2796306431/https://blog.csdn.net/whatday/article/details/53696538https://bbs.pediy.com/thread-246192.htmhttps://bbs.pediy.com/thread-227079.htm
E
N
D
Tide安全团队正式成立于2019年1月,是新潮信息旗下以互联网攻防技术研究为目标的安全团队,团队致力于分享高质量原创文章、开源安全工具、交流安全技术,研究方向覆盖网络攻防、系统安全、Web安全、移动终端、安全开发、物联网/工控安全/AI安全等多个领域。
团队作为“省级等保关键技术实验室”先后与哈工大、齐鲁银行、聊城大学、交通学院等多个高校名企建立联合技术实验室。团队公众号自创建以来,共发布原创文章370余篇,自研平台达到26个,目有15个平台已开源。此外积极参加各类线上、线下CTF比赛并取得了优异的成绩。如有对安全行业感兴趣的小伙伴可以踊跃加入或关注我们
继续阅读
阅读原文