Zygisk modules创建简介
在官方的注释中,可以看到这么一段话:
定义一个类并继承 zygisk::ModuleBase 来实现你模块的功能。
使用宏 REGISTER_ZYGISK_MODULE(className) 来向 Zygisk 注册该类。请注意,模块只会在 zygote 进程 fork 出子进程之后才会被加载。这意味着你的所有代码都是在应用程序/系统服务器进程中运行,而不是在 zygote 守护进程中!这段说明的关键点是:
- 您需要创建一个继承自 zygisk::ModuleBase 的类来实现您的模块功能。
- 使用 REGISTER_ZYGISK_MODULE 宏来注册您的类,使 Zygisk 能够识别和加载您的模块。
- 最重要的是,您的模块代码不是在 zygote 进程本身中运行,而是在 zygote fork 出的子进程中运行。这些子进程可能是普通的应用程序进程,也可能是系统服务器进程。
4. 这意味着您的模块代码实际上是在每个应用程序或系统服务的上下文中执行的,而不是在 zygote 守护进程中。这对于理解您的代码的执行环境和可能的权限限制非常重要。
REGISTER_ZYGISK_COMPANION 注释
翻译:
这是用于注册一个 root companion 请求处理函数的机制。
- 这是用于注册一个 root companion 请求处理函数的机制。
- 注册的函数将在一个拥有超级用户权限的守护进程中运行。
- 这个函数用于处理来自您的模块(运行在目标进程中)的 root companion 请求。
- 该函数必须接受一个整数参数,这个整数实际上是一个 socket 文件描述符,用于与发起请求的目标进程进行通信。
- 重要提示:这个函数可能会在多个线程上同时运行,因此如果您在函数中使用了全局共享资源,需要注意处理可能的竞态条件。
- REGISTER_ZYGISK_COMPANION 是一个宏,用于将您的函数注册为 Zygisk 的 companion 处理函数。使用这个宏可以简化注册过程,确保您的函数能够被 Zygisk 框架正确调用。
这个机制允许您的模块在需要 root 权限的情况下,通过一个单独的具有 root 权限的进程来执行某些操作,从而绕过普通应用进程的权限限制。
利用这个功能就可以实现root用户守护进程中执行的能力
connectCompanion
这段注释很重要! 由于 SELinux 的限制,此 API 仅在 pre[XXX]Specialize 函数中有效,
注意: 如果在没有关闭selinux的情况下, 只能在ap专业化之前操作
实现root读取指定目录的文件
参考官方的注释:

注册:
在你的模块cpp中实现
调用方
注意调用时机:
必须pre[XXX]Specialize 中

- 作者:拓森Leo
- 链接:https://www.uzilol.cn/article/10abf20f-1d11-80cc-9816-f4e7a6f96062
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。



