惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
Cyberwarzone
Cyberwarzone
The GitHub Blog
The GitHub Blog
云风的 BLOG
云风的 BLOG
P
Proofpoint News Feed
小众软件
小众软件
Recent Announcements
Recent Announcements
博客园 - 三生石上(FineUI控件)
Security Archives - TechRepublic
Security Archives - TechRepublic
W
WeLiveSecurity
Cloudbric
Cloudbric
博客园 - 司徒正美
美团技术团队
N
News and Events Feed by Topic
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
PCI Perspectives
PCI Perspectives
宝玉的分享
宝玉的分享
H
Help Net Security
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Google DeepMind News
Google DeepMind News
Help Net Security
Help Net Security
Last Week in AI
Last Week in AI
S
Schneier on Security
N
News | PayPal Newsroom
B
Blog RSS Feed
L
LINUX DO - 最新话题
T
Troy Hunt's Blog
S
Secure Thoughts
雷峰网
雷峰网
aimingoo的专栏
aimingoo的专栏
L
Lohrmann on Cybersecurity
G
Google Developers Blog
Microsoft Azure Blog
Microsoft Azure Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
T
Tenable Blog
S
Securelist
L
LangChain Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
I
InfoQ
H
Heimdal Security Blog
Cisco Talos Blog
Cisco Talos Blog
F
Full Disclosure
Y
Y Combinator Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
K
Kaspersky official blog
T
Tailwind CSS Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
阮一峰的网络日志
阮一峰的网络日志
C
Cisco Blogs

WAYJAM

告别 NPM Token:迁移到 Trusted Publishing 全记录 Sing-box:IPv6 优先出站与 Netflix 强制 IPv6 分流 [All In One] HomeLab 虚拟化 iKuai + Mihomo - IPv6 支持 [All In One] HomeLab 虚拟化 iKuai + Mihomo LiteLLM 多模型 API 中转 MacOS Bootstrp with Nix Fluency Support Full Rss [All In One] PVE 中 OpenWrt LXC 重启问题 Tabby 终端配置以及配置全平台同步 Cloudflare Tunnel + Nginx Proxy Manager:服务穿透 PVE 7 升级 8 笔记 Fly.io 部署 Artalk 评论系统 [All In One] HomeLab 2023 搭建总结 [All In One] 轻量的文件 & 媒体服务器配置 [All In One] R71s 主机散热改造 [All In One] PVE LXC 安装 OpenWrt 软路由以及网络规划 [All In One] 安装 Proxmox VE 7.4 从零开始配置Rime - 2023 Self Hosted Bitwarden + Cloudfare HTTPS Debian NFS Server 以及 MacOS Client AdguardHome 和 Clash 透明代理配合使用 使用 Kind 部署 Prow 手记 BackBlaze B2 + Cloudfare Worker 图床 PicGo Amazon S3 插件 自动给模板生成 Inline-Svg Hugo Theme WeUI 发布! Hugo Theme Fluency 发布! Docker Clash 和 透明代理 有限状态机与分布式熔断器 「家庭娱乐」N1刷 EmuELEC 做游戏盒子 「家庭娱乐」N1刷 Armbian 做家庭服务器 分布式限流器之令牌桶实现 Kustomize 管理 Kubernetes 集群 Mixedpaper 主题发布到 Hugo 官方仓库 About 优化 Docker 构建时间 解决 etcd 与 grpc 不兼容问题 Kubernetes 部署 ElasticSearch7 集群 从零开始配置Rime - 2019 转移域名,更换评论系统,更换图床 搭建 NPM Proxy 之预编译包 搭建 NPM Proxy 美区Apple ID终于绑定PayPal成功 无可奈何的页面增强方案 LogStash的调试 GitLab Shell如何通过SSH工作 Python打开类 荒原 [Theme] Bitcron主题Mixedpaper发布! Ngrok端口转发 故事之五 - 柠檬茶 故事之四 - 我是天才 故事之一 Arch滚挂了怎么办? OpenWrt内网IPv6之二 某次更新后Primusrun不能启动Dota2 OpenWrt的DNS智能解析方案 替换Google CDN库 使用Privoxy将socks代理转化为http代理 ArchLinux之软件篇 再次安装ArchLinux手记 博客再次重生 搞了个Minecraft服务器 【LnV工作室荣誉出品】小苹果MV华农大版 雨梦 醉臥石中笑人間 路由器内网IPV6地址分配 OPENWRT安装软件的两个问题 路由器上进行锐捷认证 改了BIOS的LOGO Windows下搭建我的C/C++的开发环境 Linux下用Mentohust认证校园网 Archlinux+Windows 双系统安装手记(UEFI+GPT) Google-code-prettify代码高亮 《末世迷踪》 Hello Net World!
PVE 安装 Android x86 & 安装 Magisk
2023-06-11 · via WAYJAM

