QEMU固件仿真配合IDA进行远程调试
2023-3-21 06:31:49 Author: 白帽子(查看原文) 阅读量:26 收藏

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   
//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-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 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/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比赛并取得了优异的成绩。如有对安全行业感兴趣的小伙伴可以踊跃加入或关注我们


文章来源: http://mp.weixin.qq.com/s?__biz=MzAwMDQwNTE5MA==&mid=2650246584&idx=2&sn=1f303d0410ffc8603f4ed5ca212a0869&chksm=82ea5611b59ddf07eb948380f421d0ddda2d286fae3799a447abc96cd40e811032c77d634dad#rd
如有侵权请联系:admin#unsafe.sh