Linux Mint编译安装Qemu

news2024/10/6 8:30:08

文章目录

  • 前言
  • 1. 准备Qemu源码包
  • 2. 编译安装
    • 2.1 首次尝试编译
    • 2.2 安装python3-venv
    • 2.3 安装sphinx
    • 2.4 安装sphinx-rtd-theme
    • 2.4 安装ninja
    • 2.6 安装编译器
  • 3. 重新编译并安装
  • 4. 进行固件仿真
    • 4.1 准备固件
    • 4.2 Binwalk解析文件
    • 4.3 看一下文件结构
    • 4.4 安装sasquatch
    • 4.5 重新解析文件
    • 4.6 确定指令集
    • 4.7 开启qemu虚拟环境。
    • 4.8 为Qemu设置网络
    • 4.9 创建Qemu虚拟机
    • 4.10 导入固件文件
    • 4.11 挂载文件系统并启动shell
    • 4.12 启动路由器
    • 4.13 对仿真路由器进行端口扫描
  • 写在最后


前言

因为最近的项目原因,需要了解一下固件仿真的知识。网络上搜索了一下,基本上不外乎Qemu、Firmadyne、firmAE、FAP(Firmware Analysis Plus)这几种方式,但是归根结底都是基于Qemu做了一些优化、集成、自动化之类的。所以本着学习与探索的态度,准备直接从固件仿真的老祖宗——Qemu入手,本文主要介绍了Linux下(博主基于Linux-Mint-20.3-xfce-64bit)编译安装Qemu的过程。

1. 准备Qemu源码包

下载源码包

$ wget https://download.qemu.org/qemu-8.2.0-rc1.tar.xz

解压

$ tar xvJf qemu-8.2.0-rc1.tar.xz

2. 编译安装

2.1 首次尝试编译

$ cd qemu-8.2.0-rc1/

看一下configure的选项

$ ./configure --help

用最简单的形式进行configure

$ ./configure

在这里插入图片描述

貌似缺少pip,根据提示应该需要安装python3-venv,手动安装一下。

2.2 安装python3-venv

直接apt安装即可

$ sudo apt install python3-venv

在这里插入图片描述
再次编译
在这里插入图片描述
一个坑接着一个坑,貌似缺少sphinx和Ninja,继续填坑。

2.3 安装sphinx

先安装pip

$ sudo apt install python3-pip

再安装sphinx

$ pip install sphinx

涉及到的东西貌似还挺多
在这里插入图片描述
虽然有些warning,但是貌似Ninja也安装上了
在这里插入图片描述
再次编译
在这里插入图片描述
没有想象的那么简单啊,sphinx_rtd_theme还是有些问题。先卸载安装的sphinx

$ pip uninstall sphinx

然后安装上面报错缺少的sphinx 5.3.0版本。

$ pip install "Sphinx==5.3.0"

再次configure

$./configure

在这里插入图片描述
同样的问题,还是直接安装这个sphinx_rtd_theme吧

2.4 安装sphinx-rtd-theme

$ pip install sphinx-rtd-theme

再次configure
在这里插入图片描述
继续填坑,安装一下ninja-build

2.4 安装ninja

$ sudo apt install ninja-build

再次configure
在这里插入图片描述
嗯,还是有些问题,缺少编译器。

2.6 安装编译器

$ sudo apt install libglib2.0-0 libglib2.0-dev

3. 重新编译并安装

再次configure,顺利通过。
在这里插入图片描述
接下来make一下。

$ make && make install

安装完成后在/usr/loacal/bin下会生成相应的可执行文件。
在这里插入图片描述

4. 进行固件仿真

4.1 准备固件

https://pan.baidu.com/s/1soGEzvU1dBHau-r0WTFaNQ

4.2 Binwalk解析文件

$ binwalk -Me HG532eV100R001C01B020_upgrade_packet.bin

在这里插入图片描述
从这里可以看出是Squashfs标准文件类型,big endian大端序。

4.3 看一下文件结构

