Magisk源码地址:https://github.com/topjohnwu/Magisk,隐藏root功能包含了隐藏某些系统属性,隐藏magisk包名等。本菜抛砖引玉,希望大家讨论其中隐藏su文件的逻辑,以及检测这种情况的方法。代码位于工程的 Magisk/native/jni/magiskhide目录下,这里直接把功能实现核心代码抽离出来,以下是主要部分:

int main(int argc, char** argv) {

DEBUG_PRINT("hideroot start\n");

if (argc

DEBUG_PRINT("usage: ./hideroot {pid}\n");

return 1;

}

pid_t target_pid = atoi(argv[1]);

DEBUG_PRINT("target pid is %d\n", target_pid);

// 1. 暂停目标进程

kill(target_pid, SIGSTOP);

// 2. 关联到目标进程的mnt-namespace

DEBUG_PRINT("hideroot switch_mnt_ns\n");

if (switch_mnt_ns(target_pid)) {

DEBUG_PRINT("");

return 1;

}

// 3. 卸载相关文件系统

DEBUG_PRINT("hideroot read mounts\n");

char buffer[256];

char* line = NULL;

struct vector mount_list;

snprintf(buffer, sizeof(buffer), "/proc/%d/mounts", target_pid);

DEBUG_PRINT("hideroot init mount_list\n");

vec_init(&mount_list);

DEBUG_PRINT("hideroot read file\n");

file_to_vector(buffer, &mount_list);

DEBUG_PRINT("hideroot unmount dummy skeletons and /sbin links\n");

// Unmount dummy skeletons and /sbin links

vec_for_each(&mount_list, line) {

if (strstr(line, "tmpfs /system/") || strstr(line, "tmpfs /vendor/") || strstr(line, "tmpfs /sbin")) {

sscanf(line, "%*s %4096s", buffer);

lazy_unmount(buffer);

}

free(line);

}

vec_destroy(&mount_list);

// Re-read mount infos

snprintf(buffer, sizeof(buffer), "/proc/%d/mounts", target_pid);

vec_init(&mount_list);

file_to_vector(buffer, &mount_list);

DEBUG_PRINT("hideroot unmount everything under /system, /vendor\n");

// Unmount everything under /system, /vendor, and loop mounts

vec_for_each(&mount_list, line) {

if (strstr(line, "/dev/block/loop") || strstr(line, " /system/") || strstr(line, " /vendor/")) {

sscanf(line, "%*s %4096s", buffer);

lazy_unmount(buffer);

}

free(line);

}

vec_destroy(&mount_list);

exit:

// 4. 目标进程继续运行

kill(target_pid, SIGCONT);

sleep(100);

return 0;

}

switch_mnt_ns的实现如下:

int switch_mnt_ns(int pid) {

char mnt[32];

snprintf(mnt, sizeof(mnt), "/proc/%d/ns/mnt", pid);

if(access(mnt, R_OK) == -1) {

DEBUG_PRINT("[switch_mnt_ns] %s can't access!", mnt);

return 1;

}

int fd, ret;

fd = open(mnt, O_RDONLY);

if (fd

DEBUG_PRINT("[switch_mnt_ns] open %s failed!", mnt);

return 1;

}

// setns的详细解释见 http://man7.org/linux/man-pages/man2/setns.2.html

ret = setns(fd, 0);

close(fd);

return ret;

}

原理很简单,通过setns关联到目标进程,unmount掉一些文件系统。附件demo的测试输出:

unmount前后,目标进程/proc/self/mounts文件内容的变化:

然后测试了下namespace相关的输出,shell 和root的mnt-namespace 是同一个:

所以在shell或者root中某一个终端隐藏su后,在其他终端也不能直接访问su了。

另外,查看过的所有进程的net-namespace都是同一个:

关于哪些进程使用同一个namespace的逻辑,本菜也不清楚从内核源码的哪部分看,有大佬了解这块的欢迎拍砖。

上传的附件:

hideroot.zip

(7.06kb,202次下载)

