Cisco RV系列路由器是Cisco公司开发的小型家用路由器,但是其相关模拟资料非常有限,因为其具有较多的依赖,于是利用时间,对Cisco RV系列路由器模拟进行了研究。模拟平台为qemu平台,用户级别和系统级别均进行了模拟实现。
一)固件解包
固件型号:RV34X-v1.0.03.18-2020-06-11-11-55-25-AM.img
解包方式:和传统的.bin固件不相同,通过binwalk解压img文件,会得到7z压缩格式的压缩包,继续对压缩包进行连续的解压,即可得到最后包含openwrt-rootfs.img的文件,利用binwalk解压该文件,即可获得文件系统。根据观察,也可知道该路由器固件基于openwrt开发。
binwalk -e openwrt-comcerto2000-hgw-rootfs-ubi_nand.img
二)qemu模拟api级别系统
chmod a+x bin/sh chmod a+x bin/busybox mount --bind /dev dev mount --bind /proc proc sudo chroot . ./qemu-arm-static bin/sh
为了分析路由器的启动流程,我们进入etc/init.d文件夹下分析相关启动脚本, init.d目录包含许多系统各种服务的启动和停止脚本,里面的shell脚本能够响应start,stop,restart,reload命令来管理某个具体的应用。我们查看init.d文件夹下的各个脚本文件:
我们发现init.d文件夹下有nginx服务,因此可以推测路由器的web服务框架为nginx框架,因此为了模拟路由器的web服务,我们利用脚本启动nginx服务。
cd etc/init.d/ ./nginx start
发现nginx服务没有正常启动,其中报错信息如下,有多个依赖错误,需要我们依次解决。首先是缺少confd相关服务。
我们利用全局搜索“confd”字符串:
grep -r "confd"
发现在init.d的confd执行文件中进行了confd服务的启动,因此我们尝试启动confd服务:
./confd start
但是启动confd时发现错误:
根据错误提示我们知道是ssl相关配置证书出现问题,因此我们继续查询ssl相关配置证书的文件,发现生成默认证书:generate_default_cert脚本。
执行该脚本:
generate_default_cert
执行后发现提示缺少相关的uci文件:
查找uci相关文件,定位到boot文件:
因此我们知道,需要先进行boot启动:
./etc/init.d/boot
因此我们可以知道整体的模拟流程:
chmod -R 777 rootfs cd rootfs sudo mount --bind /proc proc sudo mount --bind /dev dev chroot . ./qemu-arm-static /bin/sh /etc/init.d/boot boot generate_default_cert /etc/init.d/confd start /etc/init.d/nginx start
当再次启动nginx服务时,发现端口被占用:
怀疑是之前nginx服务关闭时出现问题,相关端口没有完全关闭。因此我们重启nginx服务。
./nginx stop ./nginx start
现在访问127.0.0.1,即可进入cisco登录界面。
三)qeumu架构级模拟
查看架构,得知路由器为ARM小端架构,因此进行系统模拟,系统模拟启用脚本如下:
wget https://people.debian.org/~aurel32/qemu/armhf/debian_wheezy_armhf_standard.qcow2 wget https://people.debian.org/~aurel32/qemu/armhf/vmlinuz-3.2.0-4-vexpress wget https://people.debian.org/~aurel32/qemu/armhf/initrd.img-3.2.0-4-vexpress sudo apt-get install bridge-utils sudo brctl addbr Virbr0 sudo ifconfig Virbr0 192.168.153.1/24 up sudo tunctl -t tap0 sudo ifconfig tap0 192.168.153.11/24 up sudo brctl addif Virbr0 tap0 #qemu启动 sudo qemu-system-arm -M vexpress-a9 -kernel vmlinuz-3.2.0-4-vexpress -initrd initrd.img-3.2.0-4-vexpress -drive if=sd,file=debian_wheezy_armhf_standard.qcow2 -append "root=/dev/mmcblk0p2" -net nic -net tap,ifname=tap0,script=no,downscript=no -nographic -s #qemu网卡配置 ifconfig eth0 192.168.153.2/24 up #上传根目录文件 scp -r rootfs/ root@192.168.153.2:~/ sudo mount --bind /proc proc sudo mount --bind /dev dev chroot . /bin/sh
文章来源:
本文章由作者:佐须之男 整理编辑,原文地址: 使用qemu模拟仿真Cisco RV路由器