Magisk模块编写
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/
Magisk模块编写相关推荐
- Nginx自定义模块编写:根据post参数路由到不同服务器
Nginx可以轻松实现根据不同的url 或者 get参数来转发到不同的服务器,然而当我们需要根据http包体来进行请求路由时,Nginx默认的配置规则就捉襟见肘了,但是没关系,Nginx提供了强大的自 ...
- nginx自定义模块编写-实时统计模块--转载
原文:http://www.vimer.cn/2012/05/nginx%E8%87%AA%E5%AE%9A%E4%B9%89%E6%A8%A1%E5%9D%97%E7%BC%96%E5%86%99- ...
- 思源黑体ttf_模块模板 | 简单方法替换将TTF格式字体转换为Magisk模块
注 意 本模块还处于测试阶段,不保证完全稳定,欢迎大家下载测试.如介意请不要使用. 由topjohnwu开发的Magisk(又称「面具」)工具由于其「systemless」的便捷特性已经受到越来越多 ...
- boost::pfr模块编写自己的 io-manipulator 进行打印的测试程序
boost::pfr模块编写自己的 io-manipulator 进行打印的测试程序 实现功能 C++实现代码 实现功能 boost::pfr模块编写自己的 io-manipulator 进行打印的测 ...
- nginx 加路由时报错_Nginx自定义模块编写:根据post参数路由到不同服务器
Nginx可以轻松实现根据不同的url 或者 get参数来转发到不同的服务器,然而当我们需要根据http包体来进行请求路由时,Nginx默认的配置规则就捉襟见肘了,但是没关系,Nginx提供了强大的自 ...
- 刷magisk模块后不能开机_刷Magisk模块开机卡Logo了怎么办?两种方法教你轻松解决...
虽然,Magisk由于工作原理的不同,其模块对系统的兼容性相比较于此前的Xposed框架模块要好得多,但是依旧有可能出现刷了模块之后,卡Logo,无法开机的情况.今天,小编就提供两种方式解决刷Magi ...
- python写前端图形界面_如何Tkinter模块编写Python图形界面
一.为何使用Tkinter而非PyQt 众所周知,在Python中创建图形界面程序有很多种的选择,其中PyQt和wxPython都是很热门的模块包,这些第三方的图形界面模块功能强大.配置丰富,界面美观 ...
- 小米2s自带rec刷root_刷Magisk模块开机卡Logo了怎么办?两种方法教你轻松解决
虽然,Magisk由于工作原理的不同,其模块对系统的兼容性相比较于此前的Xposed框架模块要好得多,但是依旧有可能出现刷了模块之后,卡Logo,无法开机的情况.今天,小编就提供两种方式解决刷Magi ...
- android xml黑体字_为 Android 换上任意喜欢的字体,你可以试试这个 Magisk 模块
本文综合微信公众号「霞鹜」(lxgwshare),点击 此处 阅读原文.第一次在少数派上写文章,疏漏之处在所难免,还望各位读者多多包涵和批评指正. 由 @topjohnwu 开发的 Magisk 以其 ...
- python编写代码实现文件的拷贝功能_python利用os模块编写文件复制功能——copy()函数用法...
我就废话不多说了,大家还是直接看代码吧~ #文件复制 import os src_path=r'E:\Pycharm\python100题\代码' target_path=r'E:\Pycharm\p ...
最新文章
- Struts2 学习系列 (3) 跳转类型与通配符映射
- c++ vector向量直接赋值_vector-Jacobian product 解释 ---- pytorch autograd
- 微课丨华为的18条军规
- 设计模式原则--单一职责原则
- 交换机软件IOS升级更简化了
- 试玩UML(User Mode Linux)
- 面试问Kafka,这一篇全搞定
- IT项目管理中如何应对预算削减的难题?
- configuration 命名空间_kubernetes30:monitoring命名空间处于Terminating状态的处理方法...
- 猎豹浏览器小号窗口怎么打开 小号窗口打开方法简述
- MTK 驱动(80)---MTK平台User版本开机异常/无法开机,如何抓取log
- iPhone SE 3 5G版发布在即 旧款将降价到千元出头
- CGAL中Point的引用
- android查看应用权限管理,通过adb列出Android应用程序的权限
- JDBC:数据库操作:处理大对象CLOB数据
- soapui调用java类_soapui接口测试-验签值处理-调用java的加密jar包
- 计算机体系结构.是系统结构还是体系结构
- 浅谈数字音频处理的新技术
- 一个老工程师给年轻人的十大忠告【转帖】
- QT练习samp2_2_test——用按钮编辑文本框特性