关掉magiskhide_[讨论] Magisk隐藏root的实现相关推荐

  1. 关掉magiskhide_最新版Magisk-v20.4刷入后找不到Magisk Hide怎么办+Magisk Hide开启教程

    2020年,说到ROOT权限,我们最多谈到的就是Magisk 面具ROOT了,什么Kingroot,什么SuperSU,不是倒闭就是早就项目停止了.面具ROOT成为了当下几乎唯一的ROOT权限了除了R ...

  2. KernelSU: 内核 ROOT 方案, KernelSU KernelSU KernelSU 新的隐藏root防止检测 封号方案

    大约一年多以前,我在一篇讲Android 上 ROOT 的过去.现在和未来https://mp.weixin.qq.com/s?__biz=MjM5Njg5ODU2NA==&mid=22574 ...

  3. 红米K60刷入MIUI.EU安装面具magisk与root教程

    文章目录 前言 1.解锁BootLoader 2.刷入Recovery 3.刷入EU的ROM包 4.刷入magisk面具 后话 前言 教程大概就是四步,解锁,刷入rec,刷入系统,刷入面具,跟着教程走 ...

  4. Moto P30(XT1943-1) 免解锁BL 免rec 保留数据 Magisk Xposed ROOT 救砖 ZUI 4.0.374

    >>>重点介绍<<< 第一:本刷机包可卡刷可线刷,刷机包比较大的原因是采用同时兼容卡刷和线刷的格式,所以比较大 第二:[卡刷方法]卡刷不要解压刷机包,直接传入手机后 ...

  5. Pixel3 XL 刷Android原生系统,刷Magisk 进行ROOT

    Pixel3 XL 刷Android原生系统,刷Magisk 进行ROOT 前言 一.基本信息 二.解锁OEM和BL 三.驱动安装下载 四.刷入google官方镜像 五.刷入面具Magisk,ROOT ...

  6. Magisk 保留root升级系统(亲测小米)

    Magisk 保留root升级系统(亲测小米) 系统提示升级,先检查是否跨版本升级,如果跨版本升级,请参考下面帖子重新获取权限,如果不是,升级提示如下,则可使用本帖 小米,红米 root Magisk ...

  7. ZUK Z2 Pro(Z2121) 免解锁BL 免rec Magisk Xposed ROOT 救砖 ZUI 4.0.247

    >>>重点介绍<<< 第一:本刷机包可卡刷可线刷,刷机包比较大的原因是采用同时兼容卡刷和线刷的格式,所以比较大 第二:[卡刷方法]卡刷不要解压刷机包,直接传入手机后 ...

  8. 玩机搞机----root面具的安装 更新 隐藏root 德尔塔面具等等综合解析

    目前的机型都是root面具,今天的帖子主要分析下面具的一些使用常识.一般面具如何使用一参考我前面的帖子.基本步骤都是解锁bl---修补boot---刷入boot----安装面具apk.但目前很多app ...

  9. 红米Redmi K40手机刷入Magisk获取Root教程

    Magisk是一套开源系统自定义模块,内置了Magisk Manager(图形化管理界面).Root.启动脚本.SElinux补丁和启动时认证/dm-verity/强制加密移除功能.Magisk同时提 ...

  10. miui13刷magisk面具root

    可能存在一定门槛,可能又没有 刷fastboot忘记要不要先unlock了,建议还是去unlock一下,等7天再来整root. 目录 准备工作 1.下载要装的rom包 2.rom解包(无加密则跳过此步 ...

最新文章

  1. 吃透Java中的动态代理
  2. PyQt:如何给界面自定义背景?
  3. 全球及中国生物质能发电产业十四五利用现状及建设布局研究报告2021-2027年
  4. 迷宫收集星星 并查集解答
  5. 用matlab定义2020年元旦是星期三,如何用matlab实现某年某月某日是星期几的问题,...
  6. 图片压缩工具optipng/jpegoptim安装
  7. 信息学奥赛C++语言:乘车费用
  8. 野生前端的数据结构练习(11)动态规划算法
  9. Swift - UIBezierPath
  10. MATLAB中的线性插值
  11. phalapi-进阶篇3(自动加载和拦截器)
  12. 鞍山楷邦计算机学院,计算机专业和平面设计专业是一个专业不?
  13. 分布式监控系统开发【day37】:填充表配置项目(三)
  14. .NET简谈观察者模式
  15. python xlwt生成Excel
  16. delete 和 delete []的真正区别+析构函数
  17. OneZero第二周第三次站立会议(2016.3.30)
  18. Numpy删除指定行
  19. Unitary matrix 幺正矩阵
  20. JavaMail 之 搜索邮件

热门文章

  1. C语言版数据结构计算顺序表中X的个数,设计算法。数据结构课后习题,定义顺序表,查找顺序表中X元素的个数。
  2. appfuse mysql_学习 AppFuse
  3. ubuntu下使用锐捷
  4. 基于C/S模式的客户端软件系统
  5. 开源机器学习项目的简单介绍
  6. Linux系统录制gif动画
  7. 各个地区2.4G及5G信道一览表
  8. 20款英文LOGO字体
  9. Steam游戏上线初期的总结与思考
  10. 【VUE】vue安装教程