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
文章目錄