Magisk模块编写

您所在的位置:网站首页 magisk分区新增文件 Magisk模块编写

Magisk模块编写

#Magisk模块编写| 来源: 网络整理| 查看: 265

0x00 magisk介绍

Magisk 本质上是一种文件挂载系统。我们大多数时候所接触到的那个图标为面具的应用,其实只是我们与之发生各种交互行为的「媒介」。

首先简单介绍一下magisk的原理。magisk做的事情是通过boot中创建钩子,进而bind mount构建出一个在system基础上能够自定义替换,增加以及删除的文件系统,实际上并没有对 system 分区进行修改(即 systemless 接口,以不触动 system 的方式修改 system)。所有操作都在启动的时候完成,启动过程中magisk所做的事情: 1.准备阶段,将会把/data/magisk.img 挂到/magisk。同时它会遍历magisk目录中的模块是否为启用状态,并且记录。 2.创建骨架system文件系统(由于bind mount 必须要有一个目标文件才能进行bind mount),全部由mkdir 和touch构建 3.将每个标记为启用的/magisk/$MODID/system中文件bind mount到骨架系统 4.执行自定义模块中的脚本 5.遍历骨架中剩余没有被mount的文件,通过真正的system文件进行bind mount。

因为它不会以任何方式改变您的system分区。这意味着您仍然可以安装官方OTA更新,而不会丢失root。

然后Magisk能实现哪些功能? 1.集成了类似SuperSU的root管理功能(MagiskSU) 2.类似于Xposed,可以安装使用Magisk相关模块 3.Magisk Hide(对单个应用隐藏 Magisk 的 root 权限) 4.日志功能 5.Systemless hosts(为广告屏蔽应用提供Systemless hosts支持) 6.SafetyNet 检查功能

0x01 magisk

模块的本质,是将原本需要玩家繁复操作的玩机过程与 Magisk「不改动系统」(Systemless-ly) 的特性结合在一起,并进行打包和分发。

知道模块可以从哪里得到后,我们要讨论的就是管理问题。管理主要是刷入和卸载两方面。广义地说,任何能给手机刷入 .zip 包的工具都可以进行模块的刷入,比如 TWRP、Magisk Manager 和 Franco Kernel Manager 等,操作也都简单得类似,刷入、重启生效。

在这里插入图片描述

谷歌服务中的 SafetyNet 安全性测试。想要通过 SafetyNet 测试,最好使用原厂系统,或者是值得信赖的第三方 ROM 正式版(也就是 Official Builds),以减少不必要的麻烦。

如果是 basic integrity 这一项没有通过认证,那说明你遇到了大麻烦:试着开启「Magisk 核心功能模式」或者卸载所有模块,如果还是没有通过,那么你可能需要换一个系统或者第三方 ROM 了。

如果是 ctsProfile 这一项没有通过,那说明你的 ROM 没有通过其兼容性测试,一些 beta 版本或者国内厂商的 ROM 可能出现这种问题。这时我们下载使用 MagiskHide Props Config 这个模块往往能够解决问题。

0x02 magisk模块编写

以MagiskTrustUserCerts为例来分析magisk模块如何编写

在这里插入图片描述

1).在init执行时,执行自定义的命令。 2).以overlay的形式覆盖系统文件 3).修改Android Property属性。

以7.0以上的抓包需求为例:

从Android Nougat开始,默认情况下,应用不再信任用户证书。开发人员仍然可以通过在应用程序的AndroidManifest.xml文件中配置networkSecurityConfig属性来选择接受用户证书,但默认情况下,它们不再受信任。

一个完整的magisk模块整体如下: ➜ tree MagiskTrustUserCerts MagiskTrustUserCerts ├── META-INF │ └── com │ └── google │ └── android │ ├── update-binary │ └── updater-script ├── common │ ├── post-fs-data.sh │ ├── service.sh │ └── system.prop ├── config.sh └── module.prop

安装流程就是将上面的内容打包成MagiskTrustUserCerts.zip然后push到sdcard。 最后在magisk的APP上点击增加模块,找到该zip刷入即可。

分析模块的基本内容:

一: 其中module.prop里面存放着magisk模块的基本信息

id=trustusercerts name=Always Trust User Certificates version=v0.3 versionCode=1 author=Jeroen Beckers (NVISO.be) description=This module adds all installed user certificates to the system trust store. minMagisk=1500

二: config.sh文件里设置要执行的脚本。可以看到开启了Mount和执行post-fs-data 脚本

# Set to true if you need to enable Magic Mount # Most mods would like it to be enabled AUTOMOUNT=true # Set to true if you need post-fs-data script POSTFSDATA=true

三: post-fs-data.sh里面就是执行的内容。可以看到脚本每次启动就把用户证书移动到移动目录下:

#!/system/bin/sh # Please don't hardcode /magisk/modname/... ; instead, please use $MODDIR/... # This will make your scripts compatible even if Magisk change its mount point in the future MODDIR=${0%/*} mkdir -p $MODDIR/system/etc/security/cacerts rm $MODDIR/system/etc/security/cacerts/* cp -f /data/misc/user/0/cacerts-added/* $MODDIR/system/etc/security/cacerts/ # This script will be executed in post-fs-data mode # More info in the main Magisk thread 总结模块的编写流程: # 1. Place your files into system folder (delete the placeholder file) # 2. Fill in your module's info into module.prop # 3. Configure the settings in this file (common/config.sh) # 4. For advanced features, add shell commands into the script files under common: # post-fs-data.sh, service.sh # 5. For changing props, add your additional/modified props into common/system.prop 隐藏自身

Magisk隐藏自身的实现 1.切入目标APP进程的mount space, 将Magisk相关的所有文件和目录进行unmount操作。

2.对Magisk需要用到的unix domain socket name, Android system service name进行随机化,也支持对自身管理器的包名随机化。

0x03 其他

tips1: 安装MM 管理器,不过大部分模块都没什么问题,不怕一万,就怕万一,如果刷错了开不了机,就用MM管理器卸载模块就行了。具体操作 就是进入第三方rec 进入高级 终端命令 输入data/media/mm 确定然后按步骤卸载或停用模块就行了。 参考:https://www.52pojie.cn/thread-881414-1-1.html

tips2:

magisk常用的模块 链接:https://pan.baidu.com/s/1m4-cCckX9EFK5ES8sNJN-g 提取码:zx41

frida开机自启动的magisk模块:省去每次命令行交换 https://github.com/AeonLucid/MagiskFrida

伪造设备的magisk模块 https://github.com/AndroPlus-org/magisk-module-device-faker/blob/master/config.sh

0x04 如何检测magisk

Pokemon Go 会检查/sdcard/ 下是否有MagiskManager 这个目录

Check the installed magisk version

MIN_VER=`grep_prop minMagisk $INSTALLER/module.prop` [ ! -z $MAGISK_VER_CODE -a $MAGISK_VER_CODE -ge $MIN_VER ] || require_new_magisk MODID=`grep_prop id $INSTALLER/module.prop` MODPATH=$MOUNTPATH/$MODID

参考: https://topjohnwu.github.io/Magisk/



【本文地址】


今日新闻


推荐新闻


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