下载镜像

首先选择镜像,我一开始尝试的是成 CM 的 7.0 镜像但由于是全虚拟的系统,这个版本的系统开启 ADB 后,虽然可以开启网络端口监听,但无法首次就用网络连接(无法 auth)。PrimeOS 也是遇到同样的问题甚至无法直接开启网络 ADB。后来换用 Android x86 9.0 版本,自带 root 权限,默认开启 ADB 且支持首次网络连接。

镜像下载:https://mirrors.tuna.tsinghua.edu.cn/osdn/android-x86/

折腾完发现有打好 Magisk 的镜像,https://androidx86magisk.osdn.io/,如果早点看到本文完结。

提取 boot.img

  1. 从 ISO 镜像中复制出 kernelramdisk.img 这两个文件
mkdir -p /mnt/temp
mount -t iso9660 -o loop android.iso /mnt/temp
cp /mnt/temp/kernel .
cp /mnt/temp/ramdisk.img .
umount /mnt/temp
  1. 安装工具软件 mkbootimgabootimg(在 Linux 开发系统,如以下命令以 Debian 系为例)
apt install android-tools-mkbootimg abootimg
  1. kernelramdisk.img 打包成 boot.img
mkbootimg --kernel kernel --ramdisk ramdisk.img -o boot.img

mkbootimg 是 Android 系统中一个用于创建内核镜像文件的工具,常见用法和参数说明如下:

mkbootimg \
--kernel <kernel-image> \
[--ramdisk <ramdisk-image>] \
[--second <second-image>] \
[--dtb <dtb-image>] \
[--cmdline <kernel-command-line>] \
[--base <address>] \
[--pagesize <size-in-bytes>] \
[--ramdisk_offset <address>] \
[--tags_offset <address>] \
[--ivt_offset <address>] \
[--os_version <version>] \
[--os_patch_level <yyyy-mm-dd>] \
[--header_version <version>] \
-o <image-output-file>

参数说明:

  • --kernel: 指定内核镜像文件路径。
  • --ramdisk: 可选参数,指定 RAM disk 镜像文件路径。如果在 cmdline 中指定将使用另外一个 ramdisk-image。
  • --second: 可选参数,指定第二阶段启动器镜像文件路径。
  • --dtb: 可选参数,指定设备树二进制文件路径。
  • --cmdline: 内核命令行,指定内核启动参数。
  • --base: 可选参数,指定内存基址,为一个 16 进制数。
  • --pagesize: 页面大小,指定内存页面大小,默认为 2048。
  • --ramdisk_offset: RAM disk 镜像文件在内存中的 offset。
  • --tags_offset: Tag 信息在内存中的 offset。
  • --ivt_offset: IVT 信息在内存中的 offset。
  • --os_version: 操作系统版本号。
  • --os_patch_level: 操作系统补丁等级,格式为 yyyy-mm-dd
  • --header_version: Boot image header 版本号,默认值为 1。
  • -o: 输出镜像的文件路径。

