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

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

安装过程中会提示语言选择:
在这里插入图片描述
地理位置选择:
在这里插入图片描述
主机名配置:
在这里插入图片描述
域名配置:
在这里插入图片描述
软件镜像源所在位置:

在这里插入图片描述
在这里插入图片描述
网络代理设置:
在这里插入图片描述
这些配置一般选择默认值即可,如果默认值是空的,那就保持它为空。
稍后还会提示你设置root用户的密码:
在这里插入图片描述
然后设置普通用户的用户名:
在这里插入图片描述
普通用户的密码:
在这里插入图片描述
时区选择:
在这里插入图片描述
磁盘分区:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最后进行分区配置的确认:
在这里插入图片描述
在这里插入图片描述
确认无误后,选择“Yes”选项,就真正开始了系统安装过程:
在这里插入图片描述

经过大概1个小时左右(当然,这取决于你为qemu指定了多大的内存和你所在的网络情况),会提示安装一些方便开发用的工具,其中最重要的是SSH server:
在这里插入图片描述
最终,整个系统安装完成:
在这里插入图片描述
但,似乎并没有这么顺利,因为这里提示说找不到boot分区,所以,可能无法启动系统。没关系,先选择“Continue”继续:
在这里插入图片描述
此处需要选择“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虚拟机的网络连接了:
在这里插入图片描述
在MIPS-Debian系统安装完成以后,我们就可以在上面安装gcc、gdb、gdbserver等一些常用的开发和调试工具了,然后我们就可以在上面方便的开发和调试ShellCode了。

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

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

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

谢谢大家。

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

后知晚觉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值