欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

六、QEMU+MIPS环境搭建(下)

程序员文章站 2022-07-05 16:03:09
...

QEMU System模式的使用

上一次我们分享的是QEMU User模式的使用方法,使用User模式的QEMU,确实可以满足大多数的模拟运行场景,但它也确实存在很多硬伤。

比如QEMU的User模式并不能完整的模拟mips-linux的内核环境,导致一些应用程序需要严重依赖比如/proc目录下或/sys目录下的内存文件,而这些文件一般都是Linux内核在启动时产生的,甚至有些文件只有在真正的mips-linux操作系统中才存在,或者只有在真正的mips-linux系统中的这些文件才真正有参考意义。

又比如在路由器固件逆向分析过程中,特别是在ShellCode开发时,你可能写了一段汇编代码,编译后你发现它不能正常工作,那你就需要进行调试,而在Ubuntu虚拟机中目前又不存在能直接使用的mips-linux调试器,所以这样的调试环境搭建工作也会花费你很大精力。

所以,最好的办法就是使用QEMU的System模式运行一个mips架构的Debian系统,然后在这个mips架构的Debian系统中开发ShellCode并进行调试。

同样的,书中使用的mips-debian系统也很老旧了,导致系统启动后在线安装一些编译器、调试器之类的软件都不行。后来,我在网上搜到了一篇关于如何使用qemu启动debian 9系统的文章(https://markuta.com/how-to-build-a-mips-qemu-image-on-debian/),这里我也进行了总结:

mips-debian 9的系统目前只支持在线安装,首先应该去debian的ftp站点上(http://ftp.debian.org/debian/dists/stable/main/installer-mips/current/images/malta/netboot/)下载启动盘:

$ wget http://ftp.debian.org/debian/dists/stable/main/installer-mips/current/images/malta/netboot/initrd.gz
$ wget http://ftp.debian.org/debian/dists/stable/main/installer-mips/current/images/malta/netboot/vmlinux-4.9.0-9-4kc-malta

如果出现404错误,可以网页打开文件所在目录,查看正确vmlinux来下载:
http://ftp.debian.org/debian/dists/stable/main/installer-mips/current/images/malta/netboot/
然后使用命令为mips-debian创建一个2G大小的模拟磁盘文件:

$ qemu-img create -f qcow2 hda.img 2G

然后就可以执行mips-debian系统的安装了:

$ qemu-system-mips -M malta \
  -m 512 -hda hda.img \
  -kernel vmlinux-4.9.0-9-4kc-malta \
  -initrd initrd.gz \
  -append "console=ttyS0 nokaslr" \
  -nographic

安装过程中会提示语言选择:
六、QEMU+MIPS环境搭建(下)
地理位置选择:
六、QEMU+MIPS环境搭建(下)
主机名配置:
六、QEMU+MIPS环境搭建(下)
域名配置:
六、QEMU+MIPS环境搭建(下)
软件镜像源所在位置:

六、QEMU+MIPS环境搭建(下)
六、QEMU+MIPS环境搭建(下)
网络代理设置:
六、QEMU+MIPS环境搭建(下)
这些配置一般选择默认值即可,如果默认值是空的,那就保持它为空。
稍后还会提示你设置root用户的密码:
六、QEMU+MIPS环境搭建(下)
然后设置普通用户的用户名:
六、QEMU+MIPS环境搭建(下)
普通用户的密码:
六、QEMU+MIPS环境搭建(下)
时区选择:
六、QEMU+MIPS环境搭建(下)
磁盘分区:
六、QEMU+MIPS环境搭建(下)
六、QEMU+MIPS环境搭建(下)
六、QEMU+MIPS环境搭建(下)
最后进行分区配置的确认:
六、QEMU+MIPS环境搭建(下)
六、QEMU+MIPS环境搭建(下)
确认无误后,选择“Yes”选项,就真正开始了系统安装过程:
六、QEMU+MIPS环境搭建(下)

经过大概1个小时左右(当然,这取决于你为qemu指定了多大的内存和你所在的网络情况),会提示安装一些方便开发用的工具,其中最重要的是SSH server:
六、QEMU+MIPS环境搭建(下)
最终,整个系统安装完成:
六、QEMU+MIPS环境搭建(下)
但,似乎并没有这么顺利,因为这里提示说找不到boot分区,所以,可能无法启动系统。没关系,先选择“Continue”继续:
六、QEMU+MIPS环境搭建(下)
此处需要选择“Go Back”选项,并在页面中选择“Execute Shell”选项,然后在给出的shell中输入“poweroff命令”。

因为在刚刚系统安装过程的末尾给出提示指出,mips-debian系统还需要boot分区才能够正常引导,所以下一步我们需要从hda.img磁盘镜像文件中提取boot分区镜像:

1、挂载hda.img磁盘镜像文件:

sudo modprobe nbd max_part=63
sudo qemu-nbd -c /dev/nbd0 hda.img
sudo mount /dev/nbd0p1 /mnt

2、从挂载目录中拷贝boot分区中的重要文件:

cp -r /mnt/boot/initrd.img-4.9.0-9-4kc-malta .
cp -r /mnt/boot .

3、卸载工作

sudo umount /mnt
sudo qemu-nbd -d /dev/nbd0

MIPS-Debian系统网络配置

sudo apt-get install uml-utilities bridge-utils

修改/etc/network/interfaces:

# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback

auto ens33
iface ens33 inet dhcp
#auto br0
iface br0 inet dhcp
    bridge_ports ens33
    bridge_maxwait 0

修改/etc/qemu-ifup:

sudo /sbin/ifconfig $1 0.0.0.0 promisc up
sudo /sbin/brctl addif br0 $1
sleep 2

启动br0网卡:

$ sudo chmod a+x /etc/qemu-ifup
$ sudo /etc/init.d/networking restart
$ sudo ifdown ens33
$ sudo ifup br0

启动虚拟机:

$ sudo qemu-system-mips -M malta -m 512 -hda hda.img -kernel vmlinux-4.9.0-9-4kc-malta -initrd initrd.img-4.9.0-9-4kc-malta  -append "root=/dev/sda1 console=ttyS0 nokaslr" -net nic,macaddr=00:16:3e:00:00:02 -net tap -nographic

使用上面的步骤启动mips-debian系统后,mips-debian系统就能够共享Ubuntu虚拟机的网络连接了:
六、QEMU+MIPS环境搭建(下)
在MIPS-Debian系统安装完成以后,我们就可以在上面安装gcc、gdb、gdbserver等一些常用的开发和调试工具了,然后我们就可以在上面方便的开发和调试ShellCode了。

这一小节我们主要讲解了在什么情况下需要用到QEMU的System模式,并给出了MIPS-Debian系统的环境搭建步骤。

最后,希望本节的内容能够为你带来帮助。

下次我们将分享如何使用IDA对MIPS-Linux程序进行静态分析和动态调试的内容。

谢谢大家。

相关标签: 路由器安全