在这里插入图片描述
squashfs-root目录下竟然是空的,从上面的binwalk解析过程也可以看出来,貌似squashfs文件解析出问题,应该是没有安装sasquatch,手工安装一下。

4.4 安装sasquatch

重要的事情说三遍,一定要按照我这个方式安装,否则会有深坑,以后再解释。

$ wget https://github.com/devttys0/sasquatch/pull/47.patch && patch -p1 < 47.patch && sudo ./build.sh

顺利安装sasquatch。

4.5 重新解析文件

$ binwalk -Me HG532eV100R001C01B020_upgrade_packet.bin

再次binwalk提取固件,这次正常了。
在这里插入图片描述

4.6 确定指令集

接下来看看系统使用的指令集,在解包后的bin目录下,随便找两三个可执行程序看一下。
在这里插入图片描述
可以看到,都是32为的MIPS,所以接下来我们通过qemu仿真的时候选择32位,使用MIPS内核。
先下载mips内核(地址:https://people.debian.org/~aurel32/qemu/mips/),下载后放到工作目录下,如下图。
在这里插入图片描述

4.7 开启qemu虚拟环境。

$ qemu-system-mips -M malta -kernel ./mips/vmlinux-2.6.32-5-4kc-malta -hda ./mips/debian_squeeze_mips_standard.qcow2 --append "root=/dev/sda1 console=tty0" -net nic -net tap,ifname=ens33

4.8 为Qemu设置网络

查看宿主机网络信息。

$ ip a

在这里插入图片描述
本次组网采用模式(qemu还支持其他的组网方式,后续再研究)。
编辑两个文件:
/usr/local/etc/qemu-ifup,内容如下
在这里插入图片描述
/usr/local/etc/qemu-ifdown,内容如下
在这里插入图片描述

4.9 创建Qemu虚拟机

通过下面的命令创建qemu虚拟机

$ sudo qemu-system-mips -M malta -kernel ./mips/vmlinux-2.6.32-5-4kc-malta -hda ./mips/debian_squeeze_mips_standard.qcow2 --append "root=/dev/sda1 console=tty0" -net nic -net tap,ifname=tap0 -nographic

运行结果如下
在这里插入图片描述
Qemu的默认登录密码应该是root/root
在这里插入图片描述
登录成功,这个时候可以看到qemu虚拟机的地址跟宿主机的地址在一个网段。
在这里插入图片描述
只要是这个网段的主机都可以跟qemu虚拟机通信,这为我们通过kali研究qemu虚拟机提供了便利。
在这里插入图片描述

4.10 导入固件文件

接下来,我们回到kali主机上,将我们通过binwalk提取的目录squashfs-root打包上传到qemu虚拟机。

$ tar -czvf squash.tar squashfs-root 

在这里插入图片描述
通过scp工具上传到qemu虚拟机

$ scp squash.tar root@192.168.232.134:/root/

在这里插入图片描述
报错了,虽然能够ping通,看来还是有点问题,直接ssh看一下。
在这里插入图片描述
嗯,同样的问题,回到宿主机访问一下试试看。
在这里插入图片描述
嗯,宿主机是可以的,这个问题后面再研究,先从宿主机上传一下上面准备好的tar包。
在这里插入图片描述
顺利上传成功,在qemu虚拟机中也找到了对应的包,进行解压。

# tar -zxvf squash.tar

在这里插入图片描述

4.11 挂载文件系统并启动shell

进行文件挂载。

root@debian-mips:~# mount -o bind /dev ./squashfs-root/dev
root@debian-mips:~# mount -t proc /proc ./squashfs-root/proc/

然后启动shell
在这里插入图片描述
一切都比较顺利,接下来开启路由器的环境。

4.12 启动路由器

# ./bin/upnp
# ./bin/mic

在这里插入图片描述
在这里插入图片描述
最后感觉没有启动成功,web页面试了一下也进不去.
在这里插入图片描述
Ping一下试试看,发现网络也不通了,应该路由器启动以后,修改成了路由器本身默认的网络。
在这里插入图片描述
Ctrl+c退出,再看一下网络。
在这里插入图片描述
地址变成了192.168.1.1,这应该是路由器启动的时候更改的。

4.13 对仿真路由器进行端口扫描

通过nmap扫描一把。
在这里插入图片描述
开放了ssh的22端口,telnet的23端口,syslog的514端口,看来路由器是起来了,只是启动可能有些问题。很大概率是我们提取的squashfs-root不够全面,导致固件仿真的时候有些文件找不到。

写在最后

这是第一次使用Qemu进行仿真,还有很多内容没有搞明白,需要深入学习,后面会陆续更新。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1306165.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OkHttp: 拦截器和事件监听器

文章目录 1. 拦截器1. 拦截器链2. 实际案例1. 注册为应用拦截器2. 注册为网络拦截器 3. 如何选择用哪种拦截器1. 应用拦截器2. 网络层拦截器3. 重写请求4. 重写响应 4. 可用性 2. 事件监听器1. 请求的生命周期2. EventListener使用案例3. EventListener.Factory4. 调用失败的请…

一、Oracle学习笔记

1.1.1实例的概念实例是一组内存结构和后台进程的集合。oracle适用于大型的应用系统1.1.2实例的构成1.实例中的这部分内存结构叫做系统全局区&#xff08;SGA&#xff09;:存储数据库中的数据、存储数据字典的信息、重做日志、经过解析的SQL代码等一个实例只有一个SGA&#xff1…

QT作业4

实现一个闹钟&#xff0c;当输入时间后&#xff0c;点击启动到达时间后循环播报三遍&#xff0c;便签内容 头文件&#xff1a; #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTextToSpeech> //文本转语言类 #include <QTimerEvent> //定…

EasyV易知微助力智慧城市未来趋势发展——数字孪生城市

“智慧城市的未来趋势就是数字孪生”——《基于数字孪生的智慧城市》 城市数字化管理、智慧城市和数字孪生城市的发展是相互促进、逐步深化的过程。 城市数字化管理作为起点&#xff0c;奠定了信息化、数据化的基础&#xff1b;而智慧城市则将数字城市管理进一步升级&#xff…

什么是防抖与节流?应用场景举例

防抖节流如何处理防抖与节流 防抖节流防抖例子节流例子Vue Axios全局接口防抖、节流封装实现 小结 防抖 防抖&#xff1a;触发高频事件后n秒内函数只会执行一次&#xff0c;如果n秒内高频事件再次被触发&#xff0c;则重新计算时间 应用场景&#xff1a; 提交按钮、用户注册…

时间序列预测 — CNN-LSTM实现多变量多步光伏预测(Tensorflow)

目录 1 数据处理 1.1 导入库文件 1.2 导入数据集 1.3 缺失值分析 2 构造训练数据 ​3 模型训练 3.1 CNN-LSTM网络 3.2 模型训练 4 模型预测 专栏链接&#xff1a;https://blog.csdn.net/qq_41921826/category_12495091.html 1 数据处理 1.1 导入库文件 import scip…

数据库系统相关概念

数据&#xff1a;描述事务的符号记录。 数据库(DB)&#xff1a;按一定的数据模型组织&#xff0c;描述和存储在计算机内的&#xff0c;有组织的&#xff0c;可共享的数据集合。 数据库管理系统(DBMS)&#xff1a;位于用户和操作系统之间的一层数据管理软件。主要功能包括&#…

(C++)最大连续1的个数--滑动窗口

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能&#xff0c;轻松拿下世界 IT 名企 Dream Offer。https://le…

【LeetCode题目拓展】第207题 课程表 拓展(拓扑排序、Tarjan算法、Kosaraju算法)

文章目录 一、拓扑排序题目二、题目拓展1. 思路分析2. tarjan算法3. kosaraju算法 一、拓扑排序题目 最近在看一个算法课程的时候看到了一个比较好玩的题目的扩展&#xff0c;它的原题如下&#xff1a; 对应的LeetCode题目为 207. 课程表 这个题目本身来说比较简单&#xff…

C# WPF上位机开发(增强版绘图软件)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们写过一个绘图软件&#xff0c;不过那个比较简单&#xff0c;主要就是用鼠标模拟pen进行绘图。实际应用中&#xff0c;另外一种使用比较多的…

【flutter对抗】blutter使用+ACTF习题

最新的能很好反编译flutter程序的项目 1、安装 git clone https://github.com/worawit/blutter --depth1​ 然后我直接将对应的两个压缩包下载下来&#xff08;通过浏览器手动下载&#xff09; 不再通过python的代码来下载&#xff0c;之前一直卡在这个地方。 如果读者可以…

C++11 【初识】

C11简介 1.在2003年C标准委员会曾经提交了一份技术勘误表(简称TC1)&#xff0c;使得C03这个名字已经取代了C98称为C11之前的最新C标准名称。 2.不过由于C03(TC1)主要是对C98标准中的漏洞进行修复&#xff0c;语言的核心部分则没有改动&#xff0c;因此人们习惯性的把两个标准合…

【vtkWidgetRepresentation】第十期 vtkAngleRepresentation标注角度

很高兴在雪易的CSDN遇见你 前言 本文分享VTK中的角度标注,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO AngleRepresentation 目录 前言 1. vtkAngleRepresentatio

Windows使用selenium操作浏览器爬虫

以前的大部分程序都是操作Chrome&#xff0c;很少有操作Edge&#xff0c;现在以Edge为例。 Selenium本身是无法直接控制浏览器的&#xff0c;不同的浏览器需要不同的驱动程序&#xff0c;Google Chrome需要安装ChromeDriver、Edge需要安装Microsoft Edge WebDriver&#xff0c…

直面双碳目标,优维科技携手奥意建筑打造绿色低碳建筑数智云平台

优维“双碳”战略合作建筑 为落实创新驱动发展战略&#xff0c;增强深圳工程建设领域科技创新能力&#xff0c;促进技术进步、科技成果转化和推广应用&#xff0c;根据《深圳市工程建设领域科技计划项目管理办法》《深圳市住房和建设局关于组织申报2022年深圳市工程建设领域科…

二叉搜索树基本概念与实现

目录 基本概念 模拟实现 完整代码 基本概念 根的左节点比根小 根的右节点比根大 左右子树都满足 搜索二叉树的中序遍历是升序 模拟实现 完整代码 #pragma oncetemplate<class K> struct BSNode {BSNode<K>* _left;BSNode<K>* _right;K _val;BSNode(c…

【C语言程序设计】循环结构程序设计

目录 前言 一、程序设计第一题 二、程序设计第二题 三、程序设计第三题 总结 &#x1f308;嗨&#xff01;我是Filotimo__&#x1f308;。很高兴与大家相识&#xff0c;希望我的博客能对你有所帮助。 &#x1f4a1;本文由Filotimo__✍️原创&#xff0c;首发于CSDN&#x1f4da…

1.函数递归起(复习)

1.debug版本可以调试,realse版本不能调试 2.在realse版本中,代码已经得到了优化(编译器可能会自作主张地对代码进行优化),在大小和速度上都是最优的 3.ctrl F5 是开始执行不调试 4.设置好断点后,用F5到达该断点,相当于是到达了该断点的那个位置程序就先停止运行了 5.设立断…

Linux shell编程学习笔记35:seq

0 前言 在使用 for 循环语句时&#xff0c;我们经常使用到序列。比如&#xff1a; for i in 1 2 3 4 5 6 7 8 9 10; do echo "$i * 2 $(expr $i \* 2)"; done 其中的 1 2 3 4 5 6 7 8 9 10;就是一个整数序列 。 为了方便我们使用数字序列&#xff0c;Linux提供了…

UDS DTC状态掩码/DTC状态位

文章目录 简介用途依赖知识1、测试&#xff08;test&#xff09;2、操作循环&#xff08;operation cycle&#xff09;3、老化&#xff08;aging&#xff09; DTC状态位1、Bit 0&#xff1a;Test Failed2、Bit 1&#xff1a;Test Failed This operation cycle3、Bit 2&#xff…