除了上述参数外,还有其他较少用到的参数,如 --hash 等。根据实际情况需要设置不同的参数。

开启 ADB

  1. 系统 - 关于 中多次点击版本号,直到开启开发者模式
  2. 开发者选项 中开启ADB
  3. 关于 - 状态 中查看当前 IP
  4. 通过 ADB 连接 adb connect 192.168.100.1

boot.img 补丁

  1. 在 PVE 中创建虚拟机(如下图参数,不添加额外 EFI 盘),用上面步骤下载的 ISO 安装系统(如果有现有的 Android 系统,安装 Magisk 即可用来打补丁)

  1. 引导菜单进入 ISO 启动菜单,选择 Advence Options,然后选择自动安装(此次安装系统只是为了打补丁,并不用于实际运行)。进入系统后,安装 Magisk APK。

  2. 用 ABD 将 boot.img 传输到 Android 系统中

adb push ./boot.img /storage/self/primary/Download/
  1. 在 Magisk 中点击安装,选择并修补一个文件(选择 boot.img

  1. Magisk 补丁后将会在相同目录生成一个 img 文件 magisk_patched-xxx.img,使用 ADB pull 将文件下载到本地。

打包新系统镜像

abootimg -x patched_boot.img

先解压 patched_boot,然后将 zImage 重命名为 kernelinitrd.img 重命名为 ramdisk.img

# 新建临时处理文件夹
mkdir -p /tmp/original_iso
mkdir -p /tmp/new_iso
# 挂载原始镜像 android.iso
mount -t iso9660 -o loop ./android.iso /tmp/original_iso
# 复制 ISO 中所有文件到新的镜像临时目录
cd  /tmp/original_iso && tar cf - . | (cd /tmp/new_iso; tar xfp -)
# 放入新的 patched 文件
cp ./kernel /tmp/new_iso
cp ./ramdisk.img /tmp/new_iso
# 重新打包为 EFI 可引导 ISO
xorriso -as mkisofs -c isolinux/boot.cat -b isolinux/isolinux.bin -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e boot/grub/efi.img -no-emul-boot -isohybrid-gpt-basdat -o ./androidx86-patched.iso  /tmp/new_iso

处理完毕后解除挂载 umount /tmp/original_iso

Windows 系统使用 UltraISO 打开原始 Android x86 镜像,将补丁后的 kernelramdisk.img 拖进去,导出新镜像。

安装

用上述提到的 PVE 参数新建虚拟机(或者复用上述现有虚拟机),ISO 镜像选择导出的新镜像。启动虚拟机,选择普通安装模式。

进入 gdisk 分区界面

  • 选择 New 创建 EFI 分区(起始位置默认,大小 250Mb,分区类型 ef00
  • 再次选择 New 创建系统分区(起始位置默认,大小默认全部,分区类型默认 8300
  • 选择 Write 写入

将系统分区格式化为 ext4,第一个分区(EFI)将会默认格式化为 vfat

/system 设置为可读写(下图选择 yes

启动 & 使用

安装系统后,启动 Android,并安装 Magisk 可以看到已经是安装好的状态。

问题

由于 x86 官方镜像里已带有 su,打开 Magisk 检测到多个 su 则会提示:不属于Magisk的su文件异常状态怎么办

开发机内# adb root
开发机内# adb shell
android 内# su root
android 内# rm /system/xin/su

另外此种方式安装的 Magisk 每次启动都会如下图提示,但功能不受影响。

安装 Lsposed

首先安装 riru,从 Github 下载 riru-xxx-release.zip,使用 adb push 上传到 Andorid 中,然后在 Magisk 模块中选择 从本地安装

然后下载 LSPosed-xxx-riru-release.zip,使用 adb push 上传到 Andorid 中,然后在 Magisk 模块中选择 从本地安装。重启系统即可。

相关项目和参考