Zygisk 实作怎么选:多个 Zygisk 实作的详细对比

3519 字
18 分钟
Zygisk 实作怎么选:多个 Zygisk 实作的详细对比

在 KernelSU、APatch 上用 Zygisk 模块,或者想替换 Magisk 内置的 Zygisk,现在有好几个选择。它们名字相近,能力却差很多,有的甚至不是同一类东西。

先说结论:如果你想要一个开源、装一个就能同时跑 Zygisk 模块与 Zygisk Next 模块、并且把「精简」和「隐藏」当成首要目标的方案,推荐 NyaZygisk。下文逐项对照每个项目实际做了什么、没做什么,NyaZygisk 不适合的情况也会写出来,你可以对照自己的需求确认。

Note

利益揭露:我是 NyaZygisk 的维护者,所以这篇会推荐它。但比较的部分只写能在源代码或官方文档里找到依据的事实,NyaZygisk 的限制也一并写出。

数据源:各仓库 2026-10-20 取得的预设分支源代码、README 与 GitHub 数据。Zygisk Next 已闭源,它的信息只来自官方 README、API 文档与发布页,无法核实内部实作,下文凡是这种情况都会标明。「源代码中没有找到」只代表我读过相关代码没看到实作,不等于一定不支持。


🧭 先厘清:这五个不是同一类东西#

讲「Zygisk」时,其实混了两套不同的模块 API:

  • Magisk Zygisk API:Magisk 定义的模块界面(入口 zygisk_module_entry),LSPosed 等大多数 Zygisk 模块都用这套。目前最新版本是 v5。
  • Zygisk Next API(ZN API):Zygisk Next 闭源之后自己添加的界面(入口 zn_module,用 zn_modules.txt 登记)。它可以注入由 init 启动的进程,提供 inline / PLT hook 与符号解析界面,还有 HyperOS Rust Runtime 的回呼。

各项目对两套 API 的支持不同:

  • Zygisk Next 两套都支持,是 ZN API 的原始定义者,但已闭源。
  • NyaZygisk 两套都支持,是目前唯一同时支持两套 API 的开源实作。
  • NeoZygisk、ReZygisk 只实作 Magisk Zygisk API。
  • ZygiskNextNext 只加载 ZN 模块,本身不是 Zygisk 实作,要用 Zygisk 模块得另外装一个。

📋 总览#

Zygisk NextNyaZygiskNeoZygiskReZygiskZygiskNextNext
维护者Dr-TSNG(LSPosed)HSSkyBoy / NkBeJingMatrixPerformanCVeryBaaad
与其他项目的关系原始项目fork 自 NeoZygisk独立发展fork 自 Zygisk Next 开源时期从零实作的 ZN 模块加载器
授权闭源(v4-0.9.2 起)GPL-3.0GPL-3.0AGPL-3.0GPL-3.0
能否审计源代码❌✅✅✅✅
Magisk Zygisk API✅✅ v5✅ v5✅ v5❌
ZN API✅✅ v4❌❌✅ v4
HyperOS Runtime API✅✅ v1❌❌✅ v1
单一模块即可跑两类模块✅✅❌❌❌
主要语言未公开C++ + RustC++ + RustCC++ + Rust(injector)
最低 Android8.07.18.07.15.0
架构arm64、armv7、x86、x86_64、riscv64arm64、armv7、x86_64arm64、armv7、x86、x86_64arm64、armv7、x86、x86_64arm64、armv7、x86、x86_64、riscv64
WebUI有(README 提到翻译)有无有有
最新发布版本v1.5.2(2026-10-15)v2.4(2026-08-10)v2.4(2026-08-08)v1.0.0(2026-05-10)v2.0.0(2026-10-19)
近三个月提交数¹536929216
GitHub Stars¹10.7k2862.5k4.1k65

¹ 取自 GitHub,统计区间为 2026-07-20 至 2026-10-20。Zygisk Next 的提交数只计公开仓库,它的源代码不公开,所以这个数字不代表实际开发量。

Note

「最低 Android」「架构」取自各项目安装脚本、建置设置或公开说明。架构栏是依项目发布与社区实测汇整。

Stars 与提交数只是侧面参考:Stars 反映知名度与用户基数,提交数反映开发活跃度,两者都不等于稳定或好用。NyaZygisk 的用户基数相对小,这是客观事实,意味着问题回馈与社区经验都比 NeoZygisk、ReZygisk 少。


🔒 开源这件事为什么重要#

Zygisk 实作以 root 权限运行,能注入每一个应用进程。它做什么、收集什么,原则上只有看得到源代码才能确认。

Zygisk Next 从 v4-0.9.2 起改为保留所有权利,授权明确禁止修改、再散布,以及拆出任何部分用在其他项目。ReZygisk 的 README 把这点讲得很直接:闭源让社区无法贡献,也无法审计,对一个 root 级别的模块来说是重大的安全疑虑。

Zygisk Next 的开发者在社区里有很好的信誉,这篇不是在质疑他们。但如果你的原则是「root 权限的组件必须可审计」,那 Zygisk Next 就不在选项内。

这也是 NyaZygisk 存在的主要理由:在开源方案里,想同时用 Zygisk 模块与 ZN 模块,过去只能是「NeoZygisk / ReZygisk + ZygiskNextNext」两个模块叠在一起;NyaZygisk 把两套 API 放进同一个 GPL-3.0 的实作里,装一个就够。


🔬 逐项对照#

1. 注入方式与模块加载#

NyaZygiskNeoZygiskReZygiskZygiskNextNext
注入目标进程的方式ptrace 远程调用 dlopen 加载 libzygisk.so同左ptrace + 自制远程 linker(CSOLoader),不经过系统 linker独立的 injector 常驻进程,用 ptrace
发现目标进程的方式监控 execve,辨识 Zygote 与 hyos_spawner监控 execve,辨识 Zygote监控 Zygotetracefs sched_process_exec、proc connector、eBPF、fanotify、KPM,都不可用时退回 /proc 轮询
加载 Zygisk 模块daemon 为每个模块创建密封的唯读 memfd,进程用 android_dlopen_ext 从 fd 加载同左自制 linker 加载不适用
加载 ZN 模块依 zn_modules.txt,同样经 memfd 加载不支持不支持依 zn_modules.txt 加载
ZN 模块可注入的目标Zygote、hyos_spawner——name= / path= 指定的任意 init 启动进程
进程旗标查找daemon 以共享内存(memfd + mmap)缓存,其余走 IPC每次 IPC 查找IPC不适用
Hook 后端Dobby、LSPltLSPltPLTIDobby、ShadowHook、rv64hook、And64InlineHook;LSPlt、PLTI、ByteHook、xHook,可选择

几点说明:

  • NyaZygisk 与 NeoZygisk 的注入流程基本一致(这是 fork 关系),差别主要在 Nya 多了 hyos_spawner 目标与 ZN 加载器。
  • ReZygisk 的取向不同:它不使用系统 linker,目的是对抗基于 linker 的检测(例如检查 solist)。这和 Neo / Nya「用系统 linker 加载、事后清理痕迹」是两种思路,没有绝对优劣。
  • ZygiskNextNext 的目标发现方式最多元,对内核要求最低,这是它支持 Android 5.0 与 riscv64 的原因之一。
  • NyaZygisk 的 ZN 注入范围是真实的功能缺口:daemon 虽然会解析 path=,但进程监控只拦截 Zygote 与 hyos_spawner,所以指定注入其他系统守护进程的 ZN 模块不会生效。

2. 隐藏与痕迹处理#

下表只比较源代码中能确认存在的实作。「—」代表我在源代码里没有找到对应实作。

项目NyaZygiskNeoZygiskReZygisk
DenyList 应用的 mount namespaceZygote 内直接卸载,失败或被中止则 setns 切换到缓存的干净 namespace同左setns 切换到 daemon 准备的 Clean / Mounted namespace
侦测到关键 overlay 时放弃直接卸载✅(如 /product)✅—
为所有 isolated 进程提供一致的 mount 视图✅✅—
卸载模块后清除 linker 内的痕迹(solist)✅✅不适用(不经系统 linker)
清除 libc / linker 加载痕迹、fossil 伪装✅✅—
卸载动作自身留下的痕迹✅✅(v2.4 之后的提交 #161)—
清除 ptrace_message✅(seccomp / PTRACE_SYSCALL 混合)✅✅(seccomp)
DenyList 应用移除 release 日志✅✅—
模块内存映射匿名化(maps)✅ 可选,需在 WebUI 打开「匿名内存」——
CFI shadow 同步处理✅——
TracerPid 清理✅(FD 追踪,hook open / openat / close / read)——
系统属性欺骗(spoof.prop)✅——
逐应用的模块排除清单✅——
接管 KernelSU 的 kernel_umount✅✅—

几点说明:

  • Nya 的隐藏处理是叠加在 Neo 之上的。表中标 ✅ 且 NeoZygisk 也有的项目,是 Nya 从上游继承的;Nya 自己添加的是匿名内存、CFI shadow、TracerPid、属性欺骗和逐应用排除。
  • TracerPid 清理有范围限制:它只 hook libandroid_runtime、libart、libjavacore、libopenjdk、libbase 这几个库的 PLT,拦截的是经由它们读取 /proc/*/status 的路径,不涵盖应用自己的 native 代码直接发出的系统调用。
  • 匿名内存预设不激活,因为它会改动映射,需要用户自己在 WebUI 里打开。
  • 属性欺骗会改变系统属性的回传值,预设的 spoof.prop 涵盖 Bootloader 状态、build type、debuggable 旗标,以及 MIUI、Realme、OPlus 的专属属性;ro.boot.vbmeta.digest 每次加载时随机产生。不需要的人可以删掉相应行。
  • ReZygisk 在隐藏上选择了「根本不碰系统 linker」的路线,所以没有 solist 清理;它在 TracerPid、属性欺骗、maps 伪装这几项我没有找到对应实作。
  • Zygisk Next 和 ZygiskNextNext 是否有同类处理,Zygisk Next 无法核实;ZygiskNextNext 的隐藏重点在注入器本身的行为,与上表的 Zygisk 实作面向不同,这里不做逐项比较。
  • 没有任何一个项目能保证通过所有检测,我也没有逐机型、逐应用实测。

3. 平台与环境适配#

NyaZygiskNeoZygiskReZygiskZygiskNextNext
APatch / KernelSU / Magisk✅✅✅✅
KernelSU Next 等变体辨识✅✅✅未逐项核实
Magisk Alpha / Kitsune 辨识✅✅未找到未逐项核实
KernelSU LKM 后加载(late-load)✅———
KernelSU 模拟软重启(临时 root)✅——✅(含 emulated-soft-reboot.sh)
HyperOS hyos_spawner✅——✅
Android 17 Zygote 签名✅(继承上游)✅未逐项核实未逐项核实
BTI 设备✅(继承上游)✅未逐项核实未逐项核实
32 比特 PLT hook 修正✅(继承上游)✅不适用不适用

4. 管理界面#

NyaZygiskNeoZygiskReZygiskZygiskNextNext
WebUI✅ 分页式:概览、模块、设置—✅✅ Vue 3,两套外观
多语言繁中、简中、英文—透过 Crowdin 翻译未逐项核实
区分模块类型(Zygisk / Next)✅不适用不适用不适用
显示 ROM、内核、ABI、SDK✅—未逐项核实未逐项核实
action.sh 状态输出—✅未逐项核实未逐项核实

🔍 各项目小结#

Zygisk Next#

  • 优势:两套 API 都支持,ZN 模块可以注入任意由 init 启动的进程;HyperOS Runtime API 由它提出;新的 ZN 模块通常以它为首要测试对象;活跃维护,v1.5.2 刚在 2026-10-15 发布。
  • 限制:闭源,无法审计,也不能被修改或 fork。

NyaZygisk#

  • 优势:
    • 开源,且单一模块同时加载 Magisk Zygisk 模块(v5)、ZN 模块(v4)与 HyperOS Runtime 模块(v1);
    • 在 NeoZygisk 的 DenyList 基础上叠加了 TracerPid、属性欺骗、匿名内存、CFI shadow 与逐应用排除;
    • 支持 KernelSU LKM 后加载与模拟软重启;
    • 最低支持 Android 7.1,比上游 NeoZygisk 的 8.0 更低;
    • 有 WebUI,可以区分 [Zygisk] / [Next] 模块并设置逐应用排除。
  • 限制:
    • ZN 模块只会注入 Zygote 与 hyos_spawner;
    • 不支持 riscv64,最低 Android 版本也高于 ZygiskNextNext 的 5.0;
    • 用户基数与社区经验少于 NeoZygisk、ReZygisk(Stars 286,对比 2.5k 与 4.1k);
    • 代码量与维护面比上游大(见下文);
    • 属性欺骗这类行为改变了系统属性的回传值,若你不需要,就多了一份额外的行为。

NeoZygisk#

  • 优势:NyaZygisk 的上游,专注做好 Magisk Zygisk API,功能范围克制,社区经验多(Stars 2.5k);DenyList 的 Zygote 直接卸载加 setns 后备就设计在这里;跟进 Android 17 与 BTI 设备的支持。
  • 限制:不支持 ZN API,ZN 模块无法使用;无 WebUI;最低 Android 8.0;没有 TracerPid 清理与属性欺骗。

ReZygisk#

  • 优势:
    • 整个代码库用 C 重写,二进位更小;
    • 自制 linker(CSOLoader),不经系统 linker,对抗基于 linker 的检测,这个设计方向在五者中独有;
    • 用户基数大(Stars 4.1k),WebUI 翻译与社区管道完整;
    • 最低支持 Android 7.1;
  • 限制:不支持 ZN API;在 TracerPid、属性欺骗、maps 伪装这几项我没有找到对应实作;最近一个正式版是 v1.0.0(2026-05-10)。

ZygiskNextNext#

  • 优势:ZN API 实作完整,可注入任意由 init 启动的进程;对内核要求最低,支持 Android 5.0 起与 riscv64;开发最活跃(近三个月 216 次提交,v2.0.0 在 2026-10-19 发布)。
  • 限制:它不是 Zygisk 实作,Magisk Zygisk 模块(例如 LSPosed)不会被它加载,必须搭配另一个 Zygisk 实作使用,也就是要装两个模块。

✅ 按需求选#

你的需求推荐
想要开源,又要同时跑 Zygisk 模块和 ZN 模块NyaZygisk
用 HyperOS,需要 HyperOS Runtime 模块NyaZygisk
只用 Magisk Zygisk 模块(如 LSPosed),但在意属性与注入痕迹的隐藏NyaZygisk
用 KernelSU LKM 后加载或临时 rootNyaZygisk
只用 Magisk Zygisk 模块,想要最精简、不需要额外隐藏处理,且重视社区经验NeoZygisk
只用 Magisk Zygisk 模块,重视对 linker 检测的对抗,或偏好 C 代码库ReZygisk
ZN 模块要注入 Zygote 以外的系统守护进程Zygisk Next,或 NeoZygisk + ZygiskNextNext
riscv64 设备,或 Android 5.0 ~ 7.0,需要 ZN 模块Zygisk Next

几点补充:

  • 不要同时装多个 Zygisk 实作。NyaZygisk、NeoZygisk、ReZygisk、Zygisk Next 彼此是替代关系,Magisk 用户也要先关闭内置 Zygisk。ZygiskNextNext 是唯一设计成与 Zygisk 实作并存的。
  • Magisk 用户:在 NyaZygisk / NeoZygisk 上,请勿打开 Magisk 的「强制运行排除列表(Enforce DenyList)」,它是 Magisk 自己的机制,可能与实作本身的隐藏机制冲突。
  • 隐藏效果因机型与检测方案而异。以上只描述各项目的机制,没有任何一个能保证通过所有检测。

🎯 NyaZygisk 的定位:精简,与隐藏#

最后说明 NyaZygisk 想做什么,也方便你判断它是不是你要的。

精简,指的是目标,不是行数。NyaZygisk 把力气花在注入引擎与模块加载引擎本身,不往模块管理、在线更新、主题之类的方向堆功能;ZN API 这一层也只做模块真正需要的部分(hook、符号解析、companion),而不是拷贝整个 Zygisk Next。

需要说清楚的是:这不代表代码量最少。以注入器与 daemon 的源代码行数粗估,NyaZygisk 约 1.4 万行,NeoZygisk 约 1.1 万行,ReZygisk 约 1.1 万行,ZygiskNextNext 约 1.3 万行(不含第三方库与 WebUI 前端)。相比上游多出来的部分,主要是 ZN 兼容层、隐藏处理和 WebUI。如果「精简」对你来说就是「代码最少」,NeoZygisk 更符合。

隐藏,是 NyaZygisk 和上游拉开差距的主要方向:

  • 在上游 DenyList(Zygote 直接卸载 + setns 后备)的基础上,补上 TracerPid、属性欺骗、匿名内存、CFI shadow 处理;
  • 模块全部卸载后把痕迹清干净,包括卸载动作自己留下的;
  • 这些额外的隐藏处理都尽量做成可选或可调整的,例如匿名内存需要手动打开、spoof.prop 可以自己编辑,不强迫所有人接受。

所以,如果你的需求是「模块能加载、尽量少露痕迹、不想为了两套 API 装两个模块」,NyaZygisk 就是为这个场景做的;如果你只需要最基本的 Zygisk,或需要 ZN 模块注入任意系统进程,上面的表格已经列出了更合适的选择。


🔗 相关链接#

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
Zygisk 实作怎么选:多个 Zygisk 实作的详细对比
https://www.nkbe.top/posts/zygisk-implementations-compare/
作者
NkBe
发布于
2026-10-18
许可协议
CC BY-NC-SA 4.0
文章目录