Zygisk 实作怎么选:多个 Zygisk 实作的详细对比
在 KernelSU、APatch 上用 Zygisk 模块,或者想替换 Magisk 内置的 Zygisk,现在有好几个选择。它们名字相近,能力却差很多,有的甚至不是同一类东西。
先说结论:如果你想要一个开源、装一个就能同时跑 Zygisk 模块与 Zygisk Next 模块、并且把「精简」和「隐藏」当成首要目标的方案,推荐 NyaZygisk。下文逐项对照每个项目实际做了什么、没做什么,NyaZygisk 不适合的情况也会写出来,你可以对照自己的需求确认。
利益揭露:我是 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 Next | NyaZygisk | NeoZygisk | ReZygisk | ZygiskNextNext | |
|---|---|---|---|---|---|
| 维护者 | Dr-TSNG(LSPosed) | HSSkyBoy / NkBe | JingMatrix | PerformanC | VeryBaaad |
| 与其他项目的关系 | 原始项目 | fork 自 NeoZygisk | 独立发展 | fork 自 Zygisk Next 开源时期 | 从零实作的 ZN 模块加载器 |
| 授权 | 闭源(v4-0.9.2 起) | GPL-3.0 | GPL-3.0 | AGPL-3.0 | GPL-3.0 |
| 能否审计源代码 | ❌ | ✅ | ✅ | ✅ | ✅ |
| Magisk Zygisk API | ✅ | ✅ v5 | ✅ v5 | ✅ v5 | ❌ |
| ZN API | ✅ | ✅ v4 | ❌ | ❌ | ✅ v4 |
| HyperOS Runtime API | ✅ | ✅ v1 | ❌ | ❌ | ✅ v1 |
| 单一模块即可跑两类模块 | ✅ | ✅ | ❌ | ❌ | ❌ |
| 主要语言 | 未公开 | C++ + Rust | C++ + Rust | C | C++ + Rust(injector) |
| 最低 Android | 8.0 | 7.1 | 8.0 | 7.1 | 5.0 |
| 架构 | arm64、armv7、x86、x86_64、riscv64 | arm64、armv7、x86_64 | arm64、armv7、x86、x86_64 | arm64、armv7、x86、x86_64 | arm64、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) |
| 近三个月提交数¹ | 5 | 36 | 9 | 29 | 216 |
| GitHub Stars¹ | 10.7k | 286 | 2.5k | 4.1k | 65 |
¹ 取自 GitHub,统计区间为 2026-07-20 至 2026-10-20。Zygisk Next 的提交数只计公开仓库,它的源代码不公开,所以这个数字不代表实际开发量。
「最低 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. 注入方式与模块加载
| NyaZygisk | NeoZygisk | ReZygisk | ZygiskNextNext | |
|---|---|---|---|---|
| 注入目标进程的方式 | ptrace 远程调用 dlopen 加载 libzygisk.so | 同左 | ptrace + 自制远程 linker(CSOLoader),不经过系统 linker | 独立的 injector 常驻进程,用 ptrace |
| 发现目标进程的方式 | 监控 execve,辨识 Zygote 与 hyos_spawner | 监控 execve,辨识 Zygote | 监控 Zygote | tracefs 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、LSPlt | LSPlt | PLTI | Dobby、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. 隐藏与痕迹处理
下表只比较源代码中能确认存在的实作。「—」代表我在源代码里没有找到对应实作。
| 项目 | NyaZygisk | NeoZygisk | ReZygisk |
|---|---|---|---|
| DenyList 应用的 mount namespace | Zygote 内直接卸载,失败或被中止则 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清理有范围限制:它只 hooklibandroid_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. 平台与环境适配
| NyaZygisk | NeoZygisk | ReZygisk | ZygiskNextNext | |
|---|---|---|---|---|
| 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. 管理界面
| NyaZygisk | NeoZygisk | ReZygisk | ZygiskNextNext | |
|---|---|---|---|---|
| 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);
- 代码量与维护面比上游大(见下文);
- 属性欺骗这类行为改变了系统属性的回传值,若你不需要,就多了一份额外的行为。
- ZN 模块只会注入 Zygote 与
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 后加载或临时 root | NyaZygisk |
| 只用 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 Next(README 与 API 标头档)
- NyaZygisk(介绍页)
- NeoZygisk
- ReZygisk
- ZygiskNextNext
- ZygiskNextModuleSample:ZN 模块范例
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

