diff --git a/website/docs/public/templates/nethunter.root b/website/docs/public/templates/nethunter.root index ee5e201eb402..31640c10656a 100644 --- a/website/docs/public/templates/nethunter.root +++ b/website/docs/public/templates/nethunter.root @@ -18,5 +18,11 @@ "CAP_SETGID", ], "context":"u:r:su:s0", - "rules":[""] + "rules":[""], + "locales": { + "zh_TW": { + "name": "Kali NetHunter", + "description": "提供Kali NetHunter使用chroot" + } + } } diff --git a/website/docs/zh_CN/guide/installation.md b/website/docs/zh_CN/guide/installation.md index 4cf81e571595..ee95b9be7226 100644 --- a/website/docs/zh_CN/guide/installation.md +++ b/website/docs/zh_CN/guide/installation.md @@ -77,7 +77,7 @@ LKM 模式不会替换掉设备原有的内核,而是使用可加载内核模 1. 不会替换掉设备原有的内核;如果你对设备原有的内核有特殊需求,或者你希望在使用第三方内核的同时使用 KernelSU,可以使用 LKM 模式; 2. 升级和 OTA 较为方便;升级 KernelSU 时,可以直接在管理器里面安装,无需再手动刷写;系统 OTA 后,可以直接安装到第二个槽位,也无需再手动刷写; -3. 适用于一些特殊场景;比如使用临时 ROOT 权限也可以加载 LKM,由于不需要替换 boot 分区,因此不会触发 avb,不会使设备以外变砖; +3. 适用于一些特殊场景;比如使用临时 ROOT 权限也可以加载 LKM,由于不需要替换 boot 分区,因此不会触发 avb,不会使设备意外变砖; 4. LKM 可以被临时卸载;如果你临时想取消 root,可以卸载 LKM,这个过程不需要刷写分区,甚至也不用重启设备;如果你想再次 root,只需要重启设备即可; :::tip 两种模式共存 diff --git a/website/docs/zh_TW/guide/app-profile.md b/website/docs/zh_TW/guide/app-profile.md index acb51b58ff55..659c5660164b 100644 --- a/website/docs/zh_TW/guide/app-profile.md +++ b/website/docs/zh_TW/guide/app-profile.md @@ -1,4 +1,4 @@ -# App Profile +# App Profile {#app-profile} App Profile 是 KernelSU 提供的一種針對各種應用程式自訂其使用配置的機制。 @@ -6,9 +6,9 @@ App Profile 是 KernelSU 提供的一種針對各種應用程式自訂其使用 對於沒有被授予 root 權限的普通應用,App Profile 可以控制核心以及模組系統對此應用的行為;例如是否需要針對此應用程式卸載模組造成的修改等。核心和模組系統可以透過此配置決定是否要做一些類似「隱藏痕跡」類別的操作。 -## Root Profile +## Root Profile {#root-profile} -### UID、GID 和 groups +### UID、GID 和 groups {#uid-gid-and-groups} Linux 系統中有使用者和群組兩個概念。每個使用者都有一個使用者 ID(UID),一個使用者可以屬於多個群組,每個群組也有群組 ID(GID)。此 ID 用於識別系統的使用者並確定使用者可以存取哪些系統資源。 @@ -39,7 +39,7 @@ App Profile 只是控制 root 應用程式使用 `su` 後的權限,它並非 與應用程式透過 `su` 主動切換使用者或群組不同,Root Profile 是在核心中強制實施的,不依賴 root 應用程式的自覺行為,`su` 權限的授予完全取決於使用者而非開發者。 -### Capabilities +### Capabilities {#capabilities} Capabilities 是 Linux 的一種分權機制。 @@ -55,7 +55,7 @@ KernelSU 的 Root Profile 可以自訂執行 `su` 後 root 程式的 Capabilitie Linux 系統關於 Capability 的[官方文件](https://man7.org/linux/man-pages/man7/capabilities.7.html),解釋了每一項Capability 所代表的能力,寫的非常詳細,如果你想要自訂Capabilities,請務必先閱讀此文件。 ::: -### SELinux +### SELinux {#selinux} SELinux 是一種強大的強制權限存取控制(MAC)機制。它按照**預設拒絕**的原則運作:任何未經明確允許的行為都會被拒絕。 @@ -87,7 +87,7 @@ allow app1 * * * 注意:此處的 `allow app1 * * *` 僅僅作為演示方便而使用,實際過程中不應使用這個規則,因為它跟 permissive 區別不大。 -### 逃逸 +### 逃逸 {#escalation} 如果 Root Profile 的配置不合理,那麼可能會發生逃逸的情況:Root Profile 的限制會意外失效。 @@ -102,9 +102,9 @@ allow app1 * * * 如果你的確需要給 adb 授予 root 權限(例如你是開發者),那麼不建議你在配置 Root Profile 的時候將 UID 改成 `2000`,用 `1000(system)` 會更好。 ::: -## Non Root Profile +## Non Root Profile {#non-root-profile} -### 卸載模組 +### 卸載模組 {#umount-modules} KernelSU 提供了一種 systemless 的方式來修改系統分區,這是透過掛載 overlayfs 來實現的。但有些情況下,App 可能會對這種行為比較敏感;因此,我們可以透過設定「卸載模組」來卸載掛載在這些應用程式上的模組。 @@ -114,5 +114,5 @@ KernelSU 提供了一種 systemless 的方式來修改系統分區,這是透 2. 關閉「預設卸載模組」的開關,然後針對需要「卸載模組」的應用程式進行單獨的設置,在 App Profile 中開啟「卸載模組」;(相當於「黑名單」)。 :::info -KernelSU 在 5.10 及以上內核上,內核會執行“卸載模組”的操作;但在 5.10 以下的設備上,這個開關僅僅是一個“設定”,KernelSU 本身不會做任何動作,一些模組(如 Zygisksu 會透過這個模組決定是否需要卸載) +KernelSU 在 5.10 及以上內核上,內核無須任何修改就可以卸載模組;但在 5.10 以下的設備上,這個開關僅僅是一個“設定”,KernelSU 本身不會做任何動作,如果你希望在 5.10 以前的內核可以卸載模組,你需要將 `path_unmount` 函數向後移植到 `fs/namespace.c`,您可以在[如何為非 GKI 核心整合 KernelSU](/zh_TW/guide/how-to-integrate-for-non-gki.html)的末尾獲取更多資訊。一些模組(如 ZygiskNext)也會透過這個設定決定是否需要卸載。 ::: \ No newline at end of file diff --git a/website/docs/zh_TW/guide/hidden-features.md b/website/docs/zh_TW/guide/hidden-features.md index 1a12947cb5eb..c3a192b66e33 100644 --- a/website/docs/zh_TW/guide/hidden-features.md +++ b/website/docs/zh_TW/guide/hidden-features.md @@ -1,4 +1,4 @@ -# 隱藏功能 +# 隱藏功能 {#hidden-features} ## .ksurc diff --git a/website/docs/zh_TW/guide/how-to-build.md b/website/docs/zh_TW/guide/how-to-build.md index dff349549ea4..034044945df1 100644 --- a/website/docs/zh_TW/guide/how-to-build.md +++ b/website/docs/zh_TW/guide/how-to-build.md @@ -1,4 +1,4 @@ -# 如何建置 KernelSU? +# 如何建置 KernelSU? {#how-to-build-kernelsu} 首先,您需要閱讀核心建置的 Android 官方文件: @@ -9,9 +9,9 @@ 此文件適用於 GKI 裝置,如果您是舊版核心,請參閱[如何為非 GKI 裝置整合 KernelSU](how-to-integrate-for-non-gki) ::: -## 建置核心 +## 建置核心 {#build-kernel} -### 同步核心原始碼 +### 同步核心原始碼 {#sync-the-kernel-source-code} ```sh repo init -u https://android.googlesource.com/kernel/manifest @@ -22,7 +22,7 @@ repo sync `` 是一個可以唯一確定組建的資訊清單檔案,您可以使用這個資訊清單進行可重新預測的組建。您需要從[標準核心映像 (GKI) 發行組建](https://source.android.com/docs/core/architecture/kernel/gki-release-builds) 下載資訊清單檔案 -### 建置 +### 建置 {#build} 請先查看[官方文件](https://source.android.com/docs/setup/build/building-kernels)。 @@ -48,7 +48,7 @@ rm common/android/abi_gki_protected_exports_* ``` ::: -## 使用 KernelSU 建置核心 +## 與 KernelSU 一起建置核心 {#build-kernel-with-kernelsu} 如果您可以成功建置核心,那麼建置 KernelSU 就會非常輕鬆,依自己的需求在核心原始碼根目錄中執行以下任一命令: diff --git a/website/docs/zh_TW/guide/how-to-integrate-for-non-gki.md b/website/docs/zh_TW/guide/how-to-integrate-for-non-gki.md index 700ef5da1ca6..43b4980e9a66 100644 --- a/website/docs/zh_TW/guide/how-to-integrate-for-non-gki.md +++ b/website/docs/zh_TW/guide/how-to-integrate-for-non-gki.md @@ -54,6 +54,11 @@ CONFIG_KPROBE_EVENTS=y 將 `KernelSU/kernel/ksu.c` 中的 `ksu_enable_sucompat()` 和 `ksu_enable_ksud()` 取消註解,如果正常開機,即 kprobe 已損毀;或者您可以手動嘗試使用 kprobe 功能,如果不正常,手機會直接重新啟動。 ::: +:::info 如何為非 GKI 核心啟用卸載模組功能 + +如果你的內核版本小於 5.10,你應該將 `path_umount` 向後移植至 `fs/namespace.c`。 卸載模組功能依賴於這個函數。 如果你沒有向後移植 `path_umount`,卸載模組功能將無法工作。 你可以在底下查看更多關於 `path_unmount` 的資料。 +::: + ## 手動修改核心原始碼 {#modify-kernel-source-code} 如果 kprobe 無法正常運作 (可能是上游的錯誤或核心版本過低),那您可以嘗試這種方法: @@ -261,4 +266,54 @@ index 45306f9ef247..815091ebfca4 100755 add_input_randomness(type, code, value); ``` +### 如何向後移植 path_umount {#how-to-backport-path_unpount} + +你可以透過向後移植 `path_umount` 來讓卸載模組功能在小於 5.10 的非 GKI 核心上運作. 你可以參考這個修改: + +```diff +--- a/fs/namespace.c ++++ b/fs/namespace.c +@@ -1739,6 +1739,39 @@ static inline bool may_mandlock(void) + } + #endif + ++static int can_umount(const struct path *path, int flags) ++{ ++ struct mount *mnt = real_mount(path->mnt); ++ ++ if (flags & ~(MNT_FORCE | MNT_DETACH | MNT_EXPIRE | UMOUNT_NOFOLLOW)) ++ return -EINVAL; ++ if (!may_mount()) ++ return -EPERM; ++ if (path->dentry != path->mnt->mnt_root) ++ return -EINVAL; ++ if (!check_mnt(mnt)) ++ return -EINVAL; ++ if (mnt->mnt.mnt_flags & MNT_LOCKED) /* Check optimistically */ ++ return -EINVAL; ++ if (flags & MNT_FORCE && !capable(CAP_SYS_ADMIN)) ++ return -EPERM; ++ return 0; ++} ++ ++int path_umount(struct path *path, int flags) ++{ ++ struct mount *mnt = real_mount(path->mnt); ++ int ret; ++ ++ ret = can_umount(path, flags); ++ if (!ret) ++ ret = do_umount(mnt, flags); ++ ++ /* we mustn't call path_put() as that would clear mnt_expiry_mark */ ++ dput(path->dentry); ++ mntput_no_expire(mnt); ++ return ret; ++} + /* + * Now umount can handle mount points as well as block devices. + * This is important for filesystems which use unnamed block devices. +``` + + 最後,再次建置您的核心,KernelSU 將會如期運作。 diff --git a/website/docs/zh_TW/guide/installation.md b/website/docs/zh_TW/guide/installation.md index 7c13569529e0..c0e0f32d3d6e 100644 --- a/website/docs/zh_TW/guide/installation.md +++ b/website/docs/zh_TW/guide/installation.md @@ -2,7 +2,7 @@ ## 檢查您的裝置是否受支援 {#check-if-supported} -從 [GitHub Releases](https://github.com/tiann/KernelSU/releases) 下載 KernelSU 管理員應用程式,然後將應用程式安裝至裝置並開啟: +從 [GitHub Releases](https://github.com/tiann/KernelSU/releases) 下載 KernelSU 管理器應用程式,然後將應用程式安裝至裝置並開啟: - 如果應用程式顯示「不支援」,則表示您的裝置不支援 KernelSU,您需要自行編譯核心才能繼續使用,,KernelSU 官方也永遠不會為您提供一個可以刷新的 Boot 映像。 - 如果應用程式顯示「未安裝」,那麼 KernelSU 支援您的裝置;可以進行下一步作業。 @@ -49,9 +49,94 @@ w .x .y -zzz -k -something 如果您發現您的核心版本是 `android12-5.10.101`,然而您 Android 系統的版本為 Android 13 或者其他;請不要覺得奇怪,因為 Android 系統的版本與 Linux 核心的版本號碼並非一致;Linux 核心的版本號碼一般與**裝置出廠時隨附的 Android 系統的版本一致**,如果後續 Android 系統更新,核心版本一般不會發生變化。如果您需要刷新,**請以核心版本為準!!** -## 安裝簡介 {#installation-introduction} +## 安裝簡介 {#introduction} -KernelSU 的安裝方法有以下幾種,各自適用於不同的場景,請視需要選擇: +自 `0.9.0` 版本以後,在 GKI 裝置中,KernelSU 支援兩種運行模式: + +1. `GKI`:使用**通用核心鏡像**(GKI)取代掉裝置原有的核心。 +2. `LKM`:使用**可載入核心模組**(LKM)的方式載入到裝置核心中,不會替換掉裝置原有的核心。 + +這兩種方式適用於不同的場景,你可以根據自己的需求選擇。 + +### GKI 模式 {#gki-mode} + +GKI 模式會替換掉裝置原有的內核,使用 KernelSU 提供的通用內核鏡像。 GKI 模式的優點是: + +1. 通用型強,適用於大多數裝置;例如三星開啟了 KNOX 的裝置,LKM 模式無法運作。還有一些冷門的魔改裝置,也只能使用 GKI 模式; +2. 不依賴官方韌體即可使用;不需要等待官方韌體更新,只要 KMI 一致,就可以使用; + +### LKM 模式 {#lkm-mode} + +LKM 模式不會替換掉裝置原有的內核,而是使用可載入內核模組的方式載入到裝置內核中。 LKM 模式的優點是: + +1. 不會取代裝置原有的核心;如果你對裝置原有的核心有特殊需求,或是你希望在使用第三方核心的同時使用 KernelSU,可以使用 LKM 模式; +2. 升級和 OTA 較為方便;升級 KernelSU 時,可以直接在管理器內部安裝,無需再手動刷寫;系統 OTA 後,可以直接安裝到第二個槽位,也無需再手動刷寫; +3. 適用於一些特殊場景;例如使用臨時 ROOT 權限也可以載入 LKM,由於不需要替換 boot 分區,因此不會觸發 avb,不會使裝置意外變磚; +4. LKM 可以被暫時卸載;如果你暫時想取消 root,可以卸載 LKM,這個過程不需要刷寫分區,甚至也不用重啟裝置;如果你想再次 root,只需要重啟裝置即可; + +:::tip 兩種模式共存 +打開管理器後,你可以在首頁看到裝置目前運行的模式;注意 GKI 模式的優先級高於 LKM ,如你你既使用 GKI 內核替換掉了原有的內核,又使用 LKM 的方式修補了 GKI 內核,那麼 LKM 會被忽略,裝置將永遠以 GKI 的模式運作。 +::: + +### 選哪個? {#which-one} + +如果你的裝置是手機,我們建議您優先考慮 LKM 模式;如果你的裝置是模擬器、WSA 或 Waydroid 等,我們建議您優先考慮 GKI 模式。 + +## LKM 安裝 {#lkm-installation} + +### 取得官方韌體 {#get-the-official-firmware} + +使用 LKM 的模式,需要取得官方韌體,然後在官方韌體的基礎上修補;如果你使用的是第三方內核,可以把第三方內核的 boot.img 作為官方韌體。 + +取得官方韌體的方法有很多,如果你的裝置支援 `fastboot boot`,那麼我們最推薦以及最簡單的方法是使用 `fastboot boot` 臨時啟動 KernelSU 提供的 GKI 內核,然後安裝管理器,最後在管理器中直接安裝;這種方法不需要你手動下載官方韌體,也不需要你手動提取 boot。 + +如果你的裝置不支援 `fastboot boot`,那麼你可能需要手動去下載官方韌體包,然後從中提取 boot。 + +與 GKI 模式不同,LKM 模式會修改 `ramdisk`,因此在出廠 Android 13 的裝置上,它需要修補的是 `init_boot` 分區而非 `boot` 分區;而 GKI 模式則永遠是操作 `boot` 分區。 + +### 使用管理器 {#use-the-manager} + +開啟管理器,點選右上角的安裝圖標,會出現若干個選項: + +1. 選擇並修補一個文件:如果你手機目前沒有 root 權限,你可以選擇這個選項,然後選擇你的官方韌體,管理器會自動修補它;你只需要刷入這個修補後的文件,即可永久取得 root 權限; +2. 直接安裝:如果你手機已經 root,你可以選擇這個選項,管理器會自動獲取你的裝置資訊,然後自動修補官方韌體,然後刷入;你可以考慮使用`fastboot boot` KernelSU 的 GKI 內核來取得臨時 root 安裝管理器,然後再使用這個選項;這種方式也是 KernelSU 升級最主要的方式; +3. 安裝到另一個分割區:如果你的裝置支援 A/B 分割區,你可以選擇這個選項,管理器會自動修補官方韌體,然後安裝到另一個分割區;這種方式適用於 OTA 後的裝置,你可以在 OTA 後直接安裝到另一個分割區,然後重新啟動裝置即可; + +### 使用命令列 + +如果你不想使用管理器,你也可以使用命令列來安裝 LKM;KernelSU 提供的 `ksud` 工具可以幫助你快速修補官方韌體,然後刷入。 + +這個工具支援 macOS、Linux 和 Windows,你可以在 [GitHub Release](https://github.com/tiann/KernelSU/releases) 下載對應的版本。 + +使用方法:`ksud boot-patch` 具體的使用方法你可以查看命令列幫助。 + +```sh +husky:/ # ksud boot-patch -h +Patch boot or init_boot images to apply KernelSU + +Usage: ksud boot-patch [OPTIONS] + +Options: + -b, --boot boot image path, if not specified, will try to find the boot image automatically + -k, --kernel kernel image path to replace + -m, --module LKM module path to replace, if not specified, will use the builtin one + -i, --init init to be replaced + -u, --ota will use another slot when boot image is not specified + -f, --flash Flash it to boot partition after patch + -o, --out output path, if not specified, will use current directory + --magiskboot magiskboot path, if not specified, will use builtin one + --kmi KMI version, if specified, will use the specified KMI + -h, --help Print help +``` +需要說明的幾個選項: +1. `--magiskboot` 選項可以指定 magiskboot 的路徑,如果不指定,ksud 會在環境變數中尋找;如果你不知道如何取得 magiskboot,可以參考[這裡](#patch-boot-image); +2. `--kmi` 選項可以指定 `KMI` 版本,如果你的裝置核心名字沒有遵循 KMI 規範,你可以透過這個選項來指定; +最常見的使用方法為: +```sh +ksud boot-patch -b --kmi android13-5.10 +``` +## GKI 安裝 +GKI 的安裝方式有以下幾種,各自適用於不同的場景,請依需求選擇: 1. 使用自訂 Recovery (如 TWRP) 安裝 2. 使用核心刷新應用程式 (例如 Franco Kernel Manager) 安裝 @@ -87,11 +172,11 @@ PS. 這種方法適用於任何狀況下的安裝 (不限於初次安裝或後 PS. 這種方法在更新 KernelSU 時比較方便,無需電腦即可完成 (注意備份!)。 -## 使用 KernelSU 提供的 boot.img 安裝 {#install-by-kernelsu-boot-image} +## 使用 KernelSU 提供的 boot.img 安裝 {#install-with-boot-img-provided-by-kernelsu} 這種方法無需您有 TWRP,也無需您的手機有 Root 權限;適用於您初次安裝 KernelSU。 -### 找到合適的 boot.img {#found-propery-image} +### 找到合適的 boot.img {#find-proper-boot-img} KernelSU 為 GKI 裝置提供了標準 boot.img,您需要將 boot.img 刷新至裝置的 Boot 分割區。 @@ -105,7 +190,7 @@ KernelSU 為 GKI 裝置提供了標準 boot.img,您需要將 boot.img 刷新 3. Pixel 裝置有些特殊,請遵循下方的指示。 ::: -### 將 boot.img 刷新至裝置 {#flash-boot-image} +### 將 boot.img 刷新至裝置 {#flash-boot-img-to-device} 使用 `adb` 連接您的裝置,然後執行 `adb reboot bootloader` 進入 fastboot 模式,然後使用此命令刷新 KernelSU: @@ -161,7 +246,7 @@ fastboot reboot 7. 使用 `Image` 取代 `kernel`: `mv -f Image kernel` 8. 執行 `./magiskboot repack boot.img` 重新封裝 img,此時您會得到一個 `new-boot.img` 檔案,透過 Fastboot 將這個檔案刷新至裝置即可。 -## 其他替代方法 {#other-methods} +## GKI的其他替代方法 {#other-methods} 其實所有這些安裝方法的主旨只有一個,那就是**將原廠核心取代為 KernelSU 提供的核心**;只要能實現這個目的,就可以安裝;比如以下是其他可行的方法: diff --git a/website/docs/zh_TW/guide/module-webui.md b/website/docs/zh_TW/guide/module-webui.md index 02e424adb0fc..5dbdaf7826f2 100644 --- a/website/docs/zh_TW/guide/module-webui.md +++ b/website/docs/zh_TW/guide/module-webui.md @@ -1,10 +1,10 @@ -# 模組 WebUI +# 模組 WebUI {#module-webui} KernelSU 的模組除了執行啟動腳本和修改系統檔案之外,還支援顯示 UI 介面和與使用者互動。 該模組可以透過任何 Web 技術編寫HTML + CSS + JavaScript頁面。 KernelSU的管理器將透過 WebView 顯示這些頁面。它還提供了一些用於與系統互動的JavaScript API,例如執行shell命令。 -## WebUI 根目錄 +## WebUI 根目錄 {#webroot-directory} Web資源應放置在模組根目錄的`webroot`子目錄中,並且其中**必須**有一個名為`index.html`的文件,該檔案是模組頁面入口。 diff --git a/website/docs/zh_TW/guide/rescue-from-bootloop.md b/website/docs/zh_TW/guide/rescue-from-bootloop.md index b75b3192b3ab..281f23341814 100644 --- a/website/docs/zh_TW/guide/rescue-from-bootloop.md +++ b/website/docs/zh_TW/guide/rescue-from-bootloop.md @@ -2,7 +2,7 @@ 在刷新裝置時,我們很可能會遇到裝置「變磚」的狀況,從理論上講,如果您只是使用 Fastboot 刷新 Boot 分割區或者安裝不合適的模組導致裝置無法開機,那麼這都可以透過合適的作業還原您的手機;這個文件提供一些緊急方法可以讓您在「變磚」中還原。 -## 刷新 Boot 時變磚 +## 刷新 Boot 時變磚 {#brick-by-flashing-boot-partition} 在 KernelSU 中,刷新 boot 時變磚有下列原因: @@ -12,11 +12,11 @@ 無論哪種狀況,您都可以透過**刷新原廠 Boot**還原;因此,在安裝教學最開始,我們已經強烈建議大家,在刷新之前備份自己的原廠 Boot!如果您沒有備份,那麼您可以透過其他與您相同裝置的使用者或官方韌體擷取 Boot。 -## 刷新模組變磚 +## 刷新模組變磚 {#brick-by-modules} 刷新模組變磚可能是大家遇到的更常見的狀況,但是這裡要嚴正警示大家:**不要刷新未知來源的模組!!**。因為模組擁有 Root 權限,它能完全對您的裝置造成無法復原的損壞! -### 一般模組 +### 一般模組 {#normal-modules} 如果大家刷新了某些開放原始碼的或者被證明是安全的模組使手機無法開機,那麼這種狀況在 KernelSU 中非常容易還原,也無需擔心。KernelSU 內建了下列兩種機制以搶救您的裝置: @@ -42,7 +42,7 @@ KernelSU 的模組借鑒了 Android 系統 OTA 更新時的 AB 更新機制, 內建的安全模式在核心中實作,因此不會出現按鍵活動無法攔截的狀況。不過對於非 GKI 核心,可能需要手動整合程式碼,可以參閱官方文件指南。 -### 惡意模組 +### 惡意模組 {#malicious-modules} 如果以上方法無法搶救您的裝置,那麼很可能您安裝的模組存在惡意作業或透過其他方式損壞了您的裝置,在這種狀況下,只有兩個建議: