千家信息网

在KVM加速的Qemu中如何运行Android Oreo

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章主要介绍了在KVM加速的Qemu中如何运行Android Oreo ,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。将学习到如何
千家信息网最后更新 2026年10月31日在KVM加速的Qemu中如何运行Android Oreo

这篇文章主要介绍了在KVM加速的Qemu中如何运行Android Oreo ,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

将学习到如何在KVM加速的Qemu中运行Android Oreo (8.1.0) 系统,并通过我们的Linux x86_64主机上运行的Burp Suite。你将需要用到以下软件:

Linux Mint 19.1 (x86_64) 作为我们的主机系统(内核中内置了KVM支持)

Qemu(https://github.com/qemu/qemu)

Android 8.1.0(https://www.fosshub.com/Android-x86.html)

Burp Suite community(https://portswigger.net/burp/communitydownload)

我通常会从源码构建Qemu,通过git下载源码就足以构建完整的模拟器。

$ mkdir build$ cd build$ ../configure$ make# make install

想要拦截来自Android的SSL流量,我们必须将自生成的证书添加到系统cacert store(稍后会对此进行介绍)。

我当前正在使用的是以下网络脚本,用于我所有的qemu模拟。你也可以根据你的需要随时进行更改。

在我们的Linux x86_64主机上,我们需要以下脚本:

/etc/qemu-ifup

#! /bin/sh# Script to bring a network (tap) device for qemu up.# The idea is to add the tap device to the same bridge# as we have default routing to.# in order to be able to find brctlPATH=$PATH:/sbin:/usr/sbinip=$(which ip)if [ -n "$ip" ]; thenip link set "$1" upelsebrctl=$(which brctl)if [ ! "$ip" -o ! "$brctl" ]; thenecho "W: $0: not doing any bridge processing: neither ip nor brctl utility not found" >&2exit 0fiifconfig "$1" 0.0.0.0 upfiswitch=$(ip route ls |awk '/^default / {for(i=0;i&2

以及网络共享脚本(必须以root权限在qemu模拟器之前启动)(在Debian/Ubuntu上通过运行sudo apt-get install uml-utilities bridge-utils命令获取tunctl和brctl命令)

tunctl -t tap0 -u userifconfig tap0 upbrctl addbr br0brctl setfd br0 0ifconfig br0 10.0.2.2 netmask 255.255.255.0 broadcast 10.0.2.255 upbrctl addif br0 tap0 ifconfig tap0 0.0.0.0sysctl net.ipv4.ip_forward=1iptables --table nat -A POSTROUTING --out-interface wlan0 -j MASQUERADE

一旦我们准备好了所有这些,现在我们来安装最新的Android (x86_64),并运行它。

我们将在一个名为$ANDROID-QEMU的目录中工作(你可以随意调用它,我只是在这里给它分配了一个虚拟变量名),并创建一个10 Gigs大小的虚拟disk.img。同时,请确保你将Android iso移动到了该目录

$ mkdir $ANDROID-QEMU$ qemu-img create -f qcow disk.img 10G

接下来,我们将使用以下加载脚本运行安装程序

qemu-system-x86_64 -enable-kvm -boot d -cpu host -m 2048 -hda disk.img -cdrom android-x86_64-8.1-r2.iso  -net nic -net tap

请确保你按如下方式设置了WiFi:

SSID: VirtWifi   (Define as maual)no DHCP - Static IP  -  10.0.2.12Gateway 10.0.2.2DNS 8.8.8.8

在进行了系统更新,网络测试等工作后。现在我们已准备好了进入下一阶段,在Android系统cacert目录中安装一个自定义CA,这样我们就可以截获Burp Suite中的传出/传入HTTPS流量。我所知道的唯一方法,是将自定义证书添加到/system/etc/security/cacert中的根文件系统中。

让我们关闭模拟器(从Qemu关闭ACPI将触发Android的关闭菜单)

让我们先从Linux主机挂载Qemu qcow2 image。

# apt-get install libguestfs-tools # cd $ANDROID-QEMU# mkdir img # guestmount -a disk.img -m /dev/sda1 img/# cd img# cd android-8.1-r2/# ls -latotal 867056drwxr-xr-x 3 root root 4096 Jul 7 22:11 .drwxr-xr-x 5 root root 4096 Jul 7 22:11 ..drwxrwx--x. 34 user user 4096 Jul 7 22:12 data-rw-r--r-- 1 root root 1358699 Jul 7 22:11 initrd.img-rw-r--r-- 1 root root 7437056 Jul 7 22:11 kernel-rw-r--r-- 1 root root 1424814 Jul 7 22:11 ramdisk.img-rw-r--r-- 1 root root 877621248 Jul 7 22:11 system.sfs

这里我们重点关注system.sfs文件,因为它包含了我们需要的系统cacert文件

# cp system.sfs ../..        // we are copying the system.sfs away # cd ../..# umount img# mkdir SYS# mv system.sfs SYS# cd SYS# unsquashfs system.sfs    // extracting the system.sfs # cd squashfs-root# ls -la total 2066844drwxrwxrwx 3 user user 4096 Jul 8 21:42 .drwxr-xr-x 3 root root 4096 Jul 8 21:40 ..-rw-r--r-- 1 user user 2318401536 Jul 8 21:43 system.img$ANDROID-QEMU/SYS/squashfs-root# file system.img system.img: Linux rev 1.0 ext4 filesystem data, UUID=da594c53-9beb-f85c-85c5-cedf76546f7a, volume name "system" (needs journal recovery) (extents) (large files)

让我们在这里创建一个名为img的新挂载目录

# mkdir img# mount -o loop system.img img # cd img # ls -latotal 180drwxr-xr-x. 17 root root 4096 Jan 1 1970 .drwxrwxrwx 3 user user 4096 Jul 8 21:42 ..drwxr-xr-x. 43 root root 4096 Jun 12 21:33 appdrwxr-xr-x. 3 root 2000 8192 Jun 12 21:33 bin-rw-------. 1 root root 3116 Jun 12 18:56 build.prop-rw-r--r--. 1 root root 74747 Jun 12 19:24 compatibility_matrix.xmldrwxr-xr-x. 11 root root 4096 Jun 13 11:10 etcdrwxr-xr-x. 2 root root 4096 Jun 13 06:10 fake-libsdrwxr-xr-x. 2 root root 4096 Jun 13 06:10 fake-libs64drwxr-xr-x. 2 root root 8192 Jun 12 18:36 fontsdrwxr-xr-x. 5 root root 4096 Jun 13 06:12 frameworkdrwxr-xr-x. 7 root root 12288 Jun 13 10:35 libdrwxr-xr-x. 5 root root 12288 Jun 13 06:10 lib64drwx------. 2 root root 4096 Jan 1 1970 lost+found-rw-r--r--. 1 root root 2946 Jun 12 19:24 manifest.xmldrwxr-xr-x. 3 root root 4096 Jun 12 18:56 mediadrwxr-xr-x. 52 root root 4096 Jun 12 21:38 priv-appdrwxr-xr-x. 8 root root 4096 Jun 12 18:56 usrdrwxr-xr-x. 7 root 2000 4096 Jun 12 21:25 vendordrwxr-xr-x. 2 root 2000 8192 Jun 12 21:32 xbin

现在,我们终于进入到了Android rootfs中,现在让我们添加自定义证书。

我们将通过OpenSSL创建一个自定义证书,并将其导入Burp放置到Andriod中。

$ cd $CERTIFICATE-LOCATION    //lets create some dummy cert directory$ openssl req -x509 -days 730 -nodes -newkey rsa:2048 -outform der -keyout server.key -out ca.der -extensions v3_ca$ openssl rsa -in server.key -inform pem -out server.key.der -outform der$ openssl pkcs8 -topk8 -in server.key.der -inform der -out server.key.pkcs8.der -outform der -nocrypt$ openssl x509 -inform der -in ca.der -out ca.pem$ openssl x509 -inform PEM -subject_hash_old -in ca.pem | head -1Check the hash value and change accordingly$ cp ca.pem abcdefg1.0$ openssl x509 -inform PEM -text -in ca.pem -out /dev/null>> abcdefg1.0And move to the extracted image on Android # mv abcdefg1.0 $ANDROID-QEMU/SYS/squashfs-root/img/etc/security/cacerts

现在,让我们把所有这些都整合到一起

首先,卸载system.img

# cd $ANDROID-QEMU/SYS/squashfs.root/# umount img # rm -rf img# cd ..# mkdir BACKUP# mv system.sfs BACKUP/                          // backup the original system.sfs # mksquashfs squashfs-root system.sfs -b 131072  // pack everything back up
Lets mount the qemu2 image agin # cd $ANDROID-QEMU/# guestmount -a disk.img -m /dev/sda1 img/# cd img# cd android-8.1-r2 # rm system.sfs                   // remove the original system.sfs# cp ../../SYS/system.sfs .       // copy over the new modified one # cd ../..# umount img

现在我们已经准备就绪,首先让我们为Android准备一个加载脚本

qemu-system-x86_64 -enable-kvm -boot c -cpu host -m 2048 -hda disk.img -cdrom android-x86_64-8.1-r2.iso -net nic -net tap

现在,我们可以通过执行上述操作来验证修改后的Android启动(将其保存为shell脚本用于后续的使用),如果一切顺利,你应该可以看到Android界面。

现在,让我们在Linux机器上启动Burp Suite并导入自定义生成的SSL证书,如下所示

加载后,我们设置Burp Suite在br0接口@ 10.0.2.2上侦听

接下来,我们需要告诉Android用于WiFi连接的代理地址和端口,我们只需重新配置网络即可(这里我花了一点时间才找到,代理设置被隐藏在了Oreo中)。

它必须看起来像上面一样。

配置完成后,我们就可以通过模拟Android上的Burp Suite来拦截所有流量了!

致谢:感谢Awakenned提供的方法

P.S 你可以尝试通过内置的终端模拟器添加CA证书;通过su提升到root权限

但是你会收到一条关于"read-only file system"的消息

我不确定如何使用RW标签在live system上remount。

也可以在Linux主机上安装adb工具:

sudo apt-get install android-tools-adb android-tools-fastboot

我们使用nmap扫描远程Android(IP分配为10.0.2.12)。

# nmap -sS -sV -vv 10.0.2.12Starting Nmap 7.70SVN ( https://nmap.org ) at 2019-07-09 22:44 CESTNSE: Loaded 44 scripts for scanning.Initiating ARP Ping Scan at 22:44Scanning 10.0.2.12 [1 port]Completed ARP Ping Scan at 22:44, 0.24s elapsed (1 total hosts)Initiating Parallel DNS resolution of 1 host. at 22:44Completed Parallel DNS resolution of 1 host. at 22:44, 0.00s elapsedInitiating SYN Stealth Scan at 22:44Scanning 10.0.2.12 [1000 ports]Discovered open port 5555/tcp on 10.0.2.12Completed SYN Stealth Scan at 22:44, 1.27s elapsed (1000 total ports)Initiating Service scan at 22:44Scanning 1 service on 10.0.2.12Completed Service scan at 22:44, 11.02s elapsed (1 service on 1 host)NSE: Script scanning 10.0.2.12.NSE: Starting runlevel 1 (of 2) scan.Initiating NSE at 22:44Completed NSE at 22:44, 0.00s elapsedNSE: Starting runlevel 2 (of 2) scan.Initiating NSE at 22:44Completed NSE at 22:44, 0.00s elapsedNmap scan report for 10.0.2.12Host is up, received arp-response (0.0010s latency).Scanned at 2019-07-09 22:44:40 CEST for 13sNot shown: 999 closed portsReason: 999 resetsPORT STATE SERVICE REASON VERSION5555/tcp open adb syn-ack ttl 64 Android Debug Bridge device (name: android_x86_64; model: Standard PC (i440FX + PIIX, 1996); device: x86_64; features: cmd,stat_v2,shell_v2)MAC Address: 52:54:00:12:34:56 (QEMU virtual NIC)Service Info: OS: Android; CPE: cpe:/o:linux:linux_kernelRead data files from: /usr/local/bin/../share/nmapService detection performed. Please report any incorrect results at https://nmap.org/submit/ .Nmap done: 1 IP address (1 host up) scanned in 13.01 secondsRaw packets sent: 1002 (44.072KB) | Rcvd: 1002 (40.072KB)

我们可以通过以下命令将adb启动到远程系统:

$ adb connect 10.0.2.12 $ adb shellx86_64:/ $ iduid=2000(shell) gid=2000(shell) groups=2000(shell),1004(input),1007(log),1011(adb),1015(sdcard_rw),1028(sdcard_r),3001(net_bt_admin),3002(net_bt),3003(inet),3006(net_bw_stats),3009(readproc),3011(uhid) context=u:r:shell:s0x86_64:/ $ sux86_64:/ # iduid=0(root) gid=0(root) groups=0(root) context=u:r:su:s0x86_64:/ # uname -aLinux localhost 4.19.50-android-x86_64-geeb7e76e5df5 #1 SMP PREEMPT Thu Jun 13 12:10:59 CST 2019 x86_64

但我们仍坚持使用RO文件系统。

x86_64:/ # uname -aLinux localhost 4.19.50-android-x86_64-geeb7e76e5df5 #1 SMP PREEMPT Thu Jun 13 12:10:59 CST 2019 x86_64x86_64:/ # dfFilesystem 1K-blocks Used Available Use% Mounted ontmpfs 1020176 3372 1016804 1% //dev/loop1 2193072 2078004 115068 95% /system/dev/block/sda1 10186756 1785628 8401128 18% /datatmpfs 1020176 460 1019716 1% /devtmpfs 1020176 0 1020176 0% /mntnone 1020176 0 1020176 0% /cache/data/media 10186756 1785628 8401128 18% /mnt/runtime/default/emulated/dev/block/vold/public:11,0 878742 878742 0 100% /mnt/media_rw/Android-x86_LiveCDx86_64:/ # x86_64:/ # x86_64:/ # mount -o rw,remount /system '/dev/loop1' is read-onlyx86_64:/ #

adb remount将/system部分置于可写入的模式,默认情况下/system部分是只读模式的。这个命令只适用于已被root的设备。

在将文件push到/system文件夹之前,必须先输入命令adb remount。

adb remount'的作用相当于:

adb shell mount -o rw,remount,rw /system

感谢你能够认真阅读完这篇文章,希望小编分享的"在KVM加速的Qemu中如何运行Android Oreo "这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

系统 运行 文件 脚本 证书 主机 命令 模拟器 目录 篇文章 网络 准备 可以通过 流量 接下来 同时 方法 权限 模式 源码 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 北京路客互联网科技有限公司 中国互联网科技工作委员会毛军 互联网最新的科技 科技互联网项目 互联网科技战争 美国互联网科技 深圳互联网络科技有限公司 汇久创客互联网科技 科技互联网公司logo 佰商互联网科技有限公司 互联网科技公司需要的职位 新华互联网科技2019 互联网系的金融科技公司 苏州五指互联网络科技有限 张召忠谈中国互联网科技 上海万顺科技互联网有限公司招聘 三亚科技创新互联网基地 盐城市攀科互联网科技有限公司 河南商务圈互联网科技有限公司 小牛互联网科技有限公司地址 电子科技大学互联网 智腾互联网科技有限公司 银川新华互联网科技学校联系电话 想开互联网科技公司怎么样 996高科技互联网公司 银行科技岗属于互联网吗 众联互联网络科技 互联网科技创新创业项目 恒生科技互联网指数十大成分股 每日互联网科技新闻
0