NyaZygisk WebUI 使用说明:每个功能是做什么的、怎么用
NyaZygisk 装好之后,不用开终端机也能确认它有没有正常运作,还能针对单一 App 关掉 Zygisk 模块。这些都在模块自带的 WebUI 里完成。这篇把 WebUI 的每个区块说明一遍:它显示什么、数据从哪来、每个开关改了什么。
先说结论:WebUI 只有两个分页,概览(看状态、看模块、三个设置)和应用排除(挑 App 不加载模块)。日常只会用到后者。
本文依据 NyaZygisk 仓库的 module/src/webroot/(前端)与 zygiskd、loader(读取设置的一端)源代码整理,截稿时我没有逐项在实机上重新操作一遍,界面文字以源代码内的字符串为准。如果你的版本和描述不一致,以实际画面为准。
🚪 怎么打开
- 在 Root 管理器(KernelSU / APatch)的模块页找到 NyaZygisk,点模块卡片上的 WebUI 入口(通常是个「打开」或网页图标的按钮)。
- Magisk 本身没有 WebUI 入口,要用支持 WebUI 的第三方管理器开。前端内置的桥接界面有
window.kernelsu、KernelSU、WebUIX、apatch、mmrl这几种,侦测不到任何一种时,页面会跳出「找不到支持的 WebUI bridge」。
WebUI 所有数据都是透过管理器提供的 exec 界面,以 root 身分运行 shell 命令取得的,不是靠网络,脱机也能用。
📊 分页一:概览
顶部:版本与刷新
标题下方的小字是 NyaZygisk 版本 · Root 方案與版本,例如 v2.5 · KernelSU …。右上角的圆形箭头是刷新,会重新读取所有状态并重新加载应用清单,成功后底部会弹出「已刷新」。
状态卡片:Zygisk 现在到底有没有在运作
最上面的大卡片用颜色和图标直接告诉你结论,下面列出三个组件的状态:
| 组件 | 含义 |
|---|---|
| Zygote 监控(Zygote Monitor) | 盯着 Zygote 进程、负责注入的监控组件,它停了就不会有注入 |
| Zygote(会标示 64-bit / 32-bit) | Zygote 进程有没有被注入 |
| 守护进程(Daemon) | zygiskd,负责给模块提供文件、companion 等服务 |
每个组件的状态字样分两类:
- 正常(绿):
運行中、已注入、追蹤中 - 异常(红):
已停止、已退出、已崩潰、未注入 - 其他(灰):
未知
大卡片的总结按下面的规则决定,这是前端 overallTone 的逻辑:
| 卡片 | 条件 | 怎么办 |
|---|---|---|
| ✅ 运行正常 | 三个组件全部正常 | 不用管 |
| ⚠️ 部分异常 | 监控与 Zygote 都没问题,但别的组件异常(通常是守护进程) | 模块可能加载不了,先刷新,再重开机 |
| ❌ 未运行 | 监控或 Zygote 有一个异常 | Zygisk 没生效,重开机;仍然不行就收集 debug 日志回报 |
| ❔ 状态未知 | 读不到状态,或刚装好还没重开机 | 重开机后再看;若同时出现桥接错误,换一个支持 WebUI 的管理器 |
装完模块、重开机之后,第一件事就是开 WebUI 看这张卡片。README 的安装步骤最后一步也是这个。
设备与环境
这张卡片列出:
- Root 方案:侦测 APatch / FolkPatch / KernelSU / Magisk,能取得版本时一并显示。做法是检查
apd、fpd、magiskd进程与/data/adb/ksu目录,SukiSU 这类会显示为 KernelSU 或 SukiSU。 - 系统:只有侦测到厂商 ROM 才会出现。目前认得 ColorOS / OxygenOS、HyperOS、MIUI、One UI,版本取自各家的系统属性。AOSP 类系统这格会隐藏。
- 内核、Android SDK、ABI:直接读自守护进程回报的数据。
回报问题时,把这张卡片截屏附上最省事,维护者不用再追问你的环境。
已激活模块
列出目前激活中、并且是 Zygisk 或 ZN 模块的项目,右上角的数字是总数。每个模块显示名称、版本、说明、作者,以及标签:
Zygisk:走 Magisk Zygisk API 的模块(例如 LSPosed 这一类)ZN:走 Zygisk Next API 的模块。若它的注入目标不是 zygote,会多显示一行「目标:xxx」Companion:这个模块有使用 companion 进程
清单的来源是两份数据合并:
- 扫描
/data/adb/modules/*,跳过有disable或remove标记的目录,只保留含有zygisk/<abi>.so或zn_modules.txt的模块,并读它的module.prop。 - 守护进程回报的模块清单,补上类型(Zygisk / ZN)、目标和 companion 信息。
所以如果某个模块没出现在这里,先检查它是不是被禁用了,或者它根本不是 Zygisk 模块(没有 zygisk/ 目录也没有 zn_modules.txt)。反过来,刚激活还没重开机的模块,可能已经在清单里但还没真正加载,要以重开机后的状态为准。
设置
匿名内存(Anonymous memory)——「特化后隐藏模块的内存映射」,预设关闭。
打开后,App 进程完成特化(specialize)之后,NyaZygisk 会把 /proc/self/maps 里由模块产生的映射(路径名含 jit-cache-zygisk、zygisk-module、zn-module 的私有映射)改成匿名映射,同时把 rwx 的映射去掉写入权限。目的是让侦测 App 扫描 maps 时,看不到这些带有模块特征的名字。
- 适合:你的 App 会扫 maps 找 Zygisk 痕迹,且你已经确认需要这个功能。
- 不适合:没有这种需求的情况不用开。它会改动进程的内存属性,有用户反馈打开后出现过系统界面进不去、状态显示
Monitor: NO等问题。遇到类似状况,先把它关掉确认是不是原因。 - 开关改动后即写入设置,对之后启动的 App 进程生效,已经在跑的 App 要重新启动。
自订链接器(Custom linker)——「不经过系统链接器加载模块(实验性)」,预设关闭。
一般情况下,模块是交给系统的动态链接器(android_dlopen_ext)加载的,加载后会登记在链接器的 solist 里。打开这个开关后,NyaZygisk 改用自己内置的 ELF 加载器把模块映射进内存并完成重定位,模块不会进入系统链接器的纪录;搭配匿名内存时,还能直接映射成匿名页面,不留下 memfd 的名字。
- 适合:想进一步减少模块在系统链接器里留下的痕迹,并且愿意承担实验性功能风险的人。
- 不适合:一般使用。它是实验功能,所以预设不激活。加载失败或遇到不支持的模块时,会自动退回系统链接器;但如果打开后出现闪退或模块异常,请先关掉它再回报。
- 同样对之后启动的 App 进程生效。想确认模块是由哪个加载器加载的,可以用 debug 版看日志里的
modloader:纪录。 - 从 v2.5-r2 起,没有设置这个键时视为关闭;先前版本在没设置时是打开的,更新后如果还要用,需要在 WebUI 重新打开。
语言(Language)——EN / 繁中 / 简中,切换后立刻生效,选择记在 WebUI 自己的本机保存里,不影响模块本身。
🛡️ 分页二:应用排除
这是 WebUI 里最实用的功能:勾选的 App 完全不加载任何 Zygisk 模块。
典型场景:
- 某个 App 侦测到 Zygisk 或 Hook 就拒绝运行或封号,又不需要任何模块的功能。
- 某个模块对特定 App 造成闪退,你想先把那个 App 排除掉而不是禁用整个模块。
怎么用
- 切到底部的应用排除分页(分页标签上的数字是目前已排除的 App 数量)。
- 在列表里找到目标 App:
- 搜索框支持依名称或套件名搜索;
- 上方有「全部 N / 已排除 N」两个筛选,可以只看已排除的。
- 打开该 App 右侧的开关。每次切换都会立刻保存,并弹出「已保存」。
- 重新启动那个 App(建议从最近任务里彻底滑掉再开)。排除只在 App 下次启动时生效,已经在跑的进程不受影响。尚未生效的项目旁边会显示「待重启」标签。
列表中已排除的项目会排在最前面,其余依名称排序。切换时列的位置不会跳走,所以连续勾选多个不会点错。
「同时卸载模块挂载」
分页上方的这个开关(Unmount for excluded apps),预设打开。
- 开:被排除的 App 除了不加载模块之外,还会像 DenyList 一样,把 Root 与模块的挂载从它的 mount namespace 里卸掉。
- 关:只是不加载模块,挂载痕迹不处理。
也就是说,开着这个开关时,勾选一个 App 的效果等于「既不让模块进去,又让它看不到挂载」。如果你本来就用 Root 管理器的「卸载模块」功能(APatch / KernelSU)或 Magisk 的 DenyList 处理过这个 App,这个开关和它们是并行的,不冲突。
应用排除和 DenyList 不是同一个东西:DenyList 管的是挂载(Zygisk 模块还是会被加载),应用排除管的是模块加载(再加上可选的卸载挂载)。要彻底把 App 隔离在模块之外,用应用排除并保持「同时卸载模块挂载」打开。
它的限制
界面顶部的提示已经写了,这里再展开:
- 只列出用户安装的 App(
pm list packages -3)。系统 App 不会出现,也不能排除,这是刻意的:system_server和系统 UID 永远不受影响,避免把系统搞坏。 - 共用 UID 的 App 会一起切换。 如果多个套件共用同一个 UID,排除其中一个等于排除全部,列表里会标出「与另外 N 个套件共用 UID,会一起切换」。
- 与系统套件共用 UID 的 App 无法排除。 这类项目开关是灰的,并注明「与系统套件共用 UID,无法排除」。原因是守护进程只有在同一 UID 下所有套件都在排除清单里才会排除,而系统套件不允许被列进去。
- 已卸载的套件会被自动清掉,不会留下看不见的残留项目。
- 显示 App 名称需要管理器提供套件信息界面(KernelSU 系的 WebUI 有);没有时只显示套件名,功能不受影响。
🧰 常见状况
| 现象 | 可能原因与处理 |
|---|---|
打开后全是 - 和「状态未知」,弹出「找不到支持的 WebUI bridge」 | 用的管理器没有提供 exec 界面,换成 KernelSU / APatch 自带的入口,或支持 WebUI 的第三方管理器 |
| 状态是「部分异常」 | 守护进程没起来,先刷新,再重开机;仍异常就用 debug 版收集日志 |
| 「未运行」 | Zygisk 没生效。确认没有同时安装别的 Zygisk 实作(NeoZygisk、ReZygisk、Zygisk Next),Magisk 用户要关闭内置 Zygisk |
| 模块清单是空的 | 模块没激活,或不是 Zygisk / ZN 模块 |
| 勾选排除后 App 还是加载了模块 | 没有重启该 App,或该 App 与系统套件共用 UID(开关是灰的) |
| 弹出「保存设置失败」 | 写入 config.prop 失败,开关会自动弹回原状态,检查管理器是否给了 WebUI root 权限 |
🔧 给高级用户:设置存在哪
WebUI 的所有设置都是写进同一个文件:
/data/adb/nyazygisk/config.prop| 键 | 值 | 含义 |
|---|---|---|
anonymous_memory | 1 / 0 | 匿名内存,没有这个键视为关闭 |
custom_linker | 1 / 0 | 自订链接器,没有这个键视为关闭(只有 1 才激活) |
exclude_unmount | 1 / 0 | 同时卸载模块挂载,没有这个键视为打开 |
exclude_apps | pkg1,pkg2,... | 排除的套件名,逗号分隔 |
WebUI 写入时只改自己的那一个键、其余保留,并且先写暂存盘再改名,避免写到一半被读到。守护进程会监看这个文件的修改时间,变动后自动清掉缓存,所以不用重启守护进程,在 WebUI 之外手动编辑也一样生效(同样是对之后启动的进程生效)。
小结
- 装完先看概览的状态卡片:绿色就是 Zygisk 正常。
- 模块清单用来确认「我的模块有没有真的被识别、被当成哪一类」。
- 应用排除是主要的日常功能:勾选 → 重启该 App;想连挂载也藏掉就保持「同时卸载模块挂载」开着。
- 匿名内存只有在 App 会扫 maps 的时候才需要开。
- 自订链接器是实验功能,预设关闭;打开后若出问题,先关掉再回报。
如果你发现说明和实际行为不符,或有想要的功能,欢迎到 GitHub 开 issue,或到 Telegram 频道 @NyaZygisk 反映。
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

