当前位置:网站首页>qemu虚拟机模拟固件环境搭建
qemu虚拟机模拟固件环境搭建
2022-08-09 15:01:00 【irontys】
qemu虚拟机模拟固件环境搭建
声明:本文主要目的为供自己今后参考
一、准备虚拟机和硬件
(一)安装binwalk和qemu
参考文章一: 通过qemu复现路由器漏洞 (参考部分:安装binwalk)
相关命令:
git clone https://github.com/devttys0/binwalk.git
sudo apt-get install qemu qemu-system qemu-user-static binfmt-support
(二)binwalk提取bin文件
1.安装sasquatch
sudo apt-get install build-essential liblzma-dev liblzo2-dev zlib1g-dev
git clone https://github.com/devttys0/sasquatch.git
cd sasquatch
chmod +x build.sh
./build.sh
上述第一条命令的作用为:安装C/C++编译器、liblzma、liblzo 和 zlib 相关依赖库。
2.提取bin文件(binwalk并不能够提取所有的bin文件,有的bin文件会出错)
参考文章二:CSDN-使用qemu进行路由器环境的虚拟搭建-梵歆
binwalk -Me XXXXX.bin
之后会在当前文件夹得到_XXXXX.bin.extracted_文件,其中的squashfs-root文件就是硬件设备的root文件(这个文件夹就可以理解成目的设备)。
验证一下 输入tree命令,
出现如下的效果图

找squashfs-root中的一个可执行文件用file命令查看下其属性(为后续配置搜集信息)

(解释:一会儿启动虚拟机的命令为qemu-system-mips,该命令分为三部分,上图中如果出现MSB第三个部分就用mips,如果是LSB则用mipsel,如果上图不是MIPS32而是MIPS64,第三个部分为相应的mips64和mipsel64,这表示接下来qemu进行虚拟环境搭建的时候需要选择MIPS的内核,如果不是MIPS而是ARM或其他的,第三个部分为arm或其他的。)
在该网址下载mips内核等两个资源,本次搭建过程使用的是vmlinux-2.6.32-5-4kc-malta和debian_squeeze_mips_standard.qcow2,这两个文件如果接下来过程不放在_XXXXX.bin.extracted_文件的同级目录下,就要放在qemu的一个文件夹底下(好像是qemu/bin)。
二、配置网络、搭建网桥
参考部分:配置网络-方法一
(一)本机创建网桥
建议在当前_XXXXX.bin.extracted_文件夹下创建init.sh文件(sh文件,名字自己起)
放入如下代码:(注意,IP地址需改为自己网络的ip地址)
#!/bin/sh
sudo brctl addbr virbr0
sudo ifconfig virbr0 192.168.1.55/24 up
sudo tunctl -t tap0
sudo ifconfig tap0 192.168.1.56/24 up
sudo brctl addif virbr0 tap0
sudo qemu-system-mips -M malta -kernel vmlinux-2.6.32-5-4kc-malta -hda debian_squeeze_mips_standard.qcow2 -append "root=/dev/sda1 console=tty0" -netdev tap,id=tapnet,ifname=tap0,script=no -device rtl8139,netdev=tapnet -nographic
保存.sh文件后,在当前文件夹下的终端键入如下命令:
chmod +x init.sh
./init.sh
此代码也可以一行一行键入,不过电脑重启后,网络配置环境会丢失,需要重新键入,而.sh文件直接执行就可以。
如果最后一行代码不加-nographic就会弹出qemu虚拟机窗口。
(二)虚拟机配置网络
登录root用户,密码为root

在虚拟机里配置ip
ifconfig eth0 192.168.1.57/24 up
此时就应该可以ping通主机。
三、启动路由器
参考文章二:CSDN-使用qemu进行路由器环境的虚拟搭建-梵歆
(一)压缩目标硬件系统文件上传至虚拟机
回到_XXXXX.bin.extracted_文件夹的终端下,键入如下命令:
cd _XXXXX.bin.extracted_
tar -czvf root.tar squashfs-root/
scp root.tar [email protected]:/root/
输入密码:root
建议创建init.sh文件,该文件的作用是完成虚拟机内网络配置及相关文件的挂载,因为重启虚拟机后,原来的网络配置不能保存。(如果想直接通过该文件启动硬件设备相关功能也可以自定义该文件,本次init.sh文件不做涉及),init.sh文件内容及上传至虚拟机的命令如下:
#!/bin/sh
ifconfig eth0 192.168.1.57/24 up
mount -o bind /dev ./squashfs-root/dev
mount -t proc /proc ./squashfs-root/proc/chroot ./squashfs-root/ sh
保存并退出
输入:
scp init.sh [email protected]@192.168.1.57:/root/
(二)虚拟机内解压系统文件并启动shell
回到虚拟机内
tar –zxvf root.tar
chmod +x init.sh
./init.sh
如果没有上传init.sh文件,则键入如下命令:
tar –zxvf root.tar
mount -o bind /dev ./squashfs-root/dev
mount -t proc /proc ./squashfs-root/proc/chroot ./squashfs-root/ sh
此时,界面由

变为

且没有任何报错,说明成功。
华为路由器启动路由器设备参考:
./bin/upnp
./bin/mic
目前还没有启动我所用硬件硬件路由器的服务,因为与华为路由器系统文件的内容不一样,没有上述命令中的两个文件,也没有实现ping通外网(例如www.baidu.com)。仅实现了和本机通信。
边栏推荐
- websocket协议详解与抓包分析
- 流体拓扑优化问题
- Heap series _0x02: The past and present of the heap (WinDbg+Visual Studio compilation)
- 如何不使用第三个变量来交换两个数的值
- unity shader 入门 全透明与半透明效果实现
- 【力扣】617. 合并二叉树
- Vim实用技巧_3.可视模式和命令模式
- godot正确设置2d像素游戏
- Vim practical skills_4. Manage multiple files (open + split + save + netrw)
- Face recognition sample code analysis (1) - program parameter analysis
猜你喜欢

蓝桥杯嵌入式第十三届模拟题做题笔记

Vim实用技巧_5.在文件间和文件内快速移动

永磁同步电机电位器调速及数码管实时显示

Unity UI框架思路与实现

时间序列分析

交叉编译 OpenSSL

Vim practical skills_3. Visual mode and command mode

PE format series _0x05: output table and relocation table (.reloc)

Face recognition sample code analysis (2) - face recognition analysis

如何通过Photoshop根据纹理贴图轻松获得法线贴图
随机推荐
【QT】窗口的显示与模态窗口
蓝桥杯嵌入式第四届省赛做题笔记
【力扣】114. 二叉树展开为链表
GStreamer应用开发手册学习笔记之二
Cloud Models and Logistic Regression - Applications of MATLAB in Mathematical Modeling (2nd Edition)
交叉编译 CURL
机器学习的基本术语
大唐杯5G练习题(二)
Hold face (hugging face) tutorial - Chinese translation - create a custom framework
GCC编译过程
基于X264的动态帧率与动态码率调整的实现
【QT】QLayout: Attempting to add QLayout “to ***“, which already has a layout的终极解决方法
gccg++基本命令简介
堆(heap)系列_0x09:堆破坏示例(非法访问+未初始化+堆句柄不匹配)
matlab讲解与使用【持续更新中ing】
Vim实用技巧_5.在文件间和文件内快速移动
Unity Shader零基础入门3:逐像素光照、Blinn-Phong、透明度
Vim实用技巧_2.普通模式和插入模式
libev库解剖(1)
类定义中class和className中间的修饰词的作用有关问题