Android 10 上安装Magisk和EdXposed

您所在的位置:网站首页 xposed和面具可以共存吗 Android 10 上安装Magisk和EdXposed

Android 10 上安装Magisk和EdXposed

2024-07-08 03:31| 来源: 网络整理| 查看: 265

Android 10 上安装Magisk和EdXposed背景

因为项目中需要实现一个动态检测沙箱,需要Hook应用去获取信息和状态,所以调研当前的hook框架,本文是对Magisk和EdXposed的调研描述

什么是Magisk

我们先看下Magisk github上的官方描述

Magisk is a suite of open source tools for customizing Android, supporting devices higher than Android 4.2. It covers fundamental parts of Android customization: root, boot scripts, SELinux patches, AVB2.0 / dm-verity / forceencrypt removals etc.

Here are some feature highlights:

MagiskSU: Provide root access to your device Magisk Modules: Modify read-only partitions by installing modules MagiskHide: Hide Magisk from root detections / system integrity checks

Magsik是一个套件,用于定制化Android,能够实现root,定制启动脚本,SElinux patch等等功能。套件中包含MagiskSU, Magisk Modules和MagiskHide

从Android 6.0以后由于多种安全机制的引入或者增强(KASAN, KASLR, SElinux),导致通过内核漏洞提权逐渐减少,从Android 7.0开始Android提权越来越困难,Magisk通过修改boot image的方法从启动的更前端实现了一套root机制,并提供了相关的功能。

什么是systemless方式root

很多网上评论Magisk的文章都有提到,Magisk是一种systemless的root方式,本质上并不修改system分区,从而不破坏system分区的完整性。而Magisk将所有的改动都放在boot.img中。但是我们在实际使用中发现安装了Magisk手机的system分区中确实添加了很多东西,那又是如何在不该动system的情况下实现的? 所有的秘密都隐藏在一个很小的细节中,我们看下Magisk的moudle.cpp部分源码

[Magisk/native/jni/core/module.cpp] static int bind_mount(const char *from, const char *to) { int ret = xmount(from, to, nullptr, MS_BIND, nullptr); if (ret == 0) VLOGD("bind_mnt", from, to); return ret; }

上面代码中的bind_mount就是Magisk systemless root的核心原理。xmount是对mount命令的一个封装,添加错误处理和打印, 不展开讲。重点关注其中的一个参数MS_BIND。

看下MS_BIND的官方描述

MS_BIND (Linux 2.4 onward) Perform a bind mount, making a file or a directory subtree visible at another point within a file system. Bind mounts may cross file system boundaries and span chroot(2) jails. The filesystemtype and data arguments are ignored. Up until Linux 2.6.26, mountflags was also ignored (the bind mount has the same mount options as the underlying mount point).

翻译一下就是可以将一个文件系统路径a挂载到另一个文件系统路径b下,以后对b的所有访问和改动都是改动a下的路径,而对被挂载的文件系统路径和文件不会有任何修改

所以Magisk通过bind_mount将boot分区中的文件挂载到了/system分区路径下,所以我们看上去/system分区多了很多东西,但是实际上对这些文件都在boot分区下,system分区没有做任何改动

什么是EdXposed

首先Xposed是一套Hook框架,提供运行时Hook APP API去动态改变运行行为。Xposed是通过替换app_process,也就是Zygote来把所有Hook能力注入进去,所有Framework的类加载都有Xposed影子,所以导致Xposed Hook能力很全面。但是同时也导致Xposed Hook框架很容易检测到。Xposed在Android 8.0以后适配性不好,经常会导致启动问题。 而EdXposed是基于Magisk的思想实现的一套Hook机制。当前已经兼容8.0-10.0,并且使用方式和Xposed基本一致,所以是后Xposed时代比较好的一个Hook框架选择。

环境准备

准备好已解BL锁的设备,我选择的是Pixel 3XL,谷歌亲儿子折腾什么都是最方便的

准备好镜像,由于是Pixel,所以使用Google官方镜像就可以。Android FactoryImage

刷入官方镜像

提取出官方镜像中的boot.img

Magisk安装

首先下载Magisk Manager,这是一个app,由于完成Magisk和相关模块的管理,在写这篇文章的时候,最新版本是v5.8.1

安装Magisk Manager

安装完打开,选择Magisk 安装

$adb install MagiskManager-v5.8.1.apk

先选择仅下载安装包,这时会将Magisk包下载到本地,这个包用于对boot.img的修改

将boot.img 推送到手机中,路径选择/sdcard/Download/

$adb push boot.img /sdcard/Download

这时在通过Magisk->安装->选择并修补一个文件,选择boot.img,然后点击打开,这时候会开始修改boot.img

完成后会生成magisk_patched.img, 将这个image刷入到boot分区中

$fastboot flash boot magisk_patched.img

安装完成后截图会显示Magisk的状态,和下发的浮动菜单栏

更详细的可以参考GitHub上的官方说明

EdXposed安装

在Magisk中安装EdXposed相关的模块(Riru和Edxposed)

安装EdXposed Manager app

安装Riru

Riru模块是Edxposed和核心支撑模块,之前叫Riru-core, 在本篇文章写作时已经换了名字

安装Edxposed

Edxposed在Magisk的模块管理中也是能搜索到的,不过在当前的这个版本下,无法直接安装,v0.4.6.4版本的Edxposed模块依然会在安装时检测Riru-core模块,由于上面安装的是Riru模块,所以安装失败,通过查询Github上的issue了解到,如果安装的Riru,则需要安装Canary版本的Edxposed,也就是依赖于Riru的正式版Edxposed还没有发布。所以找到Canary版本的发布页下载离线包,通过安装离线模块的方式进行安装

这里会有小问题,就是Edxposed有两个版本,一个sandhook,一个是yahfa,这两个的区别在于底层hook art虚拟机的机制不一样。目前细节还不是特别了解,普遍说yahfa方案比较稳定,所以当前选择是yahfa方案

安装EdXposed Manager

EdXposed Manager主要用于对Xposed模块的管理,这个和Xposed一致 直接在EdXposedManager的GitHub release上下载最新版本安装即可,如果上述都安装成功,则进入EdXposed Manager就会显示框架已激活

PreviousEdXposed例子NextTinker

Last updated 3 years ago



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3