From 607c935a7088f0e8beebb74017f1b8c401e8ef05 Mon Sep 17 00:00:00 2001 From: Nicholas Andrew Date: Mon, 24 Aug 2026 21:13:08 -0400 Subject: [PATCH 01/10] milanf: integrate KernelSU v0.9.5 --- KernelSU/.gitattributes | 1 + KernelSU/.gitignore | 2 + KernelSU/LICENSE | 674 ++++++ KernelSU/SECURITY.md | 7 + KernelSU/docs/README.md | 57 + KernelSU/docs/README_CN.md | 57 + KernelSU/docs/README_ES.md | 56 + KernelSU/docs/README_ID.md | 53 + KernelSU/docs/README_IN.md | 53 + KernelSU/docs/README_IW.md | 53 + KernelSU/docs/README_JP.md | 53 + KernelSU/docs/README_KR.md | 57 + KernelSU/docs/README_PL.md | 55 + KernelSU/docs/README_PT-BR.md | 57 + KernelSU/docs/README_RU.md | 49 + KernelSU/docs/README_TR.md | 57 + KernelSU/docs/README_TW.md | 56 + KernelSU/docs/README_VI.md | 53 + KernelSU/js/README.md | 111 + KernelSU/js/index.d.ts | 45 + KernelSU/js/index.js | 115 + KernelSU/js/package.json | 26 + KernelSU/justfile | 14 + KernelSU/kernel/.clang-format | 548 +++++ KernelSU/kernel/Kconfig | 19 + KernelSU/kernel/LICENSE | 339 +++ KernelSU/kernel/Makefile | 69 + KernelSU/kernel/allowlist.c | 529 +++++ KernelSU/kernel/allowlist.h | 27 + KernelSU/kernel/apk_sign.c | 320 +++ KernelSU/kernel/apk_sign.h | 8 + KernelSU/kernel/arch.h | 92 + KernelSU/kernel/core_hook.c | 856 ++++++++ KernelSU/kernel/core_hook.h | 9 + KernelSU/kernel/embed_ksud.c | 5 + KernelSU/kernel/export_symbol.txt | 2 + KernelSU/kernel/include/ksu_hook.h | 28 + KernelSU/kernel/kernel_compat.c | 176 ++ KernelSU/kernel/kernel_compat.h | 39 + KernelSU/kernel/klog.h | 11 + KernelSU/kernel/ksu.c | 100 + KernelSU/kernel/ksu.h | 99 + KernelSU/kernel/ksud.c | 666 ++++++ KernelSU/kernel/ksud.h | 14 + KernelSU/kernel/manager.h | 36 + KernelSU/kernel/selinux/Makefile | 16 + KernelSU/kernel/selinux/rules.c | 476 +++++ KernelSU/kernel/selinux/selinux.c | 145 ++ KernelSU/kernel/selinux/selinux.h | 25 + KernelSU/kernel/selinux/sepolicy.c | 1070 ++++++++++ KernelSU/kernel/selinux/sepolicy.h | 46 + KernelSU/kernel/setup.sh | 75 + KernelSU/kernel/sucompat.c | 367 ++++ KernelSU/kernel/throne_tracker.c | 382 ++++ KernelSU/kernel/throne_tracker.h | 10 + KernelSU/manager/.gitignore | 9 + KernelSU/manager/app/.gitignore | 2 + KernelSU/manager/app/build.gradle.kts | 116 + KernelSU/manager/app/proguard-rules.pro | 9 + .../manager/app/src/main/AndroidManifest.xml | 51 + .../me/weishu/kernelsu/IKsuInterface.aidl | 9 + .../manager/app/src/main/cpp/CMakeLists.txt | 18 + KernelSU/manager/app/src/main/cpp/jni.cc | 298 +++ KernelSU/manager/app/src/main/cpp/ksu.cc | 86 + KernelSU/manager/app/src/main/cpp/ksu.h | 82 + .../me/weishu/kernelsu/KernelSUApplication.kt | 36 + .../main/java/me/weishu/kernelsu/Kernels.kt | 44 + .../main/java/me/weishu/kernelsu/Natives.kt | 117 ++ .../weishu/kernelsu/profile/Capabilities.kt | 49 + .../java/me/weishu/kernelsu/profile/Groups.kt | 130 ++ .../me/weishu/kernelsu/ui/KsuService.java | 77 + .../me/weishu/kernelsu/ui/MainActivity.kt | 97 + .../weishu/kernelsu/ui/component/AboutCard.kt | 123 ++ .../me/weishu/kernelsu/ui/component/Dialog.kt | 450 ++++ .../kernelsu/ui/component/KeyEventBlocker.kt | 28 + .../weishu/kernelsu/ui/component/SearchBar.kt | 149 ++ .../kernelsu/ui/component/SettingsItem.kt | 57 + .../ui/component/profile/AppProfileConfig.kt | 63 + .../ui/component/profile/RootProfileConfig.kt | 471 +++++ .../ui/component/profile/TemplateConfig.kt | 116 + .../weishu/kernelsu/ui/screen/AppProfile.kt | 362 ++++ .../ui/screen/BottomBarDestination.kt | 24 + .../me/weishu/kernelsu/ui/screen/Flash.kt | 238 +++ .../java/me/weishu/kernelsu/ui/screen/Home.kt | 442 ++++ .../me/weishu/kernelsu/ui/screen/Install.kt | 311 +++ .../me/weishu/kernelsu/ui/screen/Module.kt | 576 +++++ .../me/weishu/kernelsu/ui/screen/Settings.kt | 474 +++++ .../me/weishu/kernelsu/ui/screen/SuperUser.kt | 185 ++ .../me/weishu/kernelsu/ui/screen/Template.kt | 259 +++ .../kernelsu/ui/screen/TemplateEditor.kt | 322 +++ .../java/me/weishu/kernelsu/ui/theme/Color.kt | 10 + .../java/me/weishu/kernelsu/ui/theme/Theme.kt | 64 + .../java/me/weishu/kernelsu/ui/theme/Type.kt | 33 + .../kernelsu/ui/util/CompositionProvider.kt | 8 + .../me/weishu/kernelsu/ui/util/Downloader.kt | 149 ++ .../kernelsu/ui/util/HanziToPinyin.java | 576 +++++ .../weishu/kernelsu/ui/util/HyperlinkText.kt | 87 + .../java/me/weishu/kernelsu/ui/util/KsuCli.kt | 428 ++++ .../me/weishu/kernelsu/ui/util/LogEvent.kt | 115 + .../weishu/kernelsu/ui/util/SELinuxChecker.kt | 34 + .../ui/util/module/LatestVersionInfo.kt | 7 + .../kernelsu/ui/viewmodel/ModuleViewModel.kt | 161 ++ .../ui/viewmodel/SuperUserViewModel.kt | 160 ++ .../ui/viewmodel/TemplateViewModel.kt | 328 +++ .../me/weishu/kernelsu/ui/webui/MimeUtil.java | 88 + .../kernelsu/ui/webui/SuFilePathHandler.java | 191 ++ .../weishu/kernelsu/ui/webui/WebUIActivity.kt | 68 + .../kernelsu/ui/webui/WebViewInterface.kt | 190 ++ .../manager/app/src/main/jniLibs/.gitignore | 1 + .../res/drawable/ic_launcher_background.xml | 15 + .../res/drawable/ic_launcher_foreground.xml | 22 + .../res/drawable/ic_launcher_monochrome.xml | 22 + .../main/res/mipmap-anydpi/ic_launcher.xml | 6 + .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 0 -> 235 bytes .../src/main/res/mipmap-ldpi/ic_launcher.png | Bin 0 -> 313 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 0 -> 380 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 0 -> 284 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 304 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 0 -> 342 bytes .../app/src/main/res/values-ar/strings.xml | 134 ++ .../app/src/main/res/values-az/strings.xml | 82 + .../src/main/res/values-bn-rBD/strings.xml | 52 + .../app/src/main/res/values-bn/strings.xml | 68 + .../app/src/main/res/values-bs/strings.xml | 83 + .../app/src/main/res/values-da/strings.xml | 83 + .../app/src/main/res/values-de/strings.xml | 121 ++ .../app/src/main/res/values-es/strings.xml | 107 + .../app/src/main/res/values-et/strings.xml | 112 + .../app/src/main/res/values-fa/strings.xml | 67 + .../app/src/main/res/values-fil/strings.xml | 70 + .../app/src/main/res/values-fr/strings.xml | 135 ++ .../app/src/main/res/values-hi/strings.xml | 84 + .../app/src/main/res/values-hr/strings.xml | 83 + .../app/src/main/res/values-hu/strings.xml | 106 + .../app/src/main/res/values-in/strings.xml | 135 ++ .../app/src/main/res/values-it/strings.xml | 134 ++ .../app/src/main/res/values-iw/strings.xml | 84 + .../app/src/main/res/values-ja/strings.xml | 135 ++ .../app/src/main/res/values-kn/strings.xml | 70 + .../app/src/main/res/values-ko/strings.xml | 82 + .../app/src/main/res/values-lt/strings.xml | 84 + .../app/src/main/res/values-lv/strings.xml | 134 ++ .../app/src/main/res/values-mr/strings.xml | 82 + .../app/src/main/res/values-ms/strings.xml | 38 + .../src/main/res/values-night-v27/themes.xml | 7 + .../app/src/main/res/values-night/themes.xml | 10 + .../app/src/main/res/values-nl/strings.xml | 129 ++ .../app/src/main/res/values-pl/strings.xml | 136 ++ .../src/main/res/values-pt-rBR/strings.xml | 135 ++ .../app/src/main/res/values-pt/strings.xml | 83 + .../app/src/main/res/values-ro/strings.xml | 132 ++ .../app/src/main/res/values-ru/strings.xml | 138 ++ .../app/src/main/res/values-sl/strings.xml | 106 + .../app/src/main/res/values-sr/strings.xml | 11 + .../app/src/main/res/values-te/strings.xml | 21 + .../app/src/main/res/values-th/strings.xml | 134 ++ .../app/src/main/res/values-tr/strings.xml | 136 ++ .../app/src/main/res/values-uk/strings.xml | 135 ++ .../app/src/main/res/values-v27/themes.xml | 7 + .../app/src/main/res/values-vi/strings.xml | 135 ++ .../src/main/res/values-zh-rCN/strings.xml | 132 ++ .../src/main/res/values-zh-rHK/strings.xml | 124 ++ .../src/main/res/values-zh-rTW/strings.xml | 134 ++ .../app/src/main/res/values/strings.xml | 134 ++ .../app/src/main/res/values/themes.xml | 10 + .../app/src/main/res/xml/backup_rules.xml | 13 + .../main/res/xml/data_extraction_rules.xml | 19 + .../app/src/main/res/xml/filepaths.xml | 6 + .../main/res/xml/network_security_config.xml | 8 + KernelSU/manager/build.gradle.kts | 101 + KernelSU/manager/gradle.properties | 3 + KernelSU/manager/gradle/libs.versions.toml | 78 + .../manager/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 43453 bytes .../gradle/wrapper/gradle-wrapper.properties | 7 + KernelSU/manager/gradlew | 248 +++ KernelSU/manager/gradlew.bat | 92 + KernelSU/manager/settings.gradle.kts | 21 + KernelSU/manager/sign.example.properties | 4 + KernelSU/scripts/abi_gki_all.py | 10 + KernelSU/scripts/add_device_handler.py | 50 + KernelSU/scripts/allowlist.bt | 89 + KernelSU/scripts/bin2c.py | 51 + KernelSU/scripts/ksubot.py | 101 + KernelSU/userspace/ksud/.gitignore | 2 + KernelSU/userspace/ksud/Cargo.lock | 1860 +++++++++++++++++ KernelSU/userspace/ksud/Cargo.toml | 63 + KernelSU/userspace/ksud/bin/.gitignore | 1 + KernelSU/userspace/ksud/bin/aarch64/bootctl | Bin 0 -> 154248 bytes KernelSU/userspace/ksud/bin/aarch64/busybox | Bin 0 -> 2149248 bytes KernelSU/userspace/ksud/bin/aarch64/ksuinit | Bin 0 -> 466288 bytes KernelSU/userspace/ksud/bin/aarch64/resetprop | Bin 0 -> 76536 bytes KernelSU/userspace/ksud/bin/x86_64/busybox | Bin 0 -> 2259176 bytes KernelSU/userspace/ksud/bin/x86_64/ksuinit | Bin 0 -> 518312 bytes KernelSU/userspace/ksud/bin/x86_64/resetprop | Bin 0 -> 77160 bytes KernelSU/userspace/ksud/build.rs | 56 + KernelSU/userspace/ksud/src/apk_sign.rs | 115 + KernelSU/userspace/ksud/src/assets.rs | 50 + KernelSU/userspace/ksud/src/banner | 5 + KernelSU/userspace/ksud/src/boot_patch.rs | 632 ++++++ KernelSU/userspace/ksud/src/cli.rs | 392 ++++ KernelSU/userspace/ksud/src/debug.rs | 52 + KernelSU/userspace/ksud/src/defs.rs | 45 + KernelSU/userspace/ksud/src/init_event.rs | 305 +++ KernelSU/userspace/ksud/src/installer.sh | 446 ++++ KernelSU/userspace/ksud/src/ksucalls.rs | 43 + KernelSU/userspace/ksud/src/main.rs | 19 + KernelSU/userspace/ksud/src/module.rs | 709 +++++++ KernelSU/userspace/ksud/src/mount.rs | 327 +++ KernelSU/userspace/ksud/src/profile.rs | 79 + KernelSU/userspace/ksud/src/restorecon.rs | 81 + KernelSU/userspace/ksud/src/sepolicy.rs | 738 +++++++ KernelSU/userspace/ksud/src/su.rs | 301 +++ KernelSU/userspace/ksud/src/utils.rs | 454 ++++ KernelSU/userspace/su/.gitignore | 2 + KernelSU/userspace/su/jni/Android.mk | 6 + KernelSU/userspace/su/jni/Application.mk | 3 + KernelSU/userspace/su/jni/su.c | 11 + KernelSU/website/.gitignore | 150 ++ KernelSU/website/docs/guide/app-profile.md | 118 ++ .../docs/guide/difference-with-magisk.md | 28 + KernelSU/website/docs/guide/faq.md | 78 + .../website/docs/guide/hidden-features.md | 7 + KernelSU/website/docs/guide/how-to-build.md | 71 + .../guide/how-to-integrate-for-non-gki.md | 387 ++++ KernelSU/website/docs/guide/installation.md | 280 +++ KernelSU/website/docs/guide/module-webui.md | 48 + KernelSU/website/docs/guide/module.md | 327 +++ .../docs/guide/rescue-from-bootloop.md | 50 + .../guide/unofficially-support-devices.md | 30 + .../website/docs/guide/what-is-kernelsu.md | 21 + .../id_ID/guide/difference-with-magisk.md | 26 + KernelSU/website/docs/id_ID/guide/faq.md | 48 + .../website/docs/id_ID/guide/how-to-build.md | 63 + .../guide/how-to-integrate-for-non-gki.md | 259 +++ .../website/docs/id_ID/guide/installation.md | 32 + KernelSU/website/docs/id_ID/guide/module.md | 255 +++ .../docs/id_ID/guide/rescue-from-bootloop.md | 50 + .../guide/unofficially-support-devices.md | 34 + .../docs/id_ID/guide/what-is-kernelsu.md | 21 + KernelSU/website/docs/id_ID/index.md | 28 + KernelSU/website/docs/index.md | 28 + .../ja_JP/guide/difference-with-magisk.md | 26 + KernelSU/website/docs/ja_JP/guide/faq.md | 67 + .../docs/ja_JP/guide/hidden-features.md | 7 + .../website/docs/ja_JP/guide/how-to-build.md | 58 + .../guide/how-to-integrate-for-non-gki.md | 303 +++ .../website/docs/ja_JP/guide/installation.md | 169 ++ .../website/docs/ja_JP/guide/module-webui.md | 48 + KernelSU/website/docs/ja_JP/guide/module.md | 255 +++ .../docs/ja_JP/guide/rescue-from-bootloop.md | 50 + .../guide/unofficially-support-devices.md | 30 + .../docs/ja_JP/guide/what-is-kernelsu.md | 21 + KernelSU/website/docs/ja_JP/index.md | 29 + .../website/docs/pt_BR/guide/app-profile.md | 118 ++ .../pt_BR/guide/difference-with-magisk.md | 28 + KernelSU/website/docs/pt_BR/guide/faq.md | 78 + .../docs/pt_BR/guide/hidden-features.md | 7 + .../website/docs/pt_BR/guide/how-to-build.md | 71 + .../guide/how-to-integrate-for-non-gki.md | 387 ++++ .../website/docs/pt_BR/guide/installation.md | 278 +++ .../website/docs/pt_BR/guide/module-webui.md | 48 + KernelSU/website/docs/pt_BR/guide/module.md | 324 +++ .../docs/pt_BR/guide/rescue-from-bootloop.md | 50 + .../guide/unofficially-support-devices.md | 30 + .../docs/pt_BR/guide/what-is-kernelsu.md | 21 + KernelSU/website/docs/pt_BR/index.md | 28 + KernelSU/website/docs/public/favicon.ico | Bin 0 -> 4286 bytes KernelSU/website/docs/public/logo.png | Bin 0 -> 342 bytes .../website/docs/public/templates/adaway.root | 40 + KernelSU/website/docs/public/templates/adb | 41 + .../docs/public/templates/cemiuiler.readproc | 47 + .../docs/public/templates/incompetent.root | 41 + .../docs/public/templates/kernelmanager.root | 53 + .../docs/public/templates/nethunter.root | 39 + .../docs/public/templates/rootexploler.root | 48 + .../docs/public/templates/shizuku.root | 42 + KernelSU/website/docs/public/templates/system | 41 + KernelSU/website/docs/repos.json | 716 +++++++ .../website/docs/ru_RU/guide/app-profile.md | 118 ++ .../ru_RU/guide/difference-with-magisk.md | 26 + KernelSU/website/docs/ru_RU/guide/faq.md | 67 + .../docs/ru_RU/guide/hidden-features.md | 7 + .../website/docs/ru_RU/guide/how-to-build.md | 65 + .../guide/how-to-integrate-for-non-gki.md | 264 +++ .../website/docs/ru_RU/guide/installation.md | 169 ++ KernelSU/website/docs/ru_RU/guide/module.md | 255 +++ .../docs/ru_RU/guide/rescue-from-bootloop.md | 50 + .../guide/unofficially-support-devices.md | 30 + .../docs/ru_RU/guide/what-is-kernelsu.md | 21 + KernelSU/website/docs/ru_RU/index.md | 29 + .../website/docs/vi_VN/guide/app-profile.md | 118 ++ .../vi_VN/guide/difference-with-magisk.md | 28 + KernelSU/website/docs/vi_VN/guide/faq.md | 67 + .../docs/vi_VN/guide/hidden-features.md | 7 + .../website/docs/vi_VN/guide/how-to-build.md | 65 + .../guide/how-to-integrate-for-non-gki.md | 176 ++ .../website/docs/vi_VN/guide/installation.md | 171 ++ KernelSU/website/docs/vi_VN/guide/module.md | 257 +++ .../docs/vi_VN/guide/rescue-from-bootloop.md | 50 + .../guide/unofficially-support-devices.md | 32 + .../docs/vi_VN/guide/what-is-kernelsu.md | 21 + KernelSU/website/docs/vi_VN/index.md | 29 + .../website/docs/zh_CN/guide/app-profile.md | 118 ++ .../zh_CN/guide/difference-with-magisk.md | 28 + KernelSU/website/docs/zh_CN/guide/faq.md | 74 + .../docs/zh_CN/guide/hidden-features.md | 7 + .../website/docs/zh_CN/guide/how-to-build.md | 63 + .../guide/how-to-integrate-for-non-gki.md | 377 ++++ .../website/docs/zh_CN/guide/installation.md | 279 +++ .../website/docs/zh_CN/guide/module-webui.md | 48 + KernelSU/website/docs/zh_CN/guide/module.md | 333 +++ .../docs/zh_CN/guide/rescue-from-bootloop.md | 50 + .../guide/unofficially-support-devices.md | 30 + .../docs/zh_CN/guide/what-is-kernelsu.md | 21 + KernelSU/website/docs/zh_CN/index.md | 29 + .../website/docs/zh_TW/guide/app-profile.md | 118 ++ .../zh_TW/guide/difference-with-magisk.md | 28 + KernelSU/website/docs/zh_TW/guide/faq.md | 80 + .../docs/zh_TW/guide/hidden-features.md | 7 + .../website/docs/zh_TW/guide/how-to-build.md | 73 + .../guide/how-to-integrate-for-non-gki.md | 319 +++ .../website/docs/zh_TW/guide/installation.md | 254 +++ .../website/docs/zh_TW/guide/module-webui.md | 49 + KernelSU/website/docs/zh_TW/guide/module.md | 266 +++ .../docs/zh_TW/guide/rescue-from-bootloop.md | 50 + .../guide/unofficially-support-devices.md | 30 + .../docs/zh_TW/guide/what-is-kernelsu.md | 21 + KernelSU/website/docs/zh_TW/index.md | 29 + KernelSU/website/package.json | 19 + KernelSU/website/yarn.lock | 793 +++++++ .../vendor/ext_config/moto-holi-milanf.config | 4 + drivers/Kconfig | 1 + drivers/Makefile | 2 + drivers/kernelsu | 1 + 334 files changed, 40861 insertions(+) create mode 100644 KernelSU/.gitattributes create mode 100644 KernelSU/.gitignore create mode 100644 KernelSU/LICENSE create mode 100644 KernelSU/SECURITY.md create mode 100644 KernelSU/docs/README.md create mode 100644 KernelSU/docs/README_CN.md create mode 100644 KernelSU/docs/README_ES.md create mode 100644 KernelSU/docs/README_ID.md create mode 100644 KernelSU/docs/README_IN.md create mode 100644 KernelSU/docs/README_IW.md create mode 100644 KernelSU/docs/README_JP.md create mode 100644 KernelSU/docs/README_KR.md create mode 100644 KernelSU/docs/README_PL.md create mode 100644 KernelSU/docs/README_PT-BR.md create mode 100644 KernelSU/docs/README_RU.md create mode 100644 KernelSU/docs/README_TR.md create mode 100644 KernelSU/docs/README_TW.md create mode 100644 KernelSU/docs/README_VI.md create mode 100644 KernelSU/js/README.md create mode 100644 KernelSU/js/index.d.ts create mode 100644 KernelSU/js/index.js create mode 100644 KernelSU/js/package.json create mode 100644 KernelSU/justfile create mode 100644 KernelSU/kernel/.clang-format create mode 100644 KernelSU/kernel/Kconfig create mode 100644 KernelSU/kernel/LICENSE create mode 100644 KernelSU/kernel/Makefile create mode 100644 KernelSU/kernel/allowlist.c create mode 100644 KernelSU/kernel/allowlist.h create mode 100644 KernelSU/kernel/apk_sign.c create mode 100644 KernelSU/kernel/apk_sign.h create mode 100644 KernelSU/kernel/arch.h create mode 100644 KernelSU/kernel/core_hook.c create mode 100644 KernelSU/kernel/core_hook.h create mode 100644 KernelSU/kernel/embed_ksud.c create mode 100644 KernelSU/kernel/export_symbol.txt create mode 100644 KernelSU/kernel/include/ksu_hook.h create mode 100644 KernelSU/kernel/kernel_compat.c create mode 100644 KernelSU/kernel/kernel_compat.h create mode 100644 KernelSU/kernel/klog.h create mode 100644 KernelSU/kernel/ksu.c create mode 100644 KernelSU/kernel/ksu.h create mode 100644 KernelSU/kernel/ksud.c create mode 100644 KernelSU/kernel/ksud.h create mode 100644 KernelSU/kernel/manager.h create mode 100644 KernelSU/kernel/selinux/Makefile create mode 100644 KernelSU/kernel/selinux/rules.c create mode 100644 KernelSU/kernel/selinux/selinux.c create mode 100644 KernelSU/kernel/selinux/selinux.h create mode 100644 KernelSU/kernel/selinux/sepolicy.c create mode 100644 KernelSU/kernel/selinux/sepolicy.h create mode 100755 KernelSU/kernel/setup.sh create mode 100644 KernelSU/kernel/sucompat.c create mode 100644 KernelSU/kernel/throne_tracker.c create mode 100644 KernelSU/kernel/throne_tracker.h create mode 100644 KernelSU/manager/.gitignore create mode 100644 KernelSU/manager/app/.gitignore create mode 100644 KernelSU/manager/app/build.gradle.kts create mode 100644 KernelSU/manager/app/proguard-rules.pro create mode 100644 KernelSU/manager/app/src/main/AndroidManifest.xml create mode 100644 KernelSU/manager/app/src/main/aidl/me/weishu/kernelsu/IKsuInterface.aidl create mode 100644 KernelSU/manager/app/src/main/cpp/CMakeLists.txt create mode 100644 KernelSU/manager/app/src/main/cpp/jni.cc create mode 100644 KernelSU/manager/app/src/main/cpp/ksu.cc create mode 100644 KernelSU/manager/app/src/main/cpp/ksu.h create mode 100644 KernelSU/manager/app/src/main/java/me/weishu/kernelsu/KernelSUApplication.kt create mode 100644 KernelSU/manager/app/src/main/java/me/weishu/kernelsu/Kernels.kt create mode 100644 KernelSU/manager/app/src/main/java/me/weishu/kernelsu/Natives.kt create mode 100644 KernelSU/manager/app/src/main/java/me/weishu/kernelsu/profile/Capabilities.kt create mode 100644 KernelSU/manager/app/src/main/java/me/weishu/kernelsu/profile/Groups.kt create mode 100644 KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/KsuService.java create mode 100644 KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/MainActivity.kt create mode 100644 KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/component/AboutCard.kt create mode 100644 KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/component/Dialog.kt create mode 100644 KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/component/KeyEventBlocker.kt create mode 100644 KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/component/SearchBar.kt create mode 100644 KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/component/SettingsItem.kt create mode 100644 KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/component/profile/AppProfileConfig.kt create mode 100644 KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/component/profile/RootProfileConfig.kt create mode 100644 KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/component/profile/TemplateConfig.kt create mode 100644 KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/AppProfile.kt create mode 100644 KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/BottomBarDestination.kt create mode 100644 KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Flash.kt create mode 100644 KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Home.kt create mode 100644 KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Install.kt create mode 100644 KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Module.kt create mode 100644 KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Settings.kt create mode 100644 KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/SuperUser.kt create mode 100644 KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Template.kt create mode 100644 KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/TemplateEditor.kt create mode 100644 KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/theme/Color.kt create mode 100644 KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/theme/Theme.kt create mode 100644 KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/theme/Type.kt create mode 100644 KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/util/CompositionProvider.kt create mode 100644 KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/util/Downloader.kt create mode 100644 KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/util/HanziToPinyin.java create mode 100644 KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/util/HyperlinkText.kt create mode 100644 KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/util/KsuCli.kt create mode 100644 KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/util/LogEvent.kt create mode 100644 KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/util/SELinuxChecker.kt create mode 100644 KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/util/module/LatestVersionInfo.kt create mode 100644 KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/viewmodel/ModuleViewModel.kt create mode 100644 KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/viewmodel/SuperUserViewModel.kt create mode 100644 KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/viewmodel/TemplateViewModel.kt create mode 100644 KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/webui/MimeUtil.java create mode 100644 KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/webui/SuFilePathHandler.java create mode 100644 KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/webui/WebUIActivity.kt create mode 100644 KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/webui/WebViewInterface.kt create mode 100644 KernelSU/manager/app/src/main/jniLibs/.gitignore create mode 100644 KernelSU/manager/app/src/main/res/drawable/ic_launcher_background.xml create mode 100644 KernelSU/manager/app/src/main/res/drawable/ic_launcher_foreground.xml create mode 100644 KernelSU/manager/app/src/main/res/drawable/ic_launcher_monochrome.xml create mode 100644 KernelSU/manager/app/src/main/res/mipmap-anydpi/ic_launcher.xml create mode 100644 KernelSU/manager/app/src/main/res/mipmap-hdpi/ic_launcher.png create mode 100644 KernelSU/manager/app/src/main/res/mipmap-ldpi/ic_launcher.png create mode 100644 KernelSU/manager/app/src/main/res/mipmap-mdpi/ic_launcher.png create mode 100644 KernelSU/manager/app/src/main/res/mipmap-xhdpi/ic_launcher.png create mode 100644 KernelSU/manager/app/src/main/res/mipmap-xxhdpi/ic_launcher.png create mode 100644 KernelSU/manager/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png create mode 100644 KernelSU/manager/app/src/main/res/values-ar/strings.xml create mode 100644 KernelSU/manager/app/src/main/res/values-az/strings.xml create mode 100644 KernelSU/manager/app/src/main/res/values-bn-rBD/strings.xml create mode 100644 KernelSU/manager/app/src/main/res/values-bn/strings.xml create mode 100644 KernelSU/manager/app/src/main/res/values-bs/strings.xml create mode 100644 KernelSU/manager/app/src/main/res/values-da/strings.xml create mode 100644 KernelSU/manager/app/src/main/res/values-de/strings.xml create mode 100644 KernelSU/manager/app/src/main/res/values-es/strings.xml create mode 100644 KernelSU/manager/app/src/main/res/values-et/strings.xml create mode 100644 KernelSU/manager/app/src/main/res/values-fa/strings.xml create mode 100644 KernelSU/manager/app/src/main/res/values-fil/strings.xml create mode 100644 KernelSU/manager/app/src/main/res/values-fr/strings.xml create mode 100644 KernelSU/manager/app/src/main/res/values-hi/strings.xml create mode 100644 KernelSU/manager/app/src/main/res/values-hr/strings.xml create mode 100644 KernelSU/manager/app/src/main/res/values-hu/strings.xml create mode 100644 KernelSU/manager/app/src/main/res/values-in/strings.xml create mode 100644 KernelSU/manager/app/src/main/res/values-it/strings.xml create mode 100644 KernelSU/manager/app/src/main/res/values-iw/strings.xml create mode 100644 KernelSU/manager/app/src/main/res/values-ja/strings.xml create mode 100644 KernelSU/manager/app/src/main/res/values-kn/strings.xml create mode 100644 KernelSU/manager/app/src/main/res/values-ko/strings.xml create mode 100644 KernelSU/manager/app/src/main/res/values-lt/strings.xml create mode 100644 KernelSU/manager/app/src/main/res/values-lv/strings.xml create mode 100644 KernelSU/manager/app/src/main/res/values-mr/strings.xml create mode 100644 KernelSU/manager/app/src/main/res/values-ms/strings.xml create mode 100644 KernelSU/manager/app/src/main/res/values-night-v27/themes.xml create mode 100644 KernelSU/manager/app/src/main/res/values-night/themes.xml create mode 100644 KernelSU/manager/app/src/main/res/values-nl/strings.xml create mode 100644 KernelSU/manager/app/src/main/res/values-pl/strings.xml create mode 100644 KernelSU/manager/app/src/main/res/values-pt-rBR/strings.xml create mode 100644 KernelSU/manager/app/src/main/res/values-pt/strings.xml create mode 100644 KernelSU/manager/app/src/main/res/values-ro/strings.xml create mode 100644 KernelSU/manager/app/src/main/res/values-ru/strings.xml create mode 100644 KernelSU/manager/app/src/main/res/values-sl/strings.xml create mode 100644 KernelSU/manager/app/src/main/res/values-sr/strings.xml create mode 100644 KernelSU/manager/app/src/main/res/values-te/strings.xml create mode 100644 KernelSU/manager/app/src/main/res/values-th/strings.xml create mode 100644 KernelSU/manager/app/src/main/res/values-tr/strings.xml create mode 100644 KernelSU/manager/app/src/main/res/values-uk/strings.xml create mode 100644 KernelSU/manager/app/src/main/res/values-v27/themes.xml create mode 100644 KernelSU/manager/app/src/main/res/values-vi/strings.xml create mode 100644 KernelSU/manager/app/src/main/res/values-zh-rCN/strings.xml create mode 100644 KernelSU/manager/app/src/main/res/values-zh-rHK/strings.xml create mode 100644 KernelSU/manager/app/src/main/res/values-zh-rTW/strings.xml create mode 100644 KernelSU/manager/app/src/main/res/values/strings.xml create mode 100644 KernelSU/manager/app/src/main/res/values/themes.xml create mode 100644 KernelSU/manager/app/src/main/res/xml/backup_rules.xml create mode 100644 KernelSU/manager/app/src/main/res/xml/data_extraction_rules.xml create mode 100644 KernelSU/manager/app/src/main/res/xml/filepaths.xml create mode 100644 KernelSU/manager/app/src/main/res/xml/network_security_config.xml create mode 100644 KernelSU/manager/build.gradle.kts create mode 100644 KernelSU/manager/gradle.properties create mode 100644 KernelSU/manager/gradle/libs.versions.toml create mode 100644 KernelSU/manager/gradle/wrapper/gradle-wrapper.jar create mode 100644 KernelSU/manager/gradle/wrapper/gradle-wrapper.properties create mode 100755 KernelSU/manager/gradlew create mode 100644 KernelSU/manager/gradlew.bat create mode 100644 KernelSU/manager/settings.gradle.kts create mode 100644 KernelSU/manager/sign.example.properties create mode 100644 KernelSU/scripts/abi_gki_all.py create mode 100644 KernelSU/scripts/add_device_handler.py create mode 100644 KernelSU/scripts/allowlist.bt create mode 100644 KernelSU/scripts/bin2c.py create mode 100644 KernelSU/scripts/ksubot.py create mode 100644 KernelSU/userspace/ksud/.gitignore create mode 100644 KernelSU/userspace/ksud/Cargo.lock create mode 100644 KernelSU/userspace/ksud/Cargo.toml create mode 100644 KernelSU/userspace/ksud/bin/.gitignore create mode 100644 KernelSU/userspace/ksud/bin/aarch64/bootctl create mode 100755 KernelSU/userspace/ksud/bin/aarch64/busybox create mode 100755 KernelSU/userspace/ksud/bin/aarch64/ksuinit create mode 100644 KernelSU/userspace/ksud/bin/aarch64/resetprop create mode 100755 KernelSU/userspace/ksud/bin/x86_64/busybox create mode 100755 KernelSU/userspace/ksud/bin/x86_64/ksuinit create mode 100644 KernelSU/userspace/ksud/bin/x86_64/resetprop create mode 100644 KernelSU/userspace/ksud/build.rs create mode 100644 KernelSU/userspace/ksud/src/apk_sign.rs create mode 100644 KernelSU/userspace/ksud/src/assets.rs create mode 100644 KernelSU/userspace/ksud/src/banner create mode 100644 KernelSU/userspace/ksud/src/boot_patch.rs create mode 100644 KernelSU/userspace/ksud/src/cli.rs create mode 100644 KernelSU/userspace/ksud/src/debug.rs create mode 100644 KernelSU/userspace/ksud/src/defs.rs create mode 100644 KernelSU/userspace/ksud/src/init_event.rs create mode 100644 KernelSU/userspace/ksud/src/installer.sh create mode 100644 KernelSU/userspace/ksud/src/ksucalls.rs create mode 100644 KernelSU/userspace/ksud/src/main.rs create mode 100644 KernelSU/userspace/ksud/src/module.rs create mode 100644 KernelSU/userspace/ksud/src/mount.rs create mode 100644 KernelSU/userspace/ksud/src/profile.rs create mode 100644 KernelSU/userspace/ksud/src/restorecon.rs create mode 100644 KernelSU/userspace/ksud/src/sepolicy.rs create mode 100644 KernelSU/userspace/ksud/src/su.rs create mode 100644 KernelSU/userspace/ksud/src/utils.rs create mode 100644 KernelSU/userspace/su/.gitignore create mode 100644 KernelSU/userspace/su/jni/Android.mk create mode 100644 KernelSU/userspace/su/jni/Application.mk create mode 100644 KernelSU/userspace/su/jni/su.c create mode 100644 KernelSU/website/.gitignore create mode 100644 KernelSU/website/docs/guide/app-profile.md create mode 100644 KernelSU/website/docs/guide/difference-with-magisk.md create mode 100644 KernelSU/website/docs/guide/faq.md create mode 100644 KernelSU/website/docs/guide/hidden-features.md create mode 100644 KernelSU/website/docs/guide/how-to-build.md create mode 100644 KernelSU/website/docs/guide/how-to-integrate-for-non-gki.md create mode 100644 KernelSU/website/docs/guide/installation.md create mode 100644 KernelSU/website/docs/guide/module-webui.md create mode 100644 KernelSU/website/docs/guide/module.md create mode 100644 KernelSU/website/docs/guide/rescue-from-bootloop.md create mode 100644 KernelSU/website/docs/guide/unofficially-support-devices.md create mode 100644 KernelSU/website/docs/guide/what-is-kernelsu.md create mode 100644 KernelSU/website/docs/id_ID/guide/difference-with-magisk.md create mode 100644 KernelSU/website/docs/id_ID/guide/faq.md create mode 100644 KernelSU/website/docs/id_ID/guide/how-to-build.md create mode 100644 KernelSU/website/docs/id_ID/guide/how-to-integrate-for-non-gki.md create mode 100644 KernelSU/website/docs/id_ID/guide/installation.md create mode 100644 KernelSU/website/docs/id_ID/guide/module.md create mode 100644 KernelSU/website/docs/id_ID/guide/rescue-from-bootloop.md create mode 100644 KernelSU/website/docs/id_ID/guide/unofficially-support-devices.md create mode 100644 KernelSU/website/docs/id_ID/guide/what-is-kernelsu.md create mode 100644 KernelSU/website/docs/id_ID/index.md create mode 100644 KernelSU/website/docs/index.md create mode 100644 KernelSU/website/docs/ja_JP/guide/difference-with-magisk.md create mode 100644 KernelSU/website/docs/ja_JP/guide/faq.md create mode 100644 KernelSU/website/docs/ja_JP/guide/hidden-features.md create mode 100644 KernelSU/website/docs/ja_JP/guide/how-to-build.md create mode 100644 KernelSU/website/docs/ja_JP/guide/how-to-integrate-for-non-gki.md create mode 100644 KernelSU/website/docs/ja_JP/guide/installation.md create mode 100644 KernelSU/website/docs/ja_JP/guide/module-webui.md create mode 100644 KernelSU/website/docs/ja_JP/guide/module.md create mode 100644 KernelSU/website/docs/ja_JP/guide/rescue-from-bootloop.md create mode 100644 KernelSU/website/docs/ja_JP/guide/unofficially-support-devices.md create mode 100644 KernelSU/website/docs/ja_JP/guide/what-is-kernelsu.md create mode 100644 KernelSU/website/docs/ja_JP/index.md create mode 100644 KernelSU/website/docs/pt_BR/guide/app-profile.md create mode 100644 KernelSU/website/docs/pt_BR/guide/difference-with-magisk.md create mode 100644 KernelSU/website/docs/pt_BR/guide/faq.md create mode 100644 KernelSU/website/docs/pt_BR/guide/hidden-features.md create mode 100644 KernelSU/website/docs/pt_BR/guide/how-to-build.md create mode 100644 KernelSU/website/docs/pt_BR/guide/how-to-integrate-for-non-gki.md create mode 100644 KernelSU/website/docs/pt_BR/guide/installation.md create mode 100644 KernelSU/website/docs/pt_BR/guide/module-webui.md create mode 100644 KernelSU/website/docs/pt_BR/guide/module.md create mode 100644 KernelSU/website/docs/pt_BR/guide/rescue-from-bootloop.md create mode 100644 KernelSU/website/docs/pt_BR/guide/unofficially-support-devices.md create mode 100644 KernelSU/website/docs/pt_BR/guide/what-is-kernelsu.md create mode 100644 KernelSU/website/docs/pt_BR/index.md create mode 100644 KernelSU/website/docs/public/favicon.ico create mode 100644 KernelSU/website/docs/public/logo.png create mode 100644 KernelSU/website/docs/public/templates/adaway.root create mode 100644 KernelSU/website/docs/public/templates/adb create mode 100644 KernelSU/website/docs/public/templates/cemiuiler.readproc create mode 100644 KernelSU/website/docs/public/templates/incompetent.root create mode 100644 KernelSU/website/docs/public/templates/kernelmanager.root create mode 100644 KernelSU/website/docs/public/templates/nethunter.root create mode 100644 KernelSU/website/docs/public/templates/rootexploler.root create mode 100644 KernelSU/website/docs/public/templates/shizuku.root create mode 100644 KernelSU/website/docs/public/templates/system create mode 100644 KernelSU/website/docs/repos.json create mode 100644 KernelSU/website/docs/ru_RU/guide/app-profile.md create mode 100644 KernelSU/website/docs/ru_RU/guide/difference-with-magisk.md create mode 100644 KernelSU/website/docs/ru_RU/guide/faq.md create mode 100644 KernelSU/website/docs/ru_RU/guide/hidden-features.md create mode 100644 KernelSU/website/docs/ru_RU/guide/how-to-build.md create mode 100644 KernelSU/website/docs/ru_RU/guide/how-to-integrate-for-non-gki.md create mode 100644 KernelSU/website/docs/ru_RU/guide/installation.md create mode 100644 KernelSU/website/docs/ru_RU/guide/module.md create mode 100644 KernelSU/website/docs/ru_RU/guide/rescue-from-bootloop.md create mode 100644 KernelSU/website/docs/ru_RU/guide/unofficially-support-devices.md create mode 100644 KernelSU/website/docs/ru_RU/guide/what-is-kernelsu.md create mode 100644 KernelSU/website/docs/ru_RU/index.md create mode 100644 KernelSU/website/docs/vi_VN/guide/app-profile.md create mode 100644 KernelSU/website/docs/vi_VN/guide/difference-with-magisk.md create mode 100644 KernelSU/website/docs/vi_VN/guide/faq.md create mode 100644 KernelSU/website/docs/vi_VN/guide/hidden-features.md create mode 100644 KernelSU/website/docs/vi_VN/guide/how-to-build.md create mode 100644 KernelSU/website/docs/vi_VN/guide/how-to-integrate-for-non-gki.md create mode 100644 KernelSU/website/docs/vi_VN/guide/installation.md create mode 100644 KernelSU/website/docs/vi_VN/guide/module.md create mode 100644 KernelSU/website/docs/vi_VN/guide/rescue-from-bootloop.md create mode 100644 KernelSU/website/docs/vi_VN/guide/unofficially-support-devices.md create mode 100644 KernelSU/website/docs/vi_VN/guide/what-is-kernelsu.md create mode 100644 KernelSU/website/docs/vi_VN/index.md create mode 100644 KernelSU/website/docs/zh_CN/guide/app-profile.md create mode 100644 KernelSU/website/docs/zh_CN/guide/difference-with-magisk.md create mode 100644 KernelSU/website/docs/zh_CN/guide/faq.md create mode 100644 KernelSU/website/docs/zh_CN/guide/hidden-features.md create mode 100644 KernelSU/website/docs/zh_CN/guide/how-to-build.md create mode 100644 KernelSU/website/docs/zh_CN/guide/how-to-integrate-for-non-gki.md create mode 100644 KernelSU/website/docs/zh_CN/guide/installation.md create mode 100644 KernelSU/website/docs/zh_CN/guide/module-webui.md create mode 100644 KernelSU/website/docs/zh_CN/guide/module.md create mode 100644 KernelSU/website/docs/zh_CN/guide/rescue-from-bootloop.md create mode 100644 KernelSU/website/docs/zh_CN/guide/unofficially-support-devices.md create mode 100644 KernelSU/website/docs/zh_CN/guide/what-is-kernelsu.md create mode 100644 KernelSU/website/docs/zh_CN/index.md create mode 100644 KernelSU/website/docs/zh_TW/guide/app-profile.md create mode 100644 KernelSU/website/docs/zh_TW/guide/difference-with-magisk.md create mode 100644 KernelSU/website/docs/zh_TW/guide/faq.md create mode 100644 KernelSU/website/docs/zh_TW/guide/hidden-features.md create mode 100644 KernelSU/website/docs/zh_TW/guide/how-to-build.md create mode 100644 KernelSU/website/docs/zh_TW/guide/how-to-integrate-for-non-gki.md create mode 100644 KernelSU/website/docs/zh_TW/guide/installation.md create mode 100644 KernelSU/website/docs/zh_TW/guide/module-webui.md create mode 100644 KernelSU/website/docs/zh_TW/guide/module.md create mode 100644 KernelSU/website/docs/zh_TW/guide/rescue-from-bootloop.md create mode 100644 KernelSU/website/docs/zh_TW/guide/unofficially-support-devices.md create mode 100644 KernelSU/website/docs/zh_TW/guide/what-is-kernelsu.md create mode 100644 KernelSU/website/docs/zh_TW/index.md create mode 100644 KernelSU/website/package.json create mode 100644 KernelSU/website/yarn.lock create mode 120000 drivers/kernelsu diff --git a/KernelSU/.gitattributes b/KernelSU/.gitattributes new file mode 100644 index 000000000000..95ff27aa3a42 --- /dev/null +++ b/KernelSU/.gitattributes @@ -0,0 +1 @@ +*.bat eol=crlf \ No newline at end of file diff --git a/KernelSU/.gitignore b/KernelSU/.gitignore new file mode 100644 index 000000000000..706fd07fada6 --- /dev/null +++ b/KernelSU/.gitignore @@ -0,0 +1,2 @@ +.idea +.vscode diff --git a/KernelSU/LICENSE b/KernelSU/LICENSE new file mode 100644 index 000000000000..f288702d2fa1 --- /dev/null +++ b/KernelSU/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/KernelSU/SECURITY.md b/KernelSU/SECURITY.md new file mode 100644 index 000000000000..83040d98981f --- /dev/null +++ b/KernelSU/SECURITY.md @@ -0,0 +1,7 @@ +# Reporting Security Issues + +The KernelSU team and community take security bugs in KernelSU seriously. We appreciate your efforts to responsibly disclose your findings, and will make every effort to acknowledge your contributions. + +To report a security issue, please use the GitHub Security Advisory ["Report a Vulnerability"](https://github.com/tiann/KernelSU/security/advisories/new) tab, or you can mailto [weishu](mailto:twsxtd@gmail.com) directly. + +The KernelSU team will send a response indicating the next steps in handling your report. After the initial reply to your report, the security team will keep you informed of the progress towards a fix and full announcement, and may ask for additional information or guidance. diff --git a/KernelSU/docs/README.md b/KernelSU/docs/README.md new file mode 100644 index 000000000000..0128cd3d221e --- /dev/null +++ b/KernelSU/docs/README.md @@ -0,0 +1,57 @@ +**English** | [Español](README_ES.md) | [简体中文](README_CN.md) | [繁體中文](README_TW.md) | [日本語](README_JP.md) | [한국어](README_KR.md) | [Polski](README_PL.md) | [Português (Brasil)](README_PT-BR.md) | [Türkçe](README_TR.md) | [Русский](README_RU.md) | [Tiếng Việt](README_VI.md) | [Indonesia](README_ID.md) | [עברית](README_IW.md) | [हिंदी](README_IN.md) + +# KernelSU + +logo + +A Kernel-based root solution for Android devices. + +[![Latest release](https://img.shields.io/github/v/release/tiann/KernelSU?label=Release&logo=github)](https://github.com/tiann/KernelSU/releases/latest) +[![Weblate](https://img.shields.io/badge/Localization-Weblate-teal?logo=weblate)](https://hosted.weblate.org/engage/kernelsu) +[![Channel](https://img.shields.io/badge/Follow-Telegram-blue.svg?logo=telegram)](https://t.me/KernelSU) +[![License: GPL v2](https://img.shields.io/badge/License-GPL%20v2-orange.svg?logo=gnu)](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html) +[![GitHub License](https://img.shields.io/github/license/tiann/KernelSU?logo=gnu)](/LICENSE) + +## Features + +1. Kernel-based `su` and root access management. +2. Module system based on [OverlayFS](https://en.wikipedia.org/wiki/OverlayFS). +3. [App Profile](https://kernelsu.org/guide/app-profile.html): Lock up the root power in a cage. + +## Compatibility State + +KernelSU officially supports Android GKI 2.0 devices (kernel 5.10+). Older kernels (4.14+) are also compatible, but the kernel will have to be built manually. + +With this, WSA, ChromeOS, and container-based Android are all supported. + +Currently, only `arm64-v8a` and `x86_64` are supported. + +## Usage + +- [Installation Instruction](https://kernelsu.org/guide/installation.html) +- [How to build?](https://kernelsu.org/guide/how-to-build.html) +- [Official Website](https://kernelsu.org/) + +## Translation + +To help translate KernelSU or improve existing translations, please use [Weblate](https://hosted.weblate.org/engage/kernelsu/). PR of Manager's translation is no longer accepted, because it will conflict with Weblate. + +## Discussion + +- Telegram: [@KernelSU](https://t.me/KernelSU) + +## Security + +For information on reporting security vulnerabilities in KernelSU, see [SECURITY.md](/SECURITY.md). + +## License + +- Files under the `kernel` directory are [GPL-2.0-only](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html). +- All other parts except the `kernel` directory are [GPL-3.0-or-later](https://www.gnu.org/licenses/gpl-3.0.html). + +## Credits + +- [kernel-assisted-superuser](https://git.zx2c4.com/kernel-assisted-superuser/about/): the KernelSU idea. +- [Magisk](https://github.com/topjohnwu/Magisk): the powerful root tool. +- [genuine](https://github.com/brevent/genuine/): apk v2 signature validation. +- [Diamorphine](https://github.com/m0nad/Diamorphine): some rootkit skills. diff --git a/KernelSU/docs/README_CN.md b/KernelSU/docs/README_CN.md new file mode 100644 index 000000000000..dc34b86ab139 --- /dev/null +++ b/KernelSU/docs/README_CN.md @@ -0,0 +1,57 @@ +[English](README.md) | [Español](README_ES.md) | **简体中文** | [繁體中文](README_TW.md) | [日本語](README_JP.md) | [한국어](README_KR.md) | [Polski](README_PL.md) | [Português (Brasil)](README_PT-BR.md) | [Türkçe](README_TR.md) | [Русский](README_RU.md) | [Tiếng Việt](README_VI.md) | [Indonesia](README_ID.md) | [עברית](README_IW.md) | [हिंदी](README_IN.md) + +# KernelSU + +logo + +一个 Android 上基于内核的 root 方案。 + +[![Latest release](https://img.shields.io/github/v/release/tiann/KernelSU?label=Release&logo=github)](https://github.com/tiann/KernelSU/releases/latest) +[![Weblate](https://img.shields.io/badge/Localization-Weblate-teal?logo=weblate)](https://hosted.weblate.org/engage/kernelsu) +[![Channel](https://img.shields.io/badge/Follow-Telegram-blue.svg?logo=telegram)](https://t.me/KernelSU) +[![License: GPL v2](https://img.shields.io/badge/License-GPL%20v2-orange.svg?logo=gnu)](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html) +[![GitHub License](https://img.shields.io/github/license/tiann/KernelSU?logo=gnu)](/LICENSE) + +## 特性 + +- 基于内核的 `su` 和权限管理。 +- 基于 [OverlayFS](https://en.wikipedia.org/wiki/OverlayFS) 的模块系统。 +- [App Profile](https://kernelsu.org/zh_CN/guide/app-profile.html): 把 Root 权限关进笼子里。 + +## 兼容状态 + +KernelSU 官方支持 GKI 2.0 的设备(内核版本5.10以上);旧内核也是兼容的(最低4.14+),不过需要自己编译内核。 + +WSA, ChromeOS 和运行在容器上的 Android 也可以与 KernelSU 一起工作。 + +目前支持架构 : `arm64-v8a` 和 `x86_64`。 + +## 使用方法 + +- [安装教程](https://kernelsu.org/zh_CN/guide/installation.html) +- [如何构建?](https://kernelsu.org/zh_CN/guide/how-to-build.html) +- [官方网站](https://kernelsu.org/zh_CN/) + +## 参与翻译 + +要将 KernelSU 翻译成您的语言,或完善现有的翻译,请使用 [Weblate](https://hosted.weblate.org/engage/kernelsu/)。现已不再接受有关管理器翻译的PR,因为这会与Weblate冲突。 + +## 讨论 + +- Telegram: [@KernelSU](https://t.me/KernelSU) + +## 安全性 + +有关报告 KernelSU 安全漏洞的信息,请参阅 [SECURITY.md](/SECURITY.md)。 + +## 许可证 + +- 目录 `kernel` 下所有文件为 [GPL-2.0-only](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html)。 +- 除 `kernel` 目录的其他部分均为 [GPL-3.0-or-later](https://www.gnu.org/licenses/gpl-3.0.html)。 + +## 鸣谢 + +- [kernel-assisted-superuser](https://git.zx2c4.com/kernel-assisted-superuser/about/):KernelSU 的灵感。 +- [Magisk](https://github.com/topjohnwu/Magisk):强大的 root 工具箱。 +- [genuine](https://github.com/brevent/genuine/):apk v2 签名验证。 +- [Diamorphine](https://github.com/m0nad/Diamorphine):一些 rootkit 技巧。 diff --git a/KernelSU/docs/README_ES.md b/KernelSU/docs/README_ES.md new file mode 100644 index 000000000000..ed4f699b791d --- /dev/null +++ b/KernelSU/docs/README_ES.md @@ -0,0 +1,56 @@ +[English](README.md) | **Español** | [简体中文](README_CN.md) | [繁體中文](README_TW.md) | [日本語](README_JP.md) | [한국어](README_KR.md) | [Polski](README_PL.md) | [Português (Brasil)](README_PT-BR.md) | [Türkçe](README_TR.md) | [Русский](README_RU.md) | [Tiếng Việt](README_VI.md) | [Indonesia](README_ID.md) | [עברית](README_IW.md) | [हिंदी](README_IN.md) + +# KernelSU + +logo + +Una solución root basada en el kernel para dispositivos Android. + +[![Latest release](https://img.shields.io/github/v/release/tiann/KernelSU?label=Release&logo=github)](https://github.com/tiann/KernelSU/releases/latest) +[![Weblate](https://img.shields.io/badge/Localización-Weblate-teal?logo=weblate)](https://hosted.weblate.org/engage/kernelsu) +[![Channel](https://img.shields.io/badge/Seguir-Telegram-blue.svg?logo=telegram)](https://t.me/KernelSU) +[![License: GPL v2](https://img.shields.io/badge/Licencia-GPL%20v2-orange.svg?logo=gnu)](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html) +[![GitHub License](https://img.shields.io/github/license/tiann/KernelSU?logo=gnu)](/LICENSE) + +## Características + +1. Binario `su` basado en el kernel y gestión de acceso root. +2. Sistema de módulos basado en [OverlayFS](https://en.wikipedia.org/wiki/OverlayFS). + +## Estado de compatibilidad + +**KernelSU** soporta de forma oficial dispositivos Android con **GKI 2.0** (a partir de la versión **5.10** del kernel). Los kernels antiguos (a partir de la versión **4.14**) también son compatibles, pero necesitas compilarlos por tu cuenta. + +Con esto, WSA, ChromeOS y Android basado en contenedores están todos compatibles. + +Actualmente, solo se admiten las arquitecturas `arm64-v8a` y `x86_64`. + +## Uso + +- [¿Cómo instalarlo?](https://kernelsu.org/guide/installation.html) +- [¿Cómo compilarlo?](https://kernelsu.org/guide/how-to-build.html) +- [Site oficial](https://kernelsu.org/) + +## Traducción + +Para ayudar a traducir KernelSU o mejorar las traducciones existentes, utilice [Weblate](https://hosted.weblate.org/engage/kernelsu/). Ya no se aceptan PR de la traducción de Manager porque entrará en conflicto con Weblate. + +## Discusión + +- Telegram: [@KernelSU](https://t.me/KernelSU) + +## Seguridad + +Para obtener información sobre cómo informar vulnerabilidades de seguridad en KernelSU, consulte [SECURITY.md](/SECURITY.md). + +## Licencia + +- Los archivos bajo el directorio `kernel` están licenciados bajo [GPL-2-only](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html). +- Todas las demás partes, a excepción del directorio `kernel`, están licenciados bajo [GPL-3-or-later](https://www.gnu.org/licenses/gpl-3.0.html). + +## Créditos + +- [kernel-assisted-superuser](https://git.zx2c4.com/kernel-assisted-superuser/about/): la idea de KernelSU. +- [Magisk](https://github.com/topjohnwu/Magisk): la poderosa herramienta root. +- [genuine](https://github.com/brevent/genuine/): validación de firma apk v2. +- [Diamorphine](https://github.com/m0nad/Diamorphine): algunas habilidades de rootkit. diff --git a/KernelSU/docs/README_ID.md b/KernelSU/docs/README_ID.md new file mode 100644 index 000000000000..511683a7503d --- /dev/null +++ b/KernelSU/docs/README_ID.md @@ -0,0 +1,53 @@ +[English](README.md) | [Español](README_ES.md) | [简体中文](README_CN.md) | [繁體中文](README_TW.md) | [日本語](README_JP.md) | [한국어](README_KR.md) | [Polski](README_PL.md) | [Português (Brasil)](README_PT-BR.md) | [Türkçe](README_TR.md) | [Русский](README_RU.md) | [Tiếng Việt](README_VI.md) | **Indonesia** | [עברית](README_IW.md) | [हिंदी](README_IN.md) + +# KernelSU + +logo + +Solusi root berbasis Kernel untuk perangkat Android. + +[![Latest release](https://img.shields.io/github/v/release/tiann/KernelSU?label=Release&logo=github)](https://github.com/tiann/KernelSU/releases/latest) +[![Weblate](https://img.shields.io/badge/Localization-Weblate-teal?logo=weblate)](https://hosted.weblate.org/engage/kernelsu) +[![Channel](https://img.shields.io/badge/Follow-Telegram-blue.svg?logo=telegram)](https://t.me/KernelSU) +[![License: GPL v2](https://img.shields.io/badge/License-GPL%20v2-orange.svg?logo=gnu)](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html) +[![GitHub License](https://img.shields.io/github/license/tiann/KernelSU?logo=gnu)](/LICENSE) + +## Fitur + +1. Manajemen akses root dan `su` berbasis kernel. +2. Sistem modul berdasarkan [OverlayFS](https://en.wikipedia.org/wiki/OverlayFS). +3. [Profil Aplikasi](https://kernelsu.org/guide/app-profile.html): Kunci daya root di dalam sangkar. + +## Status Kompatibilitas + +KernelSU secara resmi mendukung perangkat Android GKI 2.0 (dengan kernel 5.10+), kernel lama (4.14+) juga kompatibel, tetapi Anda perlu membuat kernel sendiri. + +WSA, ChromeOS, dan Android berbasis wadah juga dapat bekerja dengan KernelSU terintegrasi. + +Dan ABI yang didukung saat ini adalah: `arm64-v8a` dan `x86_64` + +## Penggunaan + +- [Petunjuk Instalasi](https://kernelsu.org/id_ID/guide/installation.html) +- [Bagaimana cara membuat?](https://kernelsu.org/id_ID/guide/how-to-build.html) +- [Situs Web Resmi](https://kernelsu.org/id_ID/) + +## Terjemahan + +Untuk menerjemahkan KernelSU ke dalam bahasa Anda atau menyempurnakan terjemahan yang sudah ada, harap gunakan [Weblat](https://hosted.weblate.org/engage/kernelsu/). + +## Diskusi + +- Telegram: [@KernelSU](https://t.me/KernelSU) + +## Lisensi + +- File di bawah direktori `kernel` adalah [GPL-2-only](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html). +- Semua bagian lain kecuali direktori `kernel` adalah [GPL-3.0-or-later](https://www.gnu.org/licenses/gpl-3.0.html). + +## Kredit + +- [kernel-assisted-superuser](https://git.zx2c4.com/kernel-assisted-superuser/about/): ide KernelSU. +- [Magisk](https://github.com/topjohnwu/Magisk): alat root yang ampuh. +- [genuine](https://github.com/brevent/genuine/): validasi tanda tangan apk v2. +- [Diamorphine](https://github.com/m0nad/Diamorphine): beberapa keterampilan rootkit. diff --git a/KernelSU/docs/README_IN.md b/KernelSU/docs/README_IN.md new file mode 100644 index 000000000000..7396ab5c2b10 --- /dev/null +++ b/KernelSU/docs/README_IN.md @@ -0,0 +1,53 @@ +[English](README.md) | [Español](README_ES.md) | [简体中文](README_CN.md) | [繁體中文](README_TW.md) | [日本語](README_JP.md) | [한국어](README_KR.md) | [Polski](README_PL.md) | [Português (Brasil)](README_PT-BR.md) | [Türkçe](README_TR.md) | [Русский](README_RU.md) | [Tiếng Việt](README_VI.md) | [Indonesia](README_ID.md) | [עברית](README_IW.md) | **हिंदी** + +# KernelSU + +logo + +Android उपकरणों के लिए कर्नेल-आधारित रूट समाधान। + +[![Latest release](https://img.shields.io/github/v/release/tiann/KernelSU?label=Release&logo=github)](https://github.com/tiann/KernelSU/releases/latest) +[![Weblate](https://img.shields.io/badge/Localization-Weblate-teal?logo=weblate)](https://hosted.weblate.org/engage/kernelsu) +[![Channel](https://img.shields.io/badge/Follow-Telegram-blue.svg?logo=telegram)](https://t.me/KernelSU) +[![License: GPL v2](https://img.shields.io/badge/License-GPL%20v2-orange.svg?logo=gnu)](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html) +[![GitHub License](https://img.shields.io/github/license/tiann/KernelSU?logo=gnu)](/LICENSE) + +## विशेषताएँ + +1. कर्नेल-आधारित `su` और रूट एक्सेस प्रबंधन। +2. [OverlayFS](https://en.wikipedia.org/wiki/OverlayFS) पर आधारित मॉड्यूल प्रणाली। +3. [App Profile](https://kernelsu.org/guide/app-profile.html): Root शक्ति को पिंजरे में बंद कर दो। + +## अनुकूलता अवस्था + +KernelSU आधिकारिक तौर पर Android GKI 2.0 डिवाइस (कर्नेल 5.10+) का समर्थन करता है। पुराने कर्नेल (4.14+) भी संगत हैं, लेकिन कर्नेल को मैन्युअल रूप से बनाना होगा। + +इसके साथ, WSA, ChromeOS और कंटेनर-आधारित Android सभी समर्थित हैं। + +वर्तमान में, केवल `arm64-v8a` और `x86_64` समर्थित हैं। + +## प्रयोग + +- [स्थापना निर्देश](https://kernelsu.org/guide/installation.html) +- [कैसे बनाना है ?](https://kernelsu.org/guide/how-to-build.html) +- [आधिकारिक वेबसाइट](https://kernelsu.org/) + +## अनुवाद करना + +KernelSU का अनुवाद करने या मौजूदा अनुवादों को बेहतर बनाने में सहायता के लिए, कृपया इसका उपयोग करें [Weblate](https://hosted.weblate.org/engage/kernelsu/). + +## बहस + +- Telegram: [@KernelSU](https://t.me/KernelSU) + +## लाइसेंस + +- `Kernel` निर्देशिका के अंतर्गत फ़ाइलें हैं [GPL-2-only](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html) +- `Kernel` निर्देशिका को छोड़कर अन्य सभी भाग हैं [GPL-3.0-or-later](https://www.gnu.org/licenses/gpl-3.0.html) + +## आभार सूची + +- [kernel-assisted-superuser](https://git.zx2c4.com/kernel-assisted-superuser/about/): KernelSU विचार। +- [Magisk](https://github.com/topjohnwu/Magisk): शक्तिशाली root उपकरण। +- [genuine](https://github.com/brevent/genuine/): apk v2 हस्ताक्षर सत्यापन। +- [Diamorphine](https://github.com/m0nad/Diamorphine): कुछ रूटकिट कौशल। diff --git a/KernelSU/docs/README_IW.md b/KernelSU/docs/README_IW.md new file mode 100644 index 000000000000..5997487e2a08 --- /dev/null +++ b/KernelSU/docs/README_IW.md @@ -0,0 +1,53 @@ +[English](README.md) | [Español](README_ES.md) | [简体中文](README_CN.md) | [繁體中文](README_TW.md) | [日本語](README_JP.md) | [한국어](README_KR.md) | [Polski](README_PL.md) | [Português (Brasil)](README_PT-BR.md) | [Türkçe](README_TR.md) | [Русский](README_RU.md) | [Tiếng Việt](README_VI.md) | [Indonesia](README_ID.md) | **עברית** | [हिंदी](README_IN.md) + +# KernelSU + +logo + +פתרון לניהול root מבוסס על Kernel עבור מכשירי Android. + +[![Latest release](https://img.shields.io/github/v/release/tiann/KernelSU?label=Release&logo=github)](https://github.com/tiann/KernelSU/releases/latest) +[![Weblate](https://img.shields.io/badge/Localization-Weblate-teal?logo=weblate)](https://hosted.weblate.org/engage/kernelsu) +[![Channel](https://img.shields.io/badge/Follow-Telegram-blue.svg?logo=telegram)](https://t.me/KernelSU) +[![License: GPL v2](https://img.shields.io/badge/License-GPL%20v2-orange.svg?logo=gnu)](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html) +[![GitHub License](https://img.shields.io/github/license/tiann/KernelSU?logo=gnu)](/LICENSE) + +## תכונות + +1. ניהול root ו־`su` מבוססים על Kernel. +2. מערכת מודולים מבוססת [OverlayFS](https://en.wikipedia.org/wiki/OverlayFS). +3. [פרופיל אפליקציה](https://kernelsu.org/guide/app-profile.html): נעילת גישת root בכלוב. + +## מצב תאימות + +KernelSU תומך במכשירי Android GKI 2.0 (kernel 5.10+) באופן רשמי. לליבות ישנות (4.14+) יש גם תאימות, אך יידרש לבנות את הליבה באופן ידני. + +באמצעות זה, תמיכה זמינה גם ל-WSA, ChromeOS ומכשירי Android המבוססים על מיכלים. + +כרגע, רק `arm64-v8a` ו־`x86_64` נתמכים. + +## שימוש + +- [הוראות התקנה](https://kernelsu.org/guide/installation.html) +- [איך לבנות?](https://kernelsu.org/guide/how-to-build.html) +- [האתר רשמי](https://kernelsu.org/) + +## תרגום + +כדי לעזור בתרגום של KernelSU או לשפר תרגומים קיימים, יש להשתמש ב-[Weblate](https://hosted.weblate.org/engage/kernelsu/). + +## דיון + +- Telegram: [@KernelSU](https://t.me/KernelSU) + +## רשיון + +- קבצים תחת הספרייה `kernel` מוגנים על פי [GPL-2.0-only](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html). +- כל החלקים האחרים, למעט הספרייה `kernel`, מוגנים על פי [GPL-3.0-or-later](https://www.gnu.org/licenses/gpl-3.0.html). + +## קרדיטים + +- [kernel-assisted-superuser](https://git.zx2c4.com/kernel-assisted-superuser/about/): הרעיון של KernelSU. +- [Magisk](https://github.com/topjohnwu/Magisk): הכלי הסופר חזק לניהול root. +- [genuine](https://github.com/brevent/genuine/): אימות חתימת apk v2. +- [Diamorphine](https://github.com/m0nad/Diamorphine): כמה יכולות רוט. diff --git a/KernelSU/docs/README_JP.md b/KernelSU/docs/README_JP.md new file mode 100644 index 000000000000..093618753775 --- /dev/null +++ b/KernelSU/docs/README_JP.md @@ -0,0 +1,53 @@ +[English](README.md) | [Español](README_ES.md) | [简体中文](README_CN.md) | [繁體中文](README_TW.md) | **日本語** | [한국어](README_KR.md) | [Polski](README_PL.md) | [Português (Brasil)](README_PT-BR.md) | [Türkçe](README_TR.md) | [Русский](README_RU.md) | [Tiếng Việt](README_VI.md) | [Indonesia](README_ID.md) | [עברית](README_IW.md) | [हिंदी](README_IN.md) + +# KernelSU + +logo + +Android におけるカーネルベースの root ソリューションです。 + +[![Latest release](https://img.shields.io/github/v/release/tiann/KernelSU?label=Release&logo=github)](https://github.com/tiann/KernelSU/releases/latest) +[![Weblate](https://img.shields.io/badge/Localization-Weblate-teal?logo=weblate)](https://hosted.weblate.org/engage/kernelsu) +[![Channel](https://img.shields.io/badge/Follow-Telegram-blue.svg?logo=telegram)](https://t.me/KernelSU) +[![License: GPL v2](https://img.shields.io/badge/License-GPL%20v2-orange.svg?logo=gnu)](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html) +[![GitHub License](https://img.shields.io/github/license/tiann/KernelSU?logo=gnu)](/LICENSE) + +## 特徴 + +1. カーネルベースの `su` と権限管理。 +2. [OverlayFS](https://en.wikipedia.org/wiki/OverlayFS) に基づくモジュールシステム。 +3. [アプリのプロファイル](https://kernelsu.org/guide/app-profile.html): root の権限をケージ内に閉じ込めます。 + +## 対応状況 + +KernelSU は GKI 2.0 デバイス(カーネルバージョン 5.10 以上)を公式にサポートしています。古いカーネル(4.14以上)とも互換性がありますが、自分でカーネルをビルドする必要があります。 + +WSA 、ChromeOS とコンテナ上で動作する Android でも KernelSU を統合して動かせます。 + +現在サポートしているアーキテクチャは `arm64-v8a` および `x86_64` です。 + +## 使用方法 + +- [インストール方法はこちら](https://kernelsu.org/ja_JP/guide/installation.html) +- [ビルド方法はこちら](https://kernelsu.org/guide/how-to-build.html) +- [公式サイト](https://kernelsu.org/ja_JP/) + +## 翻訳 + +KernelSU をあなたの言語に翻訳するか、既存の翻訳を改善するには、[Weblate](https://hosted.weblate.org/engage/kernelsu/) を使用してください。Manager翻訳した PR は、Weblate と競合するため受け入れられなくなりました。 + +## ディスカッション + +- Telegram: [@KernelSU](https://t.me/KernelSU) + +## ライセンス + +- `kernel` ディレクトリの下にあるすべてのファイル: [GPL-2-only](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html)。 +- `kernel` ディレクトリ以外のすべてのファイル: [GPL-3.0-or-later](https://www.gnu.org/licenses/gpl-3.0.html)。 + +## クレジット + +- [kernel-assisted-superuser](https://git.zx2c4.com/kernel-assisted-superuser/about/):KernelSU のアイデア元。 +- [Magisk](https://github.com/topjohnwu/Magisk):強力な root ツール。 +- [genuine](https://github.com/brevent/genuine/):apk v2 の署名検証。 +- [Diamorphine](https://github.com/m0nad/Diamorphine): rootkit のスキル。 diff --git a/KernelSU/docs/README_KR.md b/KernelSU/docs/README_KR.md new file mode 100644 index 000000000000..3226008920a1 --- /dev/null +++ b/KernelSU/docs/README_KR.md @@ -0,0 +1,57 @@ +[English](README.md) | [Español](README_ES.md) | [简体中文](README_CN.md) | [繁體中文](README_TW.md) | [日本語](README_JP.md) | **한국어** | [Polski](README_PL.md) | [Português (Brasil)](README_PT-BR.md) | [Türkçe](README_TR.md) | [Русский](README_RU.md) | [Tiếng Việt](README_VI.md) | [Indonesia](README_ID.md) | [עברית](README_IW.md) | [हिंदी](README_IN.md) + +# KernelSU + +logo + +안드로이드 기기에서 사용되는 커널 기반 루팅 솔루션입니다. + +[![Latest release](https://img.shields.io/github/v/release/tiann/KernelSU?label=Release&logo=github)](https://github.com/tiann/KernelSU/releases/latest) +[![Weblate](https://img.shields.io/badge/Localization-Weblate-teal?logo=weblate)](https://hosted.weblate.org/engage/kernelsu) +[![Channel](https://img.shields.io/badge/Follow-Telegram-blue.svg?logo=telegram)](https://t.me/KernelSU) +[![License: GPL v2](https://img.shields.io/badge/License-GPL%20v2-orange.svg?logo=gnu)](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html) +[![GitHub License](https://img.shields.io/github/license/tiann/KernelSU?logo=gnu)](/LICENSE) + +## 기능들 + +1. 커널 기반 `su` 및 루트 액세스 관리. +2. [OverlayFS](https://en.wikipedia.org/wiki/OverlayFS) 기반 모듈 시스템. +3. [App Profile](https://kernelsu.org/guide/app-profile.html): 루트 권한을 케이지에 가둡니다. + +## 호환 상태 + +KernelSU는 공식적으로 안드로이드 GKI 2.0 디바이스(커널 5.10 이상)를 지원합니다. 오래된 커널(4.14 이상)도 사용할 수 있지만, 커널을 수동으로 빌드해야 합니다. + +KernelSU는 WSA, ChromeOS, 컨테이너 기반 안드로이드 모두를 지원합니다. + +현재는 `arm64-v8a`와 `x86_64`만 지원됩니다. + +## 사용 방법 + +- [설치 방법](https://kernelsu.org/guide/installation.html) +- [어떻게 빌드하나요?](https://kernelsu.org/guide/how-to-build.html) +- [공식 웹사이트](https://kernelsu.org/) + +## 번역 + +KernelSU 번역을 돕거나 기존 번역을 개선하려면 [Weblate](https://hosted.weblate.org/engage/kernelsu/)를 이용해 주세요. 매니저의 번역은 Weblate와 충돌할 수 있으므로 더 이상 허용되지 않습니다. + +## 토론 + +- 텔레그램: [@KernelSU](https://t.me/KernelSU) + +## 보안 + +KernelSU의 보안 취약점 보고에 대한 자세한 내용은 [SECURITY.md](/SECURITY.md)를 참조하세요. + +## 저작권 + +- `kernel` 디렉터리 아래의 파일은 [GPL-2.0 전용](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html)입니다. +- `kernel` 디렉토리를 제외한 다른 모든 부분은 [GPL-3.0-이상](https://www.gnu.org/licenses/gpl-3.0.html)입니다. + +## 크래딧 + +- [kernel-assisted-superuser](https://git.zx2c4.com/kernel-assisted-superuser/about/): KernelSU의 아이디어. +- [Magisk](https://github.com/topjohnwu/Magisk): 강력한 루팅 도구. +- [genuine](https://github.com/brevent/genuine/): apk v2 서명 유효성 검사. +- [Diamorphine](https://github.com/m0nad/Diamorphine): 일부 rootkit 스킬. diff --git a/KernelSU/docs/README_PL.md b/KernelSU/docs/README_PL.md new file mode 100644 index 000000000000..ab9066296dd9 --- /dev/null +++ b/KernelSU/docs/README_PL.md @@ -0,0 +1,55 @@ +[English](README.md) | [Español](README_ES.md) | [简体中文](README_CN.md) | [繁體中文](README_TW.md) | [日本語](README_JP.md) | [한국어](README_KR.md) | **Polski** | [Português (Brasil)](README_PT-BR.md) | [Türkçe](README_TR.md) | [Русский](README_RU.md) | [Tiếng Việt](README_VI.md) | [Indonesia](README_ID.md) | [עברית](README_IW.md) | [हिंदी](README_IN.md) + +# KernelSU + +logo + +Rozwiązanie root oparte na jądrze dla urządzeń z systemem Android. + +[![Latest release](https://img.shields.io/github/v/release/tiann/KernelSU?label=Release&logo=github)](https://github.com/tiann/KernelSU/releases/latest) +[![Weblate](https://img.shields.io/badge/Localization-Weblate-teal?logo=weblate)](https://hosted.weblate.org/engage/kernelsu) +[![Channel](https://img.shields.io/badge/Follow-Telegram-blue.svg?logo=telegram)](https://t.me/KernelSU) +[![License: GPL v2](https://img.shields.io/badge/License-GPL%20v2-orange.svg?logo=gnu)](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html) +[![GitHub License](https://img.shields.io/github/license/tiann/KernelSU?logo=gnu)](/LICENSE) + +## Cechy + +1. Oparte na jądrze `su` i zarządzanie dostępem roota. +2. System modułów oparty na [OverlayFS](https://en.wikipedia.org/wiki/OverlayFS). + +## Kompatybilność + +KernelSU oficjalnie obsługuje urządzenia z Androidem GKI 2.0 (z jądrem 5.10+), starsze jądra (4.14+) są również kompatybilne, ale musisz sam skompilować jądro. + +WSA i Android oparty na kontenerach również powinny działać ze zintegrowanym KernelSU. + +Aktualnie obsługiwane ABI to : `arm64-v8a` i `x86_64`. + +## Użycie + +- [Instalacja](https://kernelsu.org/guide/installation.html) +- [Jak skompilować?](https://kernelsu.org/guide/how-to-build.html) + +## Tłumaczenie + +Aby pomóc w tłumaczeniu KernelSU lub ulepszyć istniejące tłumaczenia, użyj [Weblate](https://hosted.weblate.org/engage/kernelsu/). PR tłumaczenia Managera nie jest już akceptowany, ponieważ będzie kolidował z Weblate. + +## Dyskusja + +- Telegram: [@KernelSU](https://t.me/KernelSU) + +## Bezpieczeństwo + +Informacje na temat zgłaszania luk w zabezpieczeniach w KernelSU można znaleźć w pliku [SECURITY.md](/SECURITY.md). + +## Licencja + +- Pliki w katalogu `kernel` są na licencji [GPL-2-only](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html). +- Wszystkie inne części poza katalogiem `kernel` są na licencji [GPL-3-or-later](https://www.gnu.org/licenses/gpl-3.0.html). + +## Podziękowania + +- [kernel-assisted-superuser](https://git.zx2c4.com/kernel-assisted-superuser/about/): pomysłodawca KernelSU. +- [Magisk](https://github.com/topjohnwu/Magisk): implementacja sepolicy. +- [genuine](https://github.com/brevent/genuine/): walidacja podpisu apk v2. +- [Diamorphine](https://github.com/m0nad/Diamorphine): cenna znajomość rootkitów. diff --git a/KernelSU/docs/README_PT-BR.md b/KernelSU/docs/README_PT-BR.md new file mode 100644 index 000000000000..b5421e7f9be0 --- /dev/null +++ b/KernelSU/docs/README_PT-BR.md @@ -0,0 +1,57 @@ +[English](README.md) | [Español](README_ES.md) | [简体中文](README_CN.md) | [繁體中文](README_TW.md) | [日本語](README_JP.md) | [한국어](README_KR.md) | [Polski](README_PL.md) | **Português (Brasil)** | [Türkçe](README_TR.md) | [Русский](README_RU.md) | [Tiếng Việt](README_VI.md) | [Indonesia](README_ID.md) | [עברית](README_IW.md) | [हिंदी](README_IN.md) + +# KernelSU + +logo + +Uma solução root baseada em kernel para dispositivos Android. + +[![Latest release](https://img.shields.io/github/v/release/tiann/KernelSU?label=Release&logo=github)](https://github.com/tiann/KernelSU/releases/latest) +[![Weblate](https://img.shields.io/badge/Localização-Weblate-teal?logo=weblate)](https://hosted.weblate.org/engage/kernelsu) +[![Channel](https://img.shields.io/badge/Seguir-Telegram-blue.svg?logo=telegram)](https://t.me/KernelSU) +[![License: GPL v2](https://img.shields.io/badge/Licença-GPL%20v2-orange.svg?logo=gnu)](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html) +[![GitHub License](https://img.shields.io/github/license/tiann/KernelSU?logo=gnu)](/LICENSE) + +## Características + +1. `su` e gerenciamento de acesso root baseado em kernel. +2. Sistema modular baseado em [OverlayFS](https://en.wikipedia.org/wiki/OverlayFS). +3. [Perfil do Aplicativo](https://kernelsu.org/pt_BR/guide/app-profile.html): Tranque o poder root em uma gaiola. + +## Estado de compatibilidade + +O KernelSU oferece suporte oficial a dispositivos Android GKI 2.0 (kernel 5.10+). Kernels mais antigos (4.14+) também são compatíveis, mas o kernel terá que ser construído manualmente. + +Com isso, WSA, ChromeOS e Android baseado em contêiner são todos suportados. + +Atualmente, apenas `arm64-v8a` e `x86_64` são suportados. + +## Uso + + - [Instalação](https://kernelsu.org/pt_BR/guide/installation.html) + - [Como compilar o KernelSU?](https://kernelsu.org/pt_BR/guide/how-to-build.html) + - [Site oficial](https://kernelsu.org/pt_BR/) + +## Tradução + +Para contribuir com a tradução do KernelSU ou aprimorar traduções existentes, por favor, utilize o [Weblate](https://hosted.weblate.org/engage/kernelsu/). PR para a tradução do Gerenciador não são mais aceitas, pois podem entrar em conflito com o Weblate. + +## Discussão + +- Telegram: [@KernelSU](https://t.me/KernelSU) + +## Segurança + +Para obter informações sobre como relatar vulnerabilidades de segurança do KernelSU, consulte [SECURITY.md](/SECURITY.md). + +## Licença + +- Os arquivos no diretório `kernel` são [GPL-2.0-only](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html). +- Todas as outras partes, exceto o diretório `kernel` são [GPL-3.0-or-later](https://www.gnu.org/licenses/gpl-3.0.html). + +## Créditos + +- [kernel-assisted-superuser](https://git.zx2c4.com/kernel-assisted-superuser/about/): a ideia do KernelSU. +- [Magisk](https://github.com/topjohnwu/Magisk): a poderosa ferramenta root. +- [genuine](https://github.com/brevent/genuine/): validação de assinatura apk v2. +- [Diamorphine](https://github.com/m0nad/Diamorphine): algumas habilidades de rootkit. diff --git a/KernelSU/docs/README_RU.md b/KernelSU/docs/README_RU.md new file mode 100644 index 000000000000..7e50f47adfe5 --- /dev/null +++ b/KernelSU/docs/README_RU.md @@ -0,0 +1,49 @@ +[English](README.md) | [Español](README_ES.md) | [简体中文](README_CN.md) | [繁體中文](README_TW.md) | [日本語](README_JP.md) | [한국어](README_KR.md) | [Polski](README_PL.md) | [Português (Brasil)](README_PT-BR.md) | [Türkçe](README_TR.md) | **Русский** | [Tiếng Việt](README_VI.md) | [Indonesia](README_ID.md) | [עברית](README_IW.md) | [हिंदी](README_IN.md) + +# KernelSU + +logo + +Решение на основе ядра root для Android-устройств. + +[![Latest release](https://img.shields.io/github/v/release/tiann/KernelSU?label=Release&logo=github)](https://github.com/tiann/KernelSU/releases/latest) +[![Weblate](https://img.shields.io/badge/Localization-Weblate-teal?logo=weblate)](https://hosted.weblate.org/engage/kernelsu) +[![Channel](https://img.shields.io/badge/Follow-Telegram-blue.svg?logo=telegram)](https://t.me/KernelSU) +[![License: GPL v2](https://img.shields.io/badge/License-GPL%20v2-orange.svg?logo=gnu)](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html) +[![GitHub License](https://img.shields.io/github/license/tiann/KernelSU?logo=gnu)](/LICENSE) + +## Особенности + +1. Управление `su` и root-доступом на основе ядра. +2. Система модулей на основе [OverlayFS](https://en.wikipedia.org/wiki/OverlayFS). +3. [Профиль приложений](https://kernelsu.org/ru_RU/guide/app-profile.html): Запри корневую силу в клетке. + +## Совместимость + +KernelSU официально поддерживает устройства на базе Android GKI 2.0 (с ядром 5.10+), старые ядра (4.14+) также совместимы, но для этого необходимо собрать ядро самостоятельно. + +WSA и Android на основе контейнеров также должны работать с интегрированным KernelSU. + +В настоящее время поддерживаются следующие ABI: `arm64-v8a` и `x86_64`. + +## Использование + +- [Установка](https://kernelsu.org/ru_RU/guide/installation.html) +- [Как собрать?](https://kernelsu.org/ru_RU/guide/how-to-build.html) +- [официальный сайт](https://kernelsu.org/ru_RU/) + +## Обсуждение + +- Telegram: [@KernelSU](https://t.me/KernelSU) + +## Лицензия + +- Файлы в директории `kernel` [GPL-2-only](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html). +- Все остальные части, кроме директории `kernel` [GPL-3-or-later](https://www.gnu.org/licenses/gpl-3.0.html). + +## Благодарности + +- [kernel-assisted-superuser](https://git.zx2c4.com/kernel-assisted-superuser/about/): идея KernelSU. +- [Magisk](https://github.com/topjohnwu/Magisk): реализация sepolicy. +- [genuine](https://github.com/brevent/genuine/): проверка подписи apk v2. +- [Diamorphine](https://github.com/m0nad/Diamorphine): некоторые навыки руткита. diff --git a/KernelSU/docs/README_TR.md b/KernelSU/docs/README_TR.md new file mode 100644 index 000000000000..bc3363e8b490 --- /dev/null +++ b/KernelSU/docs/README_TR.md @@ -0,0 +1,57 @@ +[English](README.md) | [Español](README_ES.md) | [简体中文](README_CN.md) | [繁體中文](README_TW.md) | [日本語](README_JP.md) | [한국어](README_KR.md) | [Polski](README_PL.md) | [Português (Brasil)](README_PT-BR.md) | **Türkçe** | [Русский](README_RU.md) | [Tiếng Việt](README_VI.md) | [Indonesia](README_ID.md) | [עברית](README_IW.md) | [हिंदी](README_IN.md) + +# KernelSU + +logo + +Android cihazlar için kernel tabanlı root çözümü. + +[![Latest release](https://img.shields.io/github/v/release/tiann/KernelSU?label=Release&logo=github)](https://github.com/tiann/KernelSU/releases/latest) +[![Weblate](https://img.shields.io/badge/Localization-Weblate-teal?logo=weblate)](https://hosted.weblate.org/engage/kernelsu) +[![Channel](https://img.shields.io/badge/Follow-Telegram-blue.svg?logo=telegram)](https://t.me/KernelSU) +[![License: GPL v2](https://img.shields.io/badge/License-GPL%20v2-orange.svg?logo=gnu)](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html) +[![GitHub License](https://img.shields.io/github/license/tiann/KernelSU?logo=gnu)](/LICENSE) + +## Özellikler + +1. Kernel-tabanlı `su` ve root erişimi yönetimi. +2. [OverlayFS](https://en.wikipedia.org/wiki/OverlayFS)'ye dayalı modül sistemi. +3. [Uygulama profili](https://kernelsu.org/guide/app-profile.html): Root gücünü bir kafese kapatın. + +## Uyumluluk Durumu + +KernelSU resmi olarak Android GKI 2.0 cihazlarını (5.10+ kernelli) destekler, eski kernellerle de (4.14+) uyumludur, ancak kerneli kendinizin derlemeniz gerekir. + +Bununla birlikte; WSA, ChromeOS ve konteyner tabanlı Android'in tamamı desteklenmektedir. + +Şimdilik sadece `arm64-v8a` ve `x86_64` desteklenmektedir. + +## Kullanım + +- [Yükleme yönergeleri](https://kernelsu.org/guide/installation.html) +- [Nasıl derlenir?](https://kernelsu.org/guide/how-to-build.html) +- [Resmi WEB sitesi](https://kernelsu.org/) + +## Çeviri + +KernelSU'nun başka dillere çevrilmesine veya mevcut çevirilerin iyileştirilmesine yardımcı olmak için lütfen [Weblate](https://hosted.weblate.org/engage/kernelsu/) kullanın. Yönetici uygulamasının PR ile çevirisi, Weblate ile çakışacağından artık kabul edilmeyecektir. + +## Tartışma + +- Telegram: [@KernelSU](https://t.me/KernelSU) + +## Güvenlik + +KernelSU'daki güvenlik açıklarını bildirme hakkında bilgi için, bkz [SECURITY.md](/SECURITY.md). + +## Lisans + +- `kernel` klasöründeki dosyalar [GPL-2-only](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html) lisansı altındadır. +- `kernel` klasörü dışındaki bütün diğer bölümler [GPL-3-veya-sonraki](https://www.gnu.org/licenses/gpl-3.0.html) lisansı altındadır. + +## Krediler + +- [kernel-assisted-superuser](https://git.zx2c4.com/kernel-assisted-superuser/about/): KernelSU fikri. +- [Magisk](https://github.com/topjohnwu/Magisk): güçlü root aracı. +- [genuine](https://github.com/brevent/genuine/): apk v2 imza doğrulaması. +- [Diamorphine](https://github.com/m0nad/Diamorphine): bazı rootkit becerileri. diff --git a/KernelSU/docs/README_TW.md b/KernelSU/docs/README_TW.md new file mode 100644 index 000000000000..d025e1742a67 --- /dev/null +++ b/KernelSU/docs/README_TW.md @@ -0,0 +1,56 @@ +[English](README.md) | [Español](README_ES.md) | [简体中文](README_CN.md) | **繁體中文** | [日本語](README_JP.md) | [한국어](README_KR.md) | [Polski](README_PL.md) | [Português (Brasil)](README_PT-BR.md) | [Türkçe](README_TR.md) | [Русский](README_RU.md) | [Tiếng Việt](README_VI.md) | [Indonesia](README_ID.md) | [עברית](README_IW.md) | [हिंदी](README_IN.md) + +# KernelSU + +logo + +一個基於核心的 Android 裝置 Root 解決方案 + +[![Latest release](https://img.shields.io/github/v/release/tiann/KernelSU?label=Release&logo=github)](https://github.com/tiann/KernelSU/releases/latest) +[![Weblate](https://img.shields.io/badge/Localization-Weblate-teal?logo=weblate)](https://hosted.weblate.org/engage/kernelsu) +[![Channel](https://img.shields.io/badge/Follow-Telegram-blue.svg?logo=telegram)](https://t.me/KernelSU) +[![License: GPL v2](https://img.shields.io/badge/License-GPL%20v2-orange.svg?logo=gnu)](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html) +[![GitHub License](https://img.shields.io/github/license/tiann/KernelSU?logo=gnu)](/LICENSE) + +## 功能 + +- 基於核心的 `su` 和 Root 存取權管理。 +- 基於 [OverlayFS](https://en.wikipedia.org/wiki/OverlayFS) 的模組系統。 +- [App Profile](https://kernelsu.org/zh_TW/guide/app-profile.html): 將 Root 的權限鎖在牢籠中. + +## 相容性狀態 + +KernelSU 官方支援 Android GKI 2.0 的裝置 (核心版本 5.10+ );舊版核心同樣相容 (最低 4.14+ ),但需要自行編譯核心。 + +WSA和ChromeOS和執行在容器中的 Android 也可以與 KernelSU 一同運作。 + +目前支援架構:`arm64-v8a` 和 `x86_64`。 + +## 使用方法 + +- [安裝教學](https://kernelsu.org/zh_TW/guide/installation.html) +- [如何建置?](https://kernelsu.org/zh_TW/guide/how-to-build.html) +- [官方網站](https://kernelsu.org/zh_TW/) + +## 翻譯 + +若要協助翻譯 KernelSU 或改進現有翻譯,請使用 [Weblate](https://hosted.weblate.org/engage/kernelsu/)。 翻譯管理器的PR不再被接受,因為它會與Weblate衝突。 + +### 討論 + +- Telegram:[@KernelSU](https://t.me/KernelSU) + +## 安全 +有關報告 KernelSU 中的安全漏洞的資訊,請參閱 [SECURITY.md](/SECURITY.md)。 + +## 授權 + +- 目錄 `kernel` 下所有檔案為 [GPL-2-only](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html)。 +- 除 `kernel` 目錄的其他部分均為 [GPL-3-or-later](https://www.gnu.org/licenses/gpl-3.0.html)。 + +## 致謝 + +- [kernel-assisted-superuser](https://git.zx2c4.com/kernel-assisted-superuser/about/):KernelSU 的靈感。 +- [Magisk](https://github.com/topjohnwu/Magisk):sepolicy 實作。 +- [genuine](https://github.com/brevent/genuine/):apk v2 簽章驗證。 +- [Diamorphine](https://github.com/m0nad/Diamorphine):一些 rootkit 技巧。 diff --git a/KernelSU/docs/README_VI.md b/KernelSU/docs/README_VI.md new file mode 100644 index 000000000000..7dd3b4227aec --- /dev/null +++ b/KernelSU/docs/README_VI.md @@ -0,0 +1,53 @@ +[English](README.md) | [Español](README_ES.md) | [简体中文](README_CN.md) | [繁體中文](README_TW.md) | [日本語](README_JP.md) | [한국어](README_KR.md) | [Polski](README_PL.md) | [Português (Brasil)](README_PT-BR.md) | [Türkçe](README_TR.md) | [Русский](README_RU.md) | **Tiếng Việt** | [Indonesia](README_ID.md) | [עברית](README_IW.md) | [हिंदी](README_IN.md) + +# KernelSU + +logo + +Giải pháp root thông qua thay đổi trên Kernel hệ điều hành cho các thiết bị Android. + +[![Latest release](https://img.shields.io/github/v/release/tiann/KernelSU?label=Release&logo=github)](https://github.com/tiann/KernelSU/releases/latest) +[![Weblate](https://img.shields.io/badge/Localization-Weblate-teal?logo=weblate)](https://hosted.weblate.org/engage/kernelsu) +[![Channel](https://img.shields.io/badge/Follow-Telegram-blue.svg?logo=telegram)](https://t.me/KernelSU) +[![License: GPL v2](https://img.shields.io/badge/License-GPL%20v2-orange.svg?logo=gnu)](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html) +[![GitHub License](https://img.shields.io/github/license/tiann/KernelSU?logo=gnu)](/LICENSE) + +## Tính năng + +1. Hỗ trợ gói thực thi `su` và quản lý quyền root. +2. Hệ thống mô-đun thông qua [OverlayFS](https://en.wikipedia.org/wiki/OverlayFS). +3. [App Profile](https://kernelsu.org/guide/app-profile.html): Hạn chế quyền root của ứng dụng. + +## Tình trạng tương thích + +KernelSU chính thức hỗ trợ các thiết bị Android với kernel GKI 2.0 (phiên bản kernel 5.10+), các phiên bản kernel cũ hơn (4.14+) cũng tương thích, nhưng bạn cần phải tự biên dịch. + +WSA, ChromeOS và Android dựa trên container(container-based) cũng được hỗ trợ bởi KernelSU. + +Hiên tại Giao diện nhị phân của ứng dụng (ABI) được hỗ trợ bao gồm `arm64-v8a` và `x86_64`. + +## Sử dụng + +- [Hướng dẫn cài đặt](https://kernelsu.org/vi_VN/guide/installation.html) +- [Cách để build?](https://kernelsu.org/vi_VN/guide/how-to-build.html) +- [Website Chính Thức](https://kernelsu.org/vi_VN/) + +## Hỗ trợ dịch + +Nếu bạn muốn hỗ trợ dịch KernelSU sang một ngôn ngữ khác hoặc cải thiện các bản dịch trước, vui lòng sử dụng [Weblate](https://hosted.weblate.org/engage/kernelsu/). + +## Thảo luận + +- Telegram: [@KernelSU](https://t.me/KernelSU) + +## Giấy phép + +- Tất cả các file trong thư mục `kernel` dùng giấy phép [GPL-2-only](https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html). +- Tất cả các thành phần khác ngoại trừ thư mục `kernel` dùng giấy phép [GPL-3-or-later](https://www.gnu.org/licenses/gpl-3.0.html). + +## Lời cảm ơn + +- [kernel-assisted-superuser](https://git.zx2c4.com/kernel-assisted-superuser/about/): ý tưởng cho KernelSU. +- [Magisk](https://github.com/topjohnwu/Magisk): công cụ root mạnh mẽ. +- [genuine](https://github.com/brevent/genuine/): phương pháp xác thực apk v2. +- [Diamorphine](https://github.com/m0nad/Diamorphine): các phương pháp ẩn của rootkit. diff --git a/KernelSU/js/README.md b/KernelSU/js/README.md new file mode 100644 index 000000000000..4af3a7185863 --- /dev/null +++ b/KernelSU/js/README.md @@ -0,0 +1,111 @@ +# Library for KernelSU's module WebUI + +## Install + +```sh +yarn add kernelsu +``` + +## API + +### exec + +Spawns a **root** shell and runs a command within that shell, passing the `stdout` and `stderr` to a Promise when complete. + +- `command` `` The command to run, with space-separated arguments. +- `options` `` + - `cwd` - Current working directory of the child process + - `env` - Environment key-value pairs + +```javascript +import { exec } from 'kernelsu'; + +const { errno, stdout, stderr } = await exec('ls -l', { cwd: '/tmp' }); +if (errno === 0) { + // success + console.log(stdout); +} +``` + +### spawn + +Spawns a new process using the given `command` in **root** shell, with command-line arguments in `args`. If omitted, `args` defaults to an empty array. + +Returns a `ChildProcess`, Instances of the ChildProcess represent spawned child processes. + +- `command` `` The command to run. +- `args` `` List of string arguments. +- `options` ``: + - `cwd` `` - Current working directory of the child process + - `env` `` - Environment key-value pairs + +Example of running `ls -lh /data`, capturing `stdout`, `stderr`, and the exit code: + +```javascript +import { spawn } from 'kernelsu'; + +const ls = spawn('ls', ['-lh', '/data']); + +ls.stdout.on('data', (data) => { + console.log(`stdout: ${data}`); +}); + +ls.stderr.on('data', (data) => { + console.log(`stderr: ${data}`); +}); + +ls.on('exit', (code) => { + console.log(`child process exited with code ${code}`); +}); +``` + +#### ChildProcess + +##### Event 'exit' + +- `code` `` The exit code if the child exited on its own. + +The `'exit'` event is emitted after the child process ends. If the process exited, `code` is the final exit code of the process, otherwise null + +##### Event 'error' + +- `err` `` The error. + +The `'error'` event is emitted whenever: + +- The process could not be spawned. +- The process could not be killed. + +##### `stdout` + +A `Readable Stream` that represents the child process's `stdout`. + +```javascript +const subprocess = spawn('ls'); + +subprocess.stdout.on('data', (data) => { + console.log(`Received chunk ${data}`); +}); +``` + +#### `stderr` + +A `Readable Stream` that represents the child process's `stderr`. + +### fullScreen + +Request the WebView enter/exit full screen. + +```javascript +import { fullScreen } from 'kernelsu'; +fullScreen(true); +``` + +### toast + +Show a toast message. + +```javascript +import { toast } from 'kernelsu'; +toast('Hello, world!'); +``` diff --git a/KernelSU/js/index.d.ts b/KernelSU/js/index.d.ts new file mode 100644 index 000000000000..b65248e378f7 --- /dev/null +++ b/KernelSU/js/index.d.ts @@ -0,0 +1,45 @@ +interface ExecOptions { + cwd?: string, + env?: { [key: string]: string } +} + +interface ExecResults { + errno: number, + stdout: string, + stderr: string +} + +declare function exec(command: string): Promise; +declare function exec(command: string, options: ExecOptions): Promise; + +interface SpawnOptions { + cwd?: string, + env?: { [key: string]: string } +} + +interface Stdio { + on(event: 'data', callback: (data: string) => void) +} + +interface ChildProcess { + stdout: Stdio, + stderr: Stdio, + on(event: 'exit', callback: (code: number) => void) + on(event: 'error', callback: (err: any) => void) +} + +declare function spawn(command: string): ChildProcess; +declare function spawn(command: string, args: string[]): ChildProcess; +declare function spawn(command: string, options: SpawnOptions): ChildProcess; +declare function spawn(command: string, args: string[], options: SpawnOptions): ChildProcess; + +declare function fullScreen(isFullScreen: boolean); + +declare function toast(message: string); + +export { + exec, + spawn, + fullScreen, + toast +} diff --git a/KernelSU/js/index.js b/KernelSU/js/index.js new file mode 100644 index 000000000000..4b64e9c4c455 --- /dev/null +++ b/KernelSU/js/index.js @@ -0,0 +1,115 @@ +let callbackCounter = 0; +function getUniqueCallbackName(prefix) { + return `${prefix}_callback_${Date.now()}_${callbackCounter++}`; +} + +export function exec(command, options) { + if (typeof options === "undefined") { + options = {}; + } + + return new Promise((resolve, reject) => { + // Generate a unique callback function name + const callbackFuncName = getUniqueCallbackName("exec"); + + // Define the success callback function + window[callbackFuncName] = (errno, stdout, stderr) => { + resolve({ errno, stdout, stderr }); + cleanup(callbackFuncName); + }; + + function cleanup(successName) { + delete window[successName]; + } + + try { + ksu.exec(command, JSON.stringify(options), callbackFuncName); + } catch (error) { + reject(error); + cleanup(callbackFuncName); + } + }); +} + +function Stdio() { + this.listeners = {}; + } + + Stdio.prototype.on = function (event, listener) { + if (!this.listeners[event]) { + this.listeners[event] = []; + } + this.listeners[event].push(listener); + }; + + Stdio.prototype.emit = function (event, ...args) { + if (this.listeners[event]) { + this.listeners[event].forEach((listener) => listener(...args)); + } + }; + + function ChildProcess() { + this.listeners = {}; + this.stdin = new Stdio(); + this.stdout = new Stdio(); + this.stderr = new Stdio(); + } + + ChildProcess.prototype.on = function (event, listener) { + if (!this.listeners[event]) { + this.listeners[event] = []; + } + this.listeners[event].push(listener); + }; + + ChildProcess.prototype.emit = function (event, ...args) { + if (this.listeners[event]) { + this.listeners[event].forEach((listener) => listener(...args)); + } + }; + + export function spawn(command, args, options) { + if (typeof args === "undefined") { + args = []; + } else if (!(args instanceof Array)) { + // allow for (command, options) signature + options = args; + } + + if (typeof options === "undefined") { + options = {}; + } + + const child = new ChildProcess(); + const childCallbackName = getUniqueCallbackName("spawn"); + window[childCallbackName] = child; + + function cleanup(name) { + delete window[name]; + } + + child.on("exit", code => { + cleanup(childCallbackName); + }); + + try { + ksu.spawn( + command, + JSON.stringify(args), + JSON.stringify(options), + childCallbackName + ); + } catch (error) { + child.emit("error", error); + cleanup(childCallbackName); + } + return child; + } + +export function fullScreen(isFullScreen) { + ksu.fullScreen(isFullScreen); +} + +export function toast(message) { + ksu.toast(message); +} diff --git a/KernelSU/js/package.json b/KernelSU/js/package.json new file mode 100644 index 000000000000..02b350f33c79 --- /dev/null +++ b/KernelSU/js/package.json @@ -0,0 +1,26 @@ +{ + "name": "kernelsu", + "version": "1.0.6", + "description": "Library for KernelSU's module WebUI", + "main": "index.js", + "types": "index.d.ts", + "scripts": { + "test": "npm run test" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/tiann/KernelSU.git" + }, + "keywords": [ + "su", + "kernelsu", + "module", + "webui" + ], + "author": "weishu", + "license": "Apache-2.0", + "bugs": { + "url": "https://github.com/tiann/KernelSU/issues" + }, + "homepage": "https://github.com/tiann/KernelSU#readme" +} diff --git a/KernelSU/justfile b/KernelSU/justfile new file mode 100644 index 000000000000..51bef767d4a9 --- /dev/null +++ b/KernelSU/justfile @@ -0,0 +1,14 @@ +alias bk := build_ksud +alias bm := build_manager + +build_ksud: + cross build --target aarch64-linux-android --release --manifest-path ./userspace/ksud/Cargo.toml + +build_manager: build_ksud + cp userspace/ksud/target/aarch64-linux-android/release/ksud manager/app/src/main/jniLibs/arm64-v8a/libksud.so + cd manager && ./gradlew aDebug + +clippy: + cargo fmt --manifest-path ./userspace/ksud/Cargo.toml + cross clippy --target x86_64-pc-windows-gnu --release --manifest-path ./userspace/ksud/Cargo.toml + cross clippy --target aarch64-linux-android --release --manifest-path ./userspace/ksud/Cargo.toml diff --git a/KernelSU/kernel/.clang-format b/KernelSU/kernel/.clang-format new file mode 100644 index 000000000000..10dc5a9a61b3 --- /dev/null +++ b/KernelSU/kernel/.clang-format @@ -0,0 +1,548 @@ +# SPDX-License-Identifier: GPL-2.0 +# +# clang-format configuration file. Intended for clang-format >= 4. +# +# For more information, see: +# +# Documentation/process/clang-format.rst +# https://clang.llvm.org/docs/ClangFormat.html +# https://clang.llvm.org/docs/ClangFormatStyleOptions.html +# +--- +AccessModifierOffset: -4 +AlignAfterOpenBracket: Align +AlignConsecutiveAssignments: false +AlignConsecutiveDeclarations: false +#AlignEscapedNewlines: Left # Unknown to clang-format-4.0 +AlignOperands: true +AlignTrailingComments: false +AllowAllParametersOfDeclarationOnNextLine: false +AllowShortBlocksOnASingleLine: false +AllowShortCaseLabelsOnASingleLine: false +AllowShortFunctionsOnASingleLine: None +AllowShortIfStatementsOnASingleLine: false +AllowShortLoopsOnASingleLine: false +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: false +AlwaysBreakTemplateDeclarations: false +BinPackArguments: true +BinPackParameters: true +BraceWrapping: + AfterClass: false + AfterControlStatement: false + AfterEnum: false + AfterFunction: true + AfterNamespace: true + AfterObjCDeclaration: false + AfterStruct: false + AfterUnion: false + #AfterExternBlock: false # Unknown to clang-format-5.0 + BeforeCatch: false + BeforeElse: false + IndentBraces: false + #SplitEmptyFunction: true # Unknown to clang-format-4.0 + #SplitEmptyRecord: true # Unknown to clang-format-4.0 + #SplitEmptyNamespace: true # Unknown to clang-format-4.0 +BreakBeforeBinaryOperators: None +BreakBeforeBraces: Custom +#BreakBeforeInheritanceComma: false # Unknown to clang-format-4.0 +BreakBeforeTernaryOperators: false +BreakConstructorInitializersBeforeComma: false +#BreakConstructorInitializers: BeforeComma # Unknown to clang-format-4.0 +BreakAfterJavaFieldAnnotations: false +BreakStringLiterals: false +ColumnLimit: 80 +CommentPragmas: '^ IWYU pragma:' +#CompactNamespaces: false # Unknown to clang-format-4.0 +ConstructorInitializerAllOnOneLineOrOnePerLine: false +ConstructorInitializerIndentWidth: 8 +ContinuationIndentWidth: 8 +Cpp11BracedListStyle: false +DerivePointerAlignment: false +DisableFormat: false +ExperimentalAutoDetectBinPacking: false +#FixNamespaceComments: false # Unknown to clang-format-4.0 + +# Taken from: +# git grep -h '^#define [^[:space:]]*for_each[^[:space:]]*(' include/ \ +# | sed "s,^#define \([^[:space:]]*for_each[^[:space:]]*\)(.*$, - '\1'," \ +# | sort | uniq +ForEachMacros: + - 'apei_estatus_for_each_section' + - 'ata_for_each_dev' + - 'ata_for_each_link' + - '__ata_qc_for_each' + - 'ata_qc_for_each' + - 'ata_qc_for_each_raw' + - 'ata_qc_for_each_with_internal' + - 'ax25_for_each' + - 'ax25_uid_for_each' + - '__bio_for_each_bvec' + - 'bio_for_each_bvec' + - 'bio_for_each_bvec_all' + - 'bio_for_each_integrity_vec' + - '__bio_for_each_segment' + - 'bio_for_each_segment' + - 'bio_for_each_segment_all' + - 'bio_list_for_each' + - 'bip_for_each_vec' + - 'bitmap_for_each_clear_region' + - 'bitmap_for_each_set_region' + - 'blkg_for_each_descendant_post' + - 'blkg_for_each_descendant_pre' + - 'blk_queue_for_each_rl' + - 'bond_for_each_slave' + - 'bond_for_each_slave_rcu' + - 'bpf_for_each_spilled_reg' + - 'btree_for_each_safe128' + - 'btree_for_each_safe32' + - 'btree_for_each_safe64' + - 'btree_for_each_safel' + - 'card_for_each_dev' + - 'cgroup_taskset_for_each' + - 'cgroup_taskset_for_each_leader' + - 'cpufreq_for_each_entry' + - 'cpufreq_for_each_entry_idx' + - 'cpufreq_for_each_valid_entry' + - 'cpufreq_for_each_valid_entry_idx' + - 'css_for_each_child' + - 'css_for_each_descendant_post' + - 'css_for_each_descendant_pre' + - 'device_for_each_child_node' + - 'dma_fence_chain_for_each' + - 'do_for_each_ftrace_op' + - 'drm_atomic_crtc_for_each_plane' + - 'drm_atomic_crtc_state_for_each_plane' + - 'drm_atomic_crtc_state_for_each_plane_state' + - 'drm_atomic_for_each_plane_damage' + - 'drm_client_for_each_connector_iter' + - 'drm_client_for_each_modeset' + - 'drm_connector_for_each_possible_encoder' + - 'drm_for_each_bridge_in_chain' + - 'drm_for_each_connector_iter' + - 'drm_for_each_crtc' + - 'drm_for_each_encoder' + - 'drm_for_each_encoder_mask' + - 'drm_for_each_fb' + - 'drm_for_each_legacy_plane' + - 'drm_for_each_plane' + - 'drm_for_each_plane_mask' + - 'drm_for_each_privobj' + - 'drm_mm_for_each_hole' + - 'drm_mm_for_each_node' + - 'drm_mm_for_each_node_in_range' + - 'drm_mm_for_each_node_safe' + - 'flow_action_for_each' + - 'for_each_active_dev_scope' + - 'for_each_active_drhd_unit' + - 'for_each_active_iommu' + - 'for_each_aggr_pgid' + - 'for_each_available_child_of_node' + - 'for_each_bio' + - 'for_each_board_func_rsrc' + - 'for_each_bvec' + - 'for_each_card_auxs' + - 'for_each_card_auxs_safe' + - 'for_each_card_components' + - 'for_each_card_dapms' + - 'for_each_card_pre_auxs' + - 'for_each_card_prelinks' + - 'for_each_card_rtds' + - 'for_each_card_rtds_safe' + - 'for_each_card_widgets' + - 'for_each_card_widgets_safe' + - 'for_each_cgroup_storage_type' + - 'for_each_child_of_node' + - 'for_each_clear_bit' + - 'for_each_clear_bit_from' + - 'for_each_cmsghdr' + - 'for_each_compatible_node' + - 'for_each_component_dais' + - 'for_each_component_dais_safe' + - 'for_each_comp_order' + - 'for_each_console' + - 'for_each_cpu' + - 'for_each_cpu_and' + - 'for_each_cpu_not' + - 'for_each_cpu_wrap' + - 'for_each_dapm_widgets' + - 'for_each_dev_addr' + - 'for_each_dev_scope' + - 'for_each_displayid_db' + - 'for_each_dma_cap_mask' + - 'for_each_dpcm_be' + - 'for_each_dpcm_be_rollback' + - 'for_each_dpcm_be_safe' + - 'for_each_dpcm_fe' + - 'for_each_drhd_unit' + - 'for_each_dss_dev' + - 'for_each_efi_memory_desc' + - 'for_each_efi_memory_desc_in_map' + - 'for_each_element' + - 'for_each_element_extid' + - 'for_each_element_id' + - 'for_each_endpoint_of_node' + - 'for_each_evictable_lru' + - 'for_each_fib6_node_rt_rcu' + - 'for_each_fib6_walker_rt' + - 'for_each_free_mem_pfn_range_in_zone' + - 'for_each_free_mem_pfn_range_in_zone_from' + - 'for_each_free_mem_range' + - 'for_each_free_mem_range_reverse' + - 'for_each_func_rsrc' + - 'for_each_hstate' + - 'for_each_if' + - 'for_each_iommu' + - 'for_each_ip_tunnel_rcu' + - 'for_each_irq_nr' + - 'for_each_link_codecs' + - 'for_each_link_cpus' + - 'for_each_link_platforms' + - 'for_each_lru' + - 'for_each_matching_node' + - 'for_each_matching_node_and_match' + - 'for_each_member' + - 'for_each_mem_region' + - 'for_each_memblock_type' + - 'for_each_memcg_cache_index' + - 'for_each_mem_pfn_range' + - '__for_each_mem_range' + - 'for_each_mem_range' + - '__for_each_mem_range_rev' + - 'for_each_mem_range_rev' + - 'for_each_migratetype_order' + - 'for_each_msi_entry' + - 'for_each_msi_entry_safe' + - 'for_each_net' + - 'for_each_net_continue_reverse' + - 'for_each_netdev' + - 'for_each_netdev_continue' + - 'for_each_netdev_continue_rcu' + - 'for_each_netdev_continue_reverse' + - 'for_each_netdev_feature' + - 'for_each_netdev_in_bond_rcu' + - 'for_each_netdev_rcu' + - 'for_each_netdev_reverse' + - 'for_each_netdev_safe' + - 'for_each_net_rcu' + - 'for_each_new_connector_in_state' + - 'for_each_new_crtc_in_state' + - 'for_each_new_mst_mgr_in_state' + - 'for_each_new_plane_in_state' + - 'for_each_new_private_obj_in_state' + - 'for_each_node' + - 'for_each_node_by_name' + - 'for_each_node_by_type' + - 'for_each_node_mask' + - 'for_each_node_state' + - 'for_each_node_with_cpus' + - 'for_each_node_with_property' + - 'for_each_nonreserved_multicast_dest_pgid' + - 'for_each_of_allnodes' + - 'for_each_of_allnodes_from' + - 'for_each_of_cpu_node' + - 'for_each_of_pci_range' + - 'for_each_old_connector_in_state' + - 'for_each_old_crtc_in_state' + - 'for_each_old_mst_mgr_in_state' + - 'for_each_oldnew_connector_in_state' + - 'for_each_oldnew_crtc_in_state' + - 'for_each_oldnew_mst_mgr_in_state' + - 'for_each_oldnew_plane_in_state' + - 'for_each_oldnew_plane_in_state_reverse' + - 'for_each_oldnew_private_obj_in_state' + - 'for_each_old_plane_in_state' + - 'for_each_old_private_obj_in_state' + - 'for_each_online_cpu' + - 'for_each_online_node' + - 'for_each_online_pgdat' + - 'for_each_pci_bridge' + - 'for_each_pci_dev' + - 'for_each_pci_msi_entry' + - 'for_each_pcm_streams' + - 'for_each_physmem_range' + - 'for_each_populated_zone' + - 'for_each_possible_cpu' + - 'for_each_present_cpu' + - 'for_each_prime_number' + - 'for_each_prime_number_from' + - 'for_each_process' + - 'for_each_process_thread' + - 'for_each_property_of_node' + - 'for_each_registered_fb' + - 'for_each_requested_gpio' + - 'for_each_requested_gpio_in_range' + - 'for_each_reserved_mem_range' + - 'for_each_reserved_mem_region' + - 'for_each_rtd_codec_dais' + - 'for_each_rtd_codec_dais_rollback' + - 'for_each_rtd_components' + - 'for_each_rtd_cpu_dais' + - 'for_each_rtd_cpu_dais_rollback' + - 'for_each_rtd_dais' + - 'for_each_set_bit' + - 'for_each_set_bit_from' + - 'for_each_set_clump8' + - 'for_each_sg' + - 'for_each_sg_dma_page' + - 'for_each_sg_page' + - 'for_each_sgtable_dma_page' + - 'for_each_sgtable_dma_sg' + - 'for_each_sgtable_page' + - 'for_each_sgtable_sg' + - 'for_each_sibling_event' + - 'for_each_subelement' + - 'for_each_subelement_extid' + - 'for_each_subelement_id' + - '__for_each_thread' + - 'for_each_thread' + - 'for_each_unicast_dest_pgid' + - 'for_each_wakeup_source' + - 'for_each_zone' + - 'for_each_zone_zonelist' + - 'for_each_zone_zonelist_nodemask' + - 'fwnode_for_each_available_child_node' + - 'fwnode_for_each_child_node' + - 'fwnode_graph_for_each_endpoint' + - 'gadget_for_each_ep' + - 'genradix_for_each' + - 'genradix_for_each_from' + - 'hash_for_each' + - 'hash_for_each_possible' + - 'hash_for_each_possible_rcu' + - 'hash_for_each_possible_rcu_notrace' + - 'hash_for_each_possible_safe' + - 'hash_for_each_rcu' + - 'hash_for_each_safe' + - 'hctx_for_each_ctx' + - 'hlist_bl_for_each_entry' + - 'hlist_bl_for_each_entry_rcu' + - 'hlist_bl_for_each_entry_safe' + - 'hlist_for_each' + - 'hlist_for_each_entry' + - 'hlist_for_each_entry_continue' + - 'hlist_for_each_entry_continue_rcu' + - 'hlist_for_each_entry_continue_rcu_bh' + - 'hlist_for_each_entry_from' + - 'hlist_for_each_entry_from_rcu' + - 'hlist_for_each_entry_rcu' + - 'hlist_for_each_entry_rcu_bh' + - 'hlist_for_each_entry_rcu_notrace' + - 'hlist_for_each_entry_safe' + - '__hlist_for_each_rcu' + - 'hlist_for_each_safe' + - 'hlist_nulls_for_each_entry' + - 'hlist_nulls_for_each_entry_from' + - 'hlist_nulls_for_each_entry_rcu' + - 'hlist_nulls_for_each_entry_safe' + - 'i3c_bus_for_each_i2cdev' + - 'i3c_bus_for_each_i3cdev' + - 'ide_host_for_each_port' + - 'ide_port_for_each_dev' + - 'ide_port_for_each_present_dev' + - 'idr_for_each_entry' + - 'idr_for_each_entry_continue' + - 'idr_for_each_entry_continue_ul' + - 'idr_for_each_entry_ul' + - 'in_dev_for_each_ifa_rcu' + - 'in_dev_for_each_ifa_rtnl' + - 'inet_bind_bucket_for_each' + - 'inet_lhash2_for_each_icsk_rcu' + - 'key_for_each' + - 'key_for_each_safe' + - 'klp_for_each_func' + - 'klp_for_each_func_safe' + - 'klp_for_each_func_static' + - 'klp_for_each_object' + - 'klp_for_each_object_safe' + - 'klp_for_each_object_static' + - 'kunit_suite_for_each_test_case' + - 'kvm_for_each_memslot' + - 'kvm_for_each_vcpu' + - 'list_for_each' + - 'list_for_each_codec' + - 'list_for_each_codec_safe' + - 'list_for_each_continue' + - 'list_for_each_entry' + - 'list_for_each_entry_continue' + - 'list_for_each_entry_continue_rcu' + - 'list_for_each_entry_continue_reverse' + - 'list_for_each_entry_from' + - 'list_for_each_entry_from_rcu' + - 'list_for_each_entry_from_reverse' + - 'list_for_each_entry_lockless' + - 'list_for_each_entry_rcu' + - 'list_for_each_entry_reverse' + - 'list_for_each_entry_safe' + - 'list_for_each_entry_safe_continue' + - 'list_for_each_entry_safe_from' + - 'list_for_each_entry_safe_reverse' + - 'list_for_each_prev' + - 'list_for_each_prev_safe' + - 'list_for_each_safe' + - 'llist_for_each' + - 'llist_for_each_entry' + - 'llist_for_each_entry_safe' + - 'llist_for_each_safe' + - 'mci_for_each_dimm' + - 'media_device_for_each_entity' + - 'media_device_for_each_intf' + - 'media_device_for_each_link' + - 'media_device_for_each_pad' + - 'nanddev_io_for_each_page' + - 'netdev_for_each_lower_dev' + - 'netdev_for_each_lower_private' + - 'netdev_for_each_lower_private_rcu' + - 'netdev_for_each_mc_addr' + - 'netdev_for_each_uc_addr' + - 'netdev_for_each_upper_dev_rcu' + - 'netdev_hw_addr_list_for_each' + - 'nft_rule_for_each_expr' + - 'nla_for_each_attr' + - 'nla_for_each_nested' + - 'nlmsg_for_each_attr' + - 'nlmsg_for_each_msg' + - 'nr_neigh_for_each' + - 'nr_neigh_for_each_safe' + - 'nr_node_for_each' + - 'nr_node_for_each_safe' + - 'of_for_each_phandle' + - 'of_property_for_each_string' + - 'of_property_for_each_u32' + - 'pci_bus_for_each_resource' + - 'pcm_for_each_format' + - 'ping_portaddr_for_each_entry' + - 'plist_for_each' + - 'plist_for_each_continue' + - 'plist_for_each_entry' + - 'plist_for_each_entry_continue' + - 'plist_for_each_entry_safe' + - 'plist_for_each_safe' + - 'pnp_for_each_card' + - 'pnp_for_each_dev' + - 'protocol_for_each_card' + - 'protocol_for_each_dev' + - 'queue_for_each_hw_ctx' + - 'radix_tree_for_each_slot' + - 'radix_tree_for_each_tagged' + - 'rbtree_postorder_for_each_entry_safe' + - 'rdma_for_each_block' + - 'rdma_for_each_port' + - 'rdma_umem_for_each_dma_block' + - 'resource_list_for_each_entry' + - 'resource_list_for_each_entry_safe' + - 'rhl_for_each_entry_rcu' + - 'rhl_for_each_rcu' + - 'rht_for_each' + - 'rht_for_each_entry' + - 'rht_for_each_entry_from' + - 'rht_for_each_entry_rcu' + - 'rht_for_each_entry_rcu_from' + - 'rht_for_each_entry_safe' + - 'rht_for_each_from' + - 'rht_for_each_rcu' + - 'rht_for_each_rcu_from' + - '__rq_for_each_bio' + - 'rq_for_each_bvec' + - 'rq_for_each_segment' + - 'scsi_for_each_prot_sg' + - 'scsi_for_each_sg' + - 'sctp_for_each_hentry' + - 'sctp_skb_for_each' + - 'shdma_for_each_chan' + - '__shost_for_each_device' + - 'shost_for_each_device' + - 'sk_for_each' + - 'sk_for_each_bound' + - 'sk_for_each_entry_offset_rcu' + - 'sk_for_each_from' + - 'sk_for_each_rcu' + - 'sk_for_each_safe' + - 'sk_nulls_for_each' + - 'sk_nulls_for_each_from' + - 'sk_nulls_for_each_rcu' + - 'snd_array_for_each' + - 'snd_pcm_group_for_each_entry' + - 'snd_soc_dapm_widget_for_each_path' + - 'snd_soc_dapm_widget_for_each_path_safe' + - 'snd_soc_dapm_widget_for_each_sink_path' + - 'snd_soc_dapm_widget_for_each_source_path' + - 'tb_property_for_each' + - 'tcf_exts_for_each_action' + - 'udp_portaddr_for_each_entry' + - 'udp_portaddr_for_each_entry_rcu' + - 'usb_hub_for_each_child' + - 'v4l2_device_for_each_subdev' + - 'v4l2_m2m_for_each_dst_buf' + - 'v4l2_m2m_for_each_dst_buf_safe' + - 'v4l2_m2m_for_each_src_buf' + - 'v4l2_m2m_for_each_src_buf_safe' + - 'virtio_device_for_each_vq' + - 'while_for_each_ftrace_op' + - 'xa_for_each' + - 'xa_for_each_marked' + - 'xa_for_each_range' + - 'xa_for_each_start' + - 'xas_for_each' + - 'xas_for_each_conflict' + - 'xas_for_each_marked' + - 'xbc_array_for_each_value' + - 'xbc_for_each_key_value' + - 'xbc_node_for_each_array_value' + - 'xbc_node_for_each_child' + - 'xbc_node_for_each_key_value' + - 'zorro_for_each_dev' + +#IncludeBlocks: Preserve # Unknown to clang-format-5.0 +IncludeCategories: + - Regex: '.*' + Priority: 1 +IncludeIsMainRegex: '(Test)?$' +IndentCaseLabels: false +#IndentPPDirectives: None # Unknown to clang-format-5.0 +IndentWidth: 8 +IndentWrappedFunctionNames: false +JavaScriptQuotes: Leave +JavaScriptWrapImports: true +KeepEmptyLinesAtTheStartOfBlocks: false +MacroBlockBegin: '' +MacroBlockEnd: '' +MaxEmptyLinesToKeep: 1 +NamespaceIndentation: None +#ObjCBinPackProtocolList: Auto # Unknown to clang-format-5.0 +ObjCBlockIndentWidth: 8 +ObjCSpaceAfterProperty: true +ObjCSpaceBeforeProtocolList: true + +# Taken from git's rules +#PenaltyBreakAssignment: 10 # Unknown to clang-format-4.0 +PenaltyBreakBeforeFirstCallParameter: 30 +PenaltyBreakComment: 10 +PenaltyBreakFirstLessLess: 0 +PenaltyBreakString: 10 +PenaltyExcessCharacter: 100 +PenaltyReturnTypeOnItsOwnLine: 60 + +PointerAlignment: Right +ReflowComments: false +SortIncludes: false +#SortUsingDeclarations: false # Unknown to clang-format-4.0 +SpaceAfterCStyleCast: false +SpaceAfterTemplateKeyword: true +SpaceBeforeAssignmentOperators: true +#SpaceBeforeCtorInitializerColon: true # Unknown to clang-format-5.0 +#SpaceBeforeInheritanceColon: true # Unknown to clang-format-5.0 +SpaceBeforeParens: ControlStatements +#SpaceBeforeRangeBasedForLoopColon: true # Unknown to clang-format-5.0 +SpaceInEmptyParentheses: false +SpacesBeforeTrailingComments: 1 +SpacesInAngles: false +SpacesInContainerLiterals: false +SpacesInCStyleCastParentheses: false +SpacesInParentheses: false +SpacesInSquareBrackets: false +Standard: Cpp03 +TabWidth: 8 +UseTab: Always +... diff --git a/KernelSU/kernel/Kconfig b/KernelSU/kernel/Kconfig new file mode 100644 index 000000000000..67f177f4708a --- /dev/null +++ b/KernelSU/kernel/Kconfig @@ -0,0 +1,19 @@ +menu "KernelSU" + +config KSU + tristate "KernelSU function support" + depends on OVERLAY_FS + default y + help + Enable kernel-level root privileges on Android System. + To compile as a module, choose M here: the + module will be called kernelsu. + +config KSU_DEBUG + bool "KernelSU debug mode" + depends on KSU + default n + help + Enable KernelSU debug mode. + +endmenu diff --git a/KernelSU/kernel/LICENSE b/KernelSU/kernel/LICENSE new file mode 100644 index 000000000000..d159169d1050 --- /dev/null +++ b/KernelSU/kernel/LICENSE @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along + with this program; if not, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/KernelSU/kernel/Makefile b/KernelSU/kernel/Makefile new file mode 100644 index 000000000000..669297563b1d --- /dev/null +++ b/KernelSU/kernel/Makefile @@ -0,0 +1,69 @@ +kernelsu-objs := ksu.o +kernelsu-objs += allowlist.o +kernelsu-objs += apk_sign.o +kernelsu-objs += sucompat.o +kernelsu-objs += throne_tracker.o +kernelsu-objs += core_hook.o +kernelsu-objs += ksud.o +kernelsu-objs += embed_ksud.o +kernelsu-objs += kernel_compat.o + +kernelsu-objs += selinux/selinux.o +kernelsu-objs += selinux/sepolicy.o +kernelsu-objs += selinux/rules.o +ccflags-y += -I$(srctree)/security/selinux -I$(srctree)/security/selinux/include +ccflags-y += -I$(objtree)/security/selinux -include $(srctree)/include/uapi/asm-generic/errno.h + +obj-$(CONFIG_KSU) += kernelsu.o + +# .git is a text file while the module is imported by 'git submodule add'. +ifeq ($(shell test -e $(srctree)/$(src)/../.git; echo $$?),0) +$(shell cd $(srctree)/$(src); /usr/bin/env PATH="$$PATH":/usr/bin:/usr/local/bin [ -f ../.git/shallow ] && git fetch --unshallow) +KSU_GIT_VERSION := $(shell cd $(srctree)/$(src); /usr/bin/env PATH="$$PATH":/usr/bin:/usr/local/bin git rev-list --count HEAD) +# ksu_version: major * 10000 + git version + 200 for historical reasons +$(eval KSU_VERSION=$(shell expr 10000 + $(KSU_GIT_VERSION) + 200)) +$(info -- KernelSU version: $(KSU_VERSION)) +ccflags-y += -DKSU_VERSION=$(KSU_VERSION) +else # If there is no .git file, the default version will be passed. +$(warning "KSU_GIT_VERSION not defined! It is better to make KernelSU a git submodule!") +ccflags-y += -DKSU_VERSION=16 +endif + +ifeq ($(shell grep -q " current_sid(void)" $(srctree)/security/selinux/include/objsec.h; echo $$?),0) +ccflags-y += -DKSU_COMPAT_HAS_CURRENT_SID +endif + +ifeq ($(shell grep -q "struct selinux_state " $(srctree)/security/selinux/include/security.h; echo $$?),0) +ccflags-y += -DKSU_COMPAT_HAS_SELINUX_STATE +endif + +ifndef KSU_EXPECTED_SIZE +KSU_EXPECTED_SIZE := 0x033b +endif + +ifndef KSU_EXPECTED_HASH +KSU_EXPECTED_HASH := c371061b19d8c7d7d6133c6a9bafe198fa944e50c1b31c9d8daa8d7f1fc2d2d6 +endif + +ifdef KSU_MANAGER_PACKAGE +ccflags-y += -DKSU_MANAGER_PACKAGE=\"$(KSU_MANAGER_PACKAGE)\" +$(info -- KernelSU Manager package name: $(KSU_MANAGER_PACKAGE)) +endif + +$(info -- KernelSU Manager signature size: $(KSU_EXPECTED_SIZE)) +$(info -- KernelSU Manager signature hash: $(KSU_EXPECTED_HASH)) + +ccflags-y += -DEXPECTED_SIZE=$(KSU_EXPECTED_SIZE) +ccflags-y += -DEXPECTED_HASH=\"$(KSU_EXPECTED_HASH)\" + +ifeq ($(shell grep -q "int path_umount" $(srctree)/fs/namespace.c; echo $$?),0) +ccflags-y += -DKSU_UMOUNT +else +$(info -- Did you know you can backport path_umount to fs/namespace.c from 5.9?) +$(info -- Read: https://kernelsu.org/guide/how-to-integrate-for-non-gki.html#how-to-backport-path-umount) +endif + +ccflags-y += -Wno-implicit-function-declaration -Wno-strict-prototypes -Wno-int-conversion -Wno-gcc-compat +ccflags-y += -Wno-declaration-after-statement -Wno-unused-function + +# Keep a new line here!! Because someone may append config diff --git a/KernelSU/kernel/allowlist.c b/KernelSU/kernel/allowlist.c new file mode 100644 index 000000000000..4fbba9355949 --- /dev/null +++ b/KernelSU/kernel/allowlist.c @@ -0,0 +1,529 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 0) +#include +#endif + +#include "ksu.h" +#include "klog.h" // IWYU pragma: keep +#include "selinux/selinux.h" +#include "kernel_compat.h" +#include "allowlist.h" +#include "manager.h" + +#define FILE_MAGIC 0x7f4b5355 // ' KSU', u32 +#define FILE_FORMAT_VERSION 3 // u32 + +#define KSU_APP_PROFILE_PRESERVE_UID 9999 // NOBODY_UID +#define KSU_DEFAULT_SELINUX_DOMAIN "u:r:su:s0" + +static DEFINE_MUTEX(allowlist_mutex); + +// default profiles, these may be used frequently, so we cache it +static struct root_profile default_root_profile; +static struct non_root_profile default_non_root_profile; + +static int allow_list_arr[PAGE_SIZE / sizeof(int)] __read_mostly __aligned(PAGE_SIZE); +static int allow_list_pointer __read_mostly = 0; + +static void remove_uid_from_arr(uid_t uid) +{ + int *temp_arr; + int i, j; + + if (allow_list_pointer == 0) + return; + + temp_arr = kmalloc(sizeof(allow_list_arr), GFP_KERNEL); + if (temp_arr == NULL) { + pr_err("%s: unable to allocate memory\n", __func__); + return; + } + + for (i = j = 0; i < allow_list_pointer; i++) { + if (allow_list_arr[i] == uid) + continue; + temp_arr[j++] = allow_list_arr[i]; + } + + allow_list_pointer = j; + + for (; j < ARRAY_SIZE(allow_list_arr); j++) + temp_arr[j] = -1; + + memcpy(&allow_list_arr, temp_arr, PAGE_SIZE); + kfree(temp_arr); +} + +static void init_default_profiles() +{ + default_root_profile.uid = 0; + default_root_profile.gid = 0; + default_root_profile.groups_count = 1; + default_root_profile.groups[0] = 0; + memset(&default_root_profile.capabilities, 0xff, + sizeof(default_root_profile.capabilities)); + default_root_profile.namespaces = 0; + strcpy(default_root_profile.selinux_domain, KSU_DEFAULT_SELINUX_DOMAIN); + + // This means that we will umount modules by default! + default_non_root_profile.umount_modules = true; +} + +struct perm_data { + struct list_head list; + struct app_profile profile; +}; + +static struct list_head allow_list; + +static uint8_t allow_list_bitmap[PAGE_SIZE] __read_mostly __aligned(PAGE_SIZE); +#define BITMAP_UID_MAX ((sizeof(allow_list_bitmap) * BITS_PER_BYTE) - 1) + +#define KERNEL_SU_ALLOWLIST "/data/adb/ksu/.allowlist" + +static struct work_struct ksu_save_work; +static struct work_struct ksu_load_work; + +bool persistent_allow_list(void); + +void ksu_show_allow_list(void) +{ + struct perm_data *p = NULL; + struct list_head *pos = NULL; + pr_info("ksu_show_allow_list\n"); + list_for_each (pos, &allow_list) { + p = list_entry(pos, struct perm_data, list); + pr_info("uid :%d, allow: %d\n", p->profile.current_uid, + p->profile.allow_su); + } +} + +#ifdef CONFIG_KSU_DEBUG +static void ksu_grant_root_to_shell() +{ + struct app_profile profile = { + .allow_su = true, + .current_uid = 2000, + }; + strcpy(profile.key, "com.android.shell"); + strcpy(profile.rp_config.profile.selinux_domain, KSU_DEFAULT_SELINUX_DOMAIN); + ksu_set_app_profile(&profile, false); +} +#endif + +bool ksu_get_app_profile(struct app_profile *profile) +{ + struct perm_data *p = NULL; + struct list_head *pos = NULL; + bool found = false; + + list_for_each (pos, &allow_list) { + p = list_entry(pos, struct perm_data, list); + bool uid_match = profile->current_uid == p->profile.current_uid; + if (uid_match) { + // found it, override it with ours + memcpy(profile, &p->profile, sizeof(*profile)); + found = true; + goto exit; + } + } + +exit: + return found; +} + +static inline bool forbid_system_uid(uid_t uid) { + #define SHELL_UID 2000 + #define SYSTEM_UID 1000 + return uid < SHELL_UID && uid != SYSTEM_UID; +} + +static bool profile_valid(struct app_profile *profile) +{ + if (!profile) { + return false; + } + + if (forbid_system_uid(profile->current_uid)) { + pr_err("uid lower than 2000 is unsupported: %d\n", profile->current_uid); + return false; + } + + if (profile->version < KSU_APP_PROFILE_VER) { + pr_info("Unsupported profile version: %d\n", profile->version); + return false; + } + + if (profile->allow_su) { + if (profile->rp_config.profile.groups_count > KSU_MAX_GROUPS) { + return false; + } + + if (strlen(profile->rp_config.profile.selinux_domain) == 0) { + return false; + } + } + + return true; +} + +bool ksu_set_app_profile(struct app_profile *profile, bool persist) +{ + struct perm_data *p = NULL; + struct list_head *pos = NULL; + bool result = false; + + if (!profile_valid(profile)) { + pr_err("Failed to set app profile: invalid profile!\n"); + return false; + } + + list_for_each (pos, &allow_list) { + p = list_entry(pos, struct perm_data, list); + // both uid and package must match, otherwise it will break multiple package with different user id + if (profile->current_uid == p->profile.current_uid && + !strcmp(profile->key, p->profile.key)) { + // found it, just override it all! + memcpy(&p->profile, profile, sizeof(*profile)); + result = true; + goto out; + } + } + + // not found, alloc a new node! + p = (struct perm_data *)kmalloc(sizeof(struct perm_data), GFP_KERNEL); + if (!p) { + pr_err("ksu_set_app_profile alloc failed\n"); + return false; + } + + memcpy(&p->profile, profile, sizeof(*profile)); + if (profile->allow_su) { + pr_info("set root profile, key: %s, uid: %d, gid: %d, context: %s\n", + profile->key, profile->current_uid, + profile->rp_config.profile.gid, + profile->rp_config.profile.selinux_domain); + } else { + pr_info("set app profile, key: %s, uid: %d, umount modules: %d\n", + profile->key, profile->current_uid, + profile->nrp_config.profile.umount_modules); + } + list_add_tail(&p->list, &allow_list); + +out: + if (profile->current_uid <= BITMAP_UID_MAX) { + if (profile->allow_su) + allow_list_bitmap[profile->current_uid / BITS_PER_BYTE] |= 1 << (profile->current_uid % BITS_PER_BYTE); + else + allow_list_bitmap[profile->current_uid / BITS_PER_BYTE] &= ~(1 << (profile->current_uid % BITS_PER_BYTE)); + } else { + if (profile->allow_su) { + /* + * 1024 apps with uid higher than BITMAP_UID_MAX + * registered to request superuser? + */ + if (allow_list_pointer >= ARRAY_SIZE(allow_list_arr)) { + pr_err("too many apps registered\n"); + WARN_ON(1); + return false; + } + allow_list_arr[allow_list_pointer++] = profile->current_uid; + } else { + remove_uid_from_arr(profile->current_uid); + } + } + result = true; + + // check if the default profiles is changed, cache it to a single struct to accelerate access. + if (unlikely(!strcmp(profile->key, "$"))) { + // set default non root profile + memcpy(&default_non_root_profile, &profile->nrp_config.profile, + sizeof(default_non_root_profile)); + } + + if (unlikely(!strcmp(profile->key, "#"))) { + // set default root profile + memcpy(&default_root_profile, &profile->rp_config.profile, + sizeof(default_root_profile)); + } + + if (persist) + persistent_allow_list(); + + return result; +} + +bool __ksu_is_allow_uid(uid_t uid) +{ + int i; + + if (unlikely(uid == 0)) { + // already root, but only allow our domain. + return is_ksu_domain(); + } + + if (forbid_system_uid(uid)) { + // do not bother going through the list if it's system + return false; + } + + if (likely(ksu_is_manager_uid_valid()) && unlikely(ksu_get_manager_uid() == uid)) { + // manager is always allowed! + return true; + } + + if (likely(uid <= BITMAP_UID_MAX)) { + return !!(allow_list_bitmap[uid / BITS_PER_BYTE] & (1 << (uid % BITS_PER_BYTE))); + } else { + for (i = 0; i < allow_list_pointer; i++) { + if (allow_list_arr[i] == uid) + return true; + } + } + + return false; +} + +bool ksu_uid_should_umount(uid_t uid) +{ + struct app_profile profile = { .current_uid = uid }; + if (likely(ksu_is_manager_uid_valid()) && unlikely(ksu_get_manager_uid() == uid)) { + // we should not umount on manager! + return false; + } + bool found = ksu_get_app_profile(&profile); + if (!found) { + // no app profile found, it must be non root app + return default_non_root_profile.umount_modules; + } + if (profile.allow_su) { + // if found and it is granted to su, we shouldn't umount for it + return false; + } else { + // found an app profile + if (profile.nrp_config.use_default) { + return default_non_root_profile.umount_modules; + } else { + return profile.nrp_config.profile.umount_modules; + } + } +} + +struct root_profile *ksu_get_root_profile(uid_t uid) +{ + struct perm_data *p = NULL; + struct list_head *pos = NULL; + + list_for_each (pos, &allow_list) { + p = list_entry(pos, struct perm_data, list); + if (uid == p->profile.current_uid && p->profile.allow_su) { + if (!p->profile.rp_config.use_default) { + return &p->profile.rp_config.profile; + } + } + } + + // use default profile + return &default_root_profile; +} + +bool ksu_get_allow_list(int *array, int *length, bool allow) +{ + struct perm_data *p = NULL; + struct list_head *pos = NULL; + int i = 0; + list_for_each (pos, &allow_list) { + p = list_entry(pos, struct perm_data, list); + // pr_info("get_allow_list uid: %d allow: %d\n", p->uid, p->allow); + if (p->profile.allow_su == allow) { + array[i++] = p->profile.current_uid; + } + } + *length = i; + + return true; +} + +void do_save_allow_list(struct work_struct *work) +{ + u32 magic = FILE_MAGIC; + u32 version = FILE_FORMAT_VERSION; + struct perm_data *p = NULL; + struct list_head *pos = NULL; + loff_t off = 0; + + struct file *fp = + ksu_filp_open_compat(KERNEL_SU_ALLOWLIST, O_WRONLY | O_CREAT | O_TRUNC, 0644); + if (IS_ERR(fp)) { + pr_err("save_allow_list create file failed: %ld\n", PTR_ERR(fp)); + return; + } + + // store magic and version + if (ksu_kernel_write_compat(fp, &magic, sizeof(magic), &off) != + sizeof(magic)) { + pr_err("save_allow_list write magic failed.\n"); + goto exit; + } + + if (ksu_kernel_write_compat(fp, &version, sizeof(version), &off) != + sizeof(version)) { + pr_err("save_allow_list write version failed.\n"); + goto exit; + } + + list_for_each (pos, &allow_list) { + p = list_entry(pos, struct perm_data, list); + pr_info("save allow list, name: %s uid :%d, allow: %d\n", + p->profile.key, p->profile.current_uid, + p->profile.allow_su); + + ksu_kernel_write_compat(fp, &p->profile, sizeof(p->profile), + &off); + } + +exit: + filp_close(fp, 0); +} + +void do_load_allow_list(struct work_struct *work) +{ + loff_t off = 0; + ssize_t ret = 0; + struct file *fp = NULL; + u32 magic; + u32 version; + +#ifdef CONFIG_KSU_DEBUG + // always allow adb shell by default + ksu_grant_root_to_shell(); +#endif + + // load allowlist now! + fp = ksu_filp_open_compat(KERNEL_SU_ALLOWLIST, O_RDONLY, 0); + if (IS_ERR(fp)) { + pr_err("load_allow_list open file failed: %ld\n", PTR_ERR(fp)); + return; + } + + // verify magic + if (ksu_kernel_read_compat(fp, &magic, sizeof(magic), &off) != + sizeof(magic) || + magic != FILE_MAGIC) { + pr_err("allowlist file invalid: %d!\n", magic); + goto exit; + } + + if (ksu_kernel_read_compat(fp, &version, sizeof(version), &off) != + sizeof(version)) { + pr_err("allowlist read version: %d failed\n", version); + goto exit; + } + + pr_info("allowlist version: %d\n", version); + + while (true) { + struct app_profile profile; + + ret = ksu_kernel_read_compat(fp, &profile, sizeof(profile), + &off); + + if (ret <= 0) { + pr_info("load_allow_list read err: %zd\n", ret); + break; + } + + pr_info("load_allow_uid, name: %s, uid: %d, allow: %d\n", + profile.key, profile.current_uid, profile.allow_su); + ksu_set_app_profile(&profile, false); + } + +exit: + ksu_show_allow_list(); + filp_close(fp, 0); +} + +void ksu_prune_allowlist(bool (*is_uid_valid)(uid_t, char *, void *), void *data) +{ + struct perm_data *np = NULL; + struct perm_data *n = NULL; + + bool modified = false; + // TODO: use RCU! + mutex_lock(&allowlist_mutex); + list_for_each_entry_safe (np, n, &allow_list, list) { + uid_t uid = np->profile.current_uid; + char *package = np->profile.key; + // we use this uid for special cases, don't prune it! + bool is_preserved_uid = uid == KSU_APP_PROFILE_PRESERVE_UID; + if (!is_preserved_uid && !is_uid_valid(uid, package, data)) { + modified = true; + pr_info("prune uid: %d, package: %s\n", uid, package); + list_del(&np->list); + if (likely(uid <= BITMAP_UID_MAX)) { + allow_list_bitmap[uid / BITS_PER_BYTE] &= ~(1 << (uid % BITS_PER_BYTE)); + } + remove_uid_from_arr(uid); + smp_mb(); + kfree(np); + } + } + mutex_unlock(&allowlist_mutex); + + if (modified) { + persistent_allow_list(); + } +} + +// make sure allow list works cross boot +bool persistent_allow_list(void) +{ + return ksu_queue_work(&ksu_save_work); +} + +bool ksu_load_allow_list(void) +{ + return ksu_queue_work(&ksu_load_work); +} + +void ksu_allowlist_init(void) +{ + int i; + + BUILD_BUG_ON(sizeof(allow_list_bitmap) != PAGE_SIZE); + BUILD_BUG_ON(sizeof(allow_list_arr) != PAGE_SIZE); + + for (i = 0; i < ARRAY_SIZE(allow_list_arr); i++) + allow_list_arr[i] = -1; + + INIT_LIST_HEAD(&allow_list); + + INIT_WORK(&ksu_save_work, do_save_allow_list); + INIT_WORK(&ksu_load_work, do_load_allow_list); + + init_default_profiles(); +} + +void ksu_allowlist_exit(void) +{ + struct perm_data *np = NULL; + struct perm_data *n = NULL; + + do_save_allow_list(NULL); + + // free allowlist + mutex_lock(&allowlist_mutex); + list_for_each_entry_safe (np, n, &allow_list, list) { + list_del(&np->list); + kfree(np); + } + mutex_unlock(&allowlist_mutex); +} diff --git a/KernelSU/kernel/allowlist.h b/KernelSU/kernel/allowlist.h new file mode 100644 index 000000000000..e89bf71fa10c --- /dev/null +++ b/KernelSU/kernel/allowlist.h @@ -0,0 +1,27 @@ +#ifndef __KSU_H_ALLOWLIST +#define __KSU_H_ALLOWLIST + +#include +#include "ksu.h" + +void ksu_allowlist_init(void); + +void ksu_allowlist_exit(void); + +bool ksu_load_allow_list(void); + +void ksu_show_allow_list(void); + +bool __ksu_is_allow_uid(uid_t uid); +#define ksu_is_allow_uid(uid) unlikely(__ksu_is_allow_uid(uid)) + +bool ksu_get_allow_list(int *array, int *length, bool allow); + +void ksu_prune_allowlist(bool (*is_uid_exist)(uid_t, char *, void *), void *data); + +bool ksu_get_app_profile(struct app_profile *); +bool ksu_set_app_profile(struct app_profile *, bool persist); + +bool ksu_uid_should_umount(uid_t uid); +struct root_profile *ksu_get_root_profile(uid_t uid); +#endif diff --git a/KernelSU/kernel/apk_sign.c b/KernelSU/kernel/apk_sign.c new file mode 100644 index 000000000000..ba8b73f2eb2b --- /dev/null +++ b/KernelSU/kernel/apk_sign.c @@ -0,0 +1,320 @@ +#include +#include +#include +#include +#include +#include +#ifdef CONFIG_KSU_DEBUG +#include +#endif +#include +#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 11, 0) +#include +#else +#include +#endif + +#include "apk_sign.h" +#include "klog.h" // IWYU pragma: keep +#include "kernel_compat.h" + + +struct sdesc { + struct shash_desc shash; + char ctx[]; +}; + +static struct sdesc *init_sdesc(struct crypto_shash *alg) +{ + struct sdesc *sdesc; + int size; + + size = sizeof(struct shash_desc) + crypto_shash_descsize(alg); + sdesc = kmalloc(size, GFP_KERNEL); + if (!sdesc) + return ERR_PTR(-ENOMEM); + sdesc->shash.tfm = alg; + return sdesc; +} + +static int calc_hash(struct crypto_shash *alg, const unsigned char *data, + unsigned int datalen, unsigned char *digest) +{ + struct sdesc *sdesc; + int ret; + + sdesc = init_sdesc(alg); + if (IS_ERR(sdesc)) { + pr_info("can't alloc sdesc\n"); + return PTR_ERR(sdesc); + } + + ret = crypto_shash_digest(&sdesc->shash, data, datalen, digest); + kfree(sdesc); + return ret; +} + +static int ksu_sha256(const unsigned char *data, unsigned int datalen, + unsigned char *digest) +{ + struct crypto_shash *alg; + char *hash_alg_name = "sha256"; + int ret; + + alg = crypto_alloc_shash(hash_alg_name, 0, 0); + if (IS_ERR(alg)) { + pr_info("can't alloc alg %s\n", hash_alg_name); + return PTR_ERR(alg); + } + ret = calc_hash(alg, data, datalen, digest); + crypto_free_shash(alg); + return ret; +} + +static bool check_block(struct file *fp, u32 *size4, loff_t *pos, u32 *offset, + unsigned expected_size, const char *expected_sha256) +{ + ksu_kernel_read_compat(fp, size4, 0x4, pos); // signer-sequence length + ksu_kernel_read_compat(fp, size4, 0x4, pos); // signer length + ksu_kernel_read_compat(fp, size4, 0x4, pos); // signed data length + + *offset += 0x4 * 3; + + ksu_kernel_read_compat(fp, size4, 0x4, pos); // digests-sequence length + + *pos += *size4; + *offset += 0x4 + *size4; + + ksu_kernel_read_compat(fp, size4, 0x4, pos); // certificates length + ksu_kernel_read_compat(fp, size4, 0x4, pos); // certificate length + *offset += 0x4 * 2; + + if (*size4 == expected_size) { + *offset += *size4; + +#define CERT_MAX_LENGTH 1024 + char cert[CERT_MAX_LENGTH]; + if (*size4 > CERT_MAX_LENGTH) { + pr_info("cert length overlimit\n"); + return false; + } + ksu_kernel_read_compat(fp, cert, *size4, pos); + unsigned char digest[SHA256_DIGEST_SIZE]; + if (IS_ERR(ksu_sha256(cert, *size4, digest))) { + pr_info("sha256 error\n"); + return false; + } + + char hash_str[SHA256_DIGEST_SIZE * 2 + 1]; + hash_str[SHA256_DIGEST_SIZE * 2] = '\0'; + + bin2hex(hash_str, digest, SHA256_DIGEST_SIZE); + pr_info("sha256: %s, expected: %s\n", hash_str, + expected_sha256); + if (strcmp(expected_sha256, hash_str) == 0) { + return true; + } + } + return false; +} + +struct zip_entry_header { + uint32_t signature; + uint16_t version; + uint16_t flags; + uint16_t compression; + uint16_t mod_time; + uint16_t mod_date; + uint32_t crc32; + uint32_t compressed_size; + uint32_t uncompressed_size; + uint16_t file_name_length; + uint16_t extra_field_length; +} __attribute__((packed)); + +// This is a necessary but not sufficient condition, but it is enough for us +static bool has_v1_signature_file(struct file *fp) +{ + struct zip_entry_header header; + const char MANIFEST[] = "META-INF/MANIFEST.MF"; + + loff_t pos = 0; + + while (ksu_kernel_read_compat(fp, &header, + sizeof(struct zip_entry_header), &pos) == + sizeof(struct zip_entry_header)) { + if (header.signature != 0x04034b50) { + // ZIP magic: 'PK' + return false; + } + // Read the entry file name + if (header.file_name_length == sizeof(MANIFEST) - 1) { + char fileName[sizeof(MANIFEST)]; + ksu_kernel_read_compat(fp, fileName, + header.file_name_length, &pos); + fileName[header.file_name_length] = '\0'; + + // Check if the entry matches META-INF/MANIFEST.MF + if (strncmp(MANIFEST, fileName, sizeof(MANIFEST) - 1) == + 0) { + return true; + } + } else { + // Skip the entry file name + pos += header.file_name_length; + } + + // Skip to the next entry + pos += header.extra_field_length + header.compressed_size; + } + + return false; +} + +static __always_inline bool check_v2_signature(char *path, + unsigned expected_size, + const char *expected_sha256) +{ + unsigned char buffer[0x11] = { 0 }; + u32 size4; + u64 size8, size_of_block; + + loff_t pos; + + bool v2_signing_valid = false; + int v2_signing_blocks = 0; + bool v3_signing_exist = false; + bool v3_1_signing_exist = false; + + int i; + struct file *fp = ksu_filp_open_compat(path, O_RDONLY, 0); + if (IS_ERR(fp)) { + pr_err("open %s error.\n", path); + return false; + } + + // disable inotify for this file + fp->f_mode |= FMODE_NONOTIFY; + + // https://en.wikipedia.org/wiki/Zip_(file_format)#End_of_central_directory_record_(EOCD) + for (i = 0;; ++i) { + unsigned short n; + pos = generic_file_llseek(fp, -i - 2, SEEK_END); + ksu_kernel_read_compat(fp, &n, 2, &pos); + if (n == i) { + pos -= 22; + ksu_kernel_read_compat(fp, &size4, 4, &pos); + if ((size4 ^ 0xcafebabeu) == 0xccfbf1eeu) { + break; + } + } + if (i == 0xffff) { + pr_info("error: cannot find eocd\n"); + goto clean; + } + } + + pos += 12; + // offset + ksu_kernel_read_compat(fp, &size4, 0x4, &pos); + pos = size4 - 0x18; + + ksu_kernel_read_compat(fp, &size8, 0x8, &pos); + ksu_kernel_read_compat(fp, buffer, 0x10, &pos); + if (strcmp((char *)buffer, "APK Sig Block 42")) { + goto clean; + } + + pos = size4 - (size8 + 0x8); + ksu_kernel_read_compat(fp, &size_of_block, 0x8, &pos); + if (size_of_block != size8) { + goto clean; + } + + int loop_count = 0; + while (loop_count++ < 10) { + uint32_t id; + uint32_t offset; + ksu_kernel_read_compat(fp, &size8, 0x8, + &pos); // sequence length + if (size8 == size_of_block) { + break; + } + ksu_kernel_read_compat(fp, &id, 0x4, &pos); // id + offset = 4; + if (id == 0x7109871au) { + v2_signing_blocks++; + v2_signing_valid = + check_block(fp, &size4, &pos, &offset, + expected_size, expected_sha256); + } else if (id == 0xf05368c0u) { + // http://aospxref.com/android-14.0.0_r2/xref/frameworks/base/core/java/android/util/apk/ApkSignatureSchemeV3Verifier.java#73 + v3_signing_exist = true; + } else if (id == 0x1b93ad61u) { + // http://aospxref.com/android-14.0.0_r2/xref/frameworks/base/core/java/android/util/apk/ApkSignatureSchemeV3Verifier.java#74 + v3_1_signing_exist = true; + } else { +#ifdef CONFIG_KSU_DEBUG + pr_info("Unknown id: 0x%08x\n", id); +#endif + } + pos += (size8 - offset); + } + + if (v2_signing_blocks != 1) { +#ifdef CONFIG_KSU_DEBUG + pr_err("Unexpected v2 signature count: %d\n", + v2_signing_blocks); +#endif + v2_signing_valid = false; + } + + if (v2_signing_valid) { + int has_v1_signing = has_v1_signature_file(fp); + if (has_v1_signing) { + pr_err("Unexpected v1 signature scheme found!\n"); + filp_close(fp, 0); + return false; + } + } +clean: + filp_close(fp, 0); + + if (v3_signing_exist || v3_1_signing_exist) { +#ifdef CONFIG_KSU_DEBUG + pr_err("Unexpected v3 signature scheme found!\n"); +#endif + return false; + } + + return v2_signing_valid; +} + +#ifdef CONFIG_KSU_DEBUG + +int ksu_debug_manager_uid = -1; + +#include "manager.h" + +static int set_expected_size(const char *val, const struct kernel_param *kp) +{ + int rv = param_set_uint(val, kp); + ksu_set_manager_uid(ksu_debug_manager_uid); + pr_info("ksu_manager_uid set to %d\n", ksu_debug_manager_uid); + return rv; +} + +static struct kernel_param_ops expected_size_ops = { + .set = set_expected_size, + .get = param_get_uint, +}; + +module_param_cb(ksu_debug_manager_uid, &expected_size_ops, + &ksu_debug_manager_uid, S_IRUSR | S_IWUSR); + +#endif + +bool is_manager_apk(char *path) +{ + return check_v2_signature(path, EXPECTED_SIZE, EXPECTED_HASH); +} \ No newline at end of file diff --git a/KernelSU/kernel/apk_sign.h b/KernelSU/kernel/apk_sign.h new file mode 100644 index 000000000000..bed501c49264 --- /dev/null +++ b/KernelSU/kernel/apk_sign.h @@ -0,0 +1,8 @@ +#ifndef __KSU_H_APK_V2_SIGN +#define __KSU_H_APK_V2_SIGN + +#include + +bool is_manager_apk(char *path); + +#endif diff --git a/KernelSU/kernel/arch.h b/KernelSU/kernel/arch.h new file mode 100644 index 000000000000..f36ec5f509fa --- /dev/null +++ b/KernelSU/kernel/arch.h @@ -0,0 +1,92 @@ +#ifndef __KSU_H_ARCH +#define __KSU_H_ARCH + +#include + +#if defined(__aarch64__) + +#define __PT_PARM1_REG regs[0] +#define __PT_PARM2_REG regs[1] +#define __PT_PARM3_REG regs[2] +#define __PT_SYSCALL_PARM4_REG regs[3] +#define __PT_CCALL_PARM4_REG regs[3] +#define __PT_PARM5_REG regs[4] +#define __PT_PARM6_REG regs[5] +#define __PT_RET_REG regs[30] +#define __PT_FP_REG regs[29] /* Works only with CONFIG_FRAME_POINTER */ +#define __PT_RC_REG regs[0] +#define __PT_SP_REG sp +#define __PT_IP_REG pc + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 16, 0) +#define PRCTL_SYMBOL "__arm64_sys_prctl" +#define SYS_READ_SYMBOL "__arm64_sys_read" +#define SYS_NEWFSTATAT_SYMBOL "__arm64_sys_newfstatat" +#define SYS_FACCESSAT_SYMBOL "__arm64_sys_faccessat" +#define SYS_EXECVE_SYMBOL "__arm64_sys_execve" +#else +#define PRCTL_SYMBOL "sys_prctl" +#define SYS_READ_SYMBOL "sys_read" +#define SYS_NEWFSTATAT_SYMBOL "sys_newfstatat" +#define SYS_FACCESSAT_SYMBOL "sys_faccessat" +#define SYS_EXECVE_SYMBOL "sys_execve" +#endif + +#elif defined(__x86_64__) + +#define __PT_PARM1_REG di +#define __PT_PARM2_REG si +#define __PT_PARM3_REG dx +/* syscall uses r10 for PARM4 */ +#define __PT_SYSCALL_PARM4_REG r10 +#define __PT_CCALL_PARM4_REG cx +#define __PT_PARM5_REG r8 +#define __PT_PARM6_REG r9 +#define __PT_RET_REG sp +#define __PT_FP_REG bp +#define __PT_RC_REG ax +#define __PT_SP_REG sp +#define __PT_IP_REG ip +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 16, 0) +#define PRCTL_SYMBOL "__x64_sys_prctl" +#define SYS_READ_SYMBOL "__x64_sys_read" +#define SYS_NEWFSTATAT_SYMBOL "__x64_sys_newfstatat" +#define SYS_FACCESSAT_SYMBOL "__x64_sys_faccessat" +#define SYS_EXECVE_SYMBOL "__x64_sys_execve" +#else +#define PRCTL_SYMBOL "sys_prctl" +#define SYS_READ_SYMBOL "sys_read" +#define SYS_NEWFSTATAT_SYMBOL "sys_newfstatat" +#define SYS_FACCESSAT_SYMBOL "sys_faccessat" +#define SYS_EXECVE_SYMBOL "sys_execve" +#endif + +#else +#error "Unsupported arch" +#endif + +/* allow some architecutres to override `struct pt_regs` */ +#ifndef __PT_REGS_CAST +#define __PT_REGS_CAST(x) (x) +#endif + +#define PT_REGS_PARM1(x) (__PT_REGS_CAST(x)->__PT_PARM1_REG) +#define PT_REGS_PARM2(x) (__PT_REGS_CAST(x)->__PT_PARM2_REG) +#define PT_REGS_PARM3(x) (__PT_REGS_CAST(x)->__PT_PARM3_REG) +#define PT_REGS_SYSCALL_PARM4(x) (__PT_REGS_CAST(x)->__PT_SYSCALL_PARM4_REG) +#define PT_REGS_CCALL_PARM4(x) (__PT_REGS_CAST(x)->__PT_CCALL_PARM4_REG) +#define PT_REGS_PARM5(x) (__PT_REGS_CAST(x)->__PT_PARM5_REG) +#define PT_REGS_PARM6(x) (__PT_REGS_CAST(x)->__PT_PARM6_REG) +#define PT_REGS_RET(x) (__PT_REGS_CAST(x)->__PT_RET_REG) +#define PT_REGS_FP(x) (__PT_REGS_CAST(x)->__PT_FP_REG) +#define PT_REGS_RC(x) (__PT_REGS_CAST(x)->__PT_RC_REG) +#define PT_REGS_SP(x) (__PT_REGS_CAST(x)->__PT_SP_REG) +#define PT_REGS_IP(x) (__PT_REGS_CAST(x)->__PT_IP_REG) + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 16, 0) +#define PT_REAL_REGS(regs) ((struct pt_regs *)PT_REGS_PARM1(regs)) +#else +#define PT_REAL_REGS(regs) ((regs)) +#endif + +#endif diff --git a/KernelSU/kernel/core_hook.c b/KernelSU/kernel/core_hook.c new file mode 100644 index 000000000000..429ba3306ea3 --- /dev/null +++ b/KernelSU/kernel/core_hook.c @@ -0,0 +1,856 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#ifdef MODULE +#include +#include +#include +#include +#include +#endif + +#include "allowlist.h" +#include "arch.h" +#include "core_hook.h" +#include "klog.h" // IWYU pragma: keep +#include "ksu.h" +#include "ksud.h" +#include "manager.h" +#include "selinux/selinux.h" +#include "throne_tracker.h" +#include "throne_tracker.h" +#include "kernel_compat.h" + +static bool ksu_module_mounted = false; + +extern int handle_sepolicy(unsigned long arg3, void __user *arg4); + +static inline bool is_allow_su() +{ + if (is_manager()) { + // we are manager, allow! + return true; + } + return ksu_is_allow_uid(current_uid().val); +} + +static inline bool is_unsupported_uid(uid_t uid) +{ +#define LAST_APPLICATION_UID 19999 + uid_t appid = uid % 100000; + return appid > LAST_APPLICATION_UID; +} + +static struct group_info root_groups = { .usage = ATOMIC_INIT(2) }; + +static void setup_groups(struct root_profile *profile, struct cred *cred) +{ + if (profile->groups_count > KSU_MAX_GROUPS) { + pr_warn("Failed to setgroups, too large group: %d!\n", + profile->uid); + return; + } + + if (profile->groups_count == 1 && profile->groups[0] == 0) { + // setgroup to root and return early. + if (cred->group_info) + put_group_info(cred->group_info); + cred->group_info = get_group_info(&root_groups); + return; + } + + u32 ngroups = profile->groups_count; + struct group_info *group_info = groups_alloc(ngroups); + if (!group_info) { + pr_warn("Failed to setgroups, ENOMEM for: %d\n", profile->uid); + return; + } + + int i; + for (i = 0; i < ngroups; i++) { + gid_t gid = profile->groups[i]; + kgid_t kgid = make_kgid(current_user_ns(), gid); + if (!gid_valid(kgid)) { + pr_warn("Failed to setgroups, invalid gid: %d\n", gid); + put_group_info(group_info); + return; + } +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 9, 0) + group_info->gid[i] = kgid; +#else + GROUP_AT(group_info, i) = kgid; +#endif + } + + groups_sort(group_info); + set_groups(cred, group_info); +} + +void escape_to_root(void) +{ + struct cred *cred; + + cred = (struct cred *)__task_cred(current); + + if (cred->euid.val == 0) { + pr_warn("Already root, don't escape!\n"); + return; + } + struct root_profile *profile = ksu_get_root_profile(cred->uid.val); + + cred->uid.val = profile->uid; + cred->suid.val = profile->uid; + cred->euid.val = profile->uid; + cred->fsuid.val = profile->uid; + + cred->gid.val = profile->gid; + cred->fsgid.val = profile->gid; + cred->sgid.val = profile->gid; + cred->egid.val = profile->gid; + + BUILD_BUG_ON(sizeof(profile->capabilities.effective) != + sizeof(kernel_cap_t)); + + // setup capabilities + // we need CAP_DAC_READ_SEARCH becuase `/data/adb/ksud` is not accessible for non root process + // we add it here but don't add it to cap_inhertiable, it would be dropped automaticly after exec! + u64 cap_for_ksud = + profile->capabilities.effective | CAP_DAC_READ_SEARCH; + memcpy(&cred->cap_effective, &cap_for_ksud, + sizeof(cred->cap_effective)); + memcpy(&cred->cap_inheritable, &profile->capabilities.effective, + sizeof(cred->cap_inheritable)); + memcpy(&cred->cap_permitted, &profile->capabilities.effective, + sizeof(cred->cap_permitted)); + memcpy(&cred->cap_bset, &profile->capabilities.effective, + sizeof(cred->cap_bset)); + memcpy(&cred->cap_ambient, &profile->capabilities.effective, + sizeof(cred->cap_ambient)); + + // disable seccomp +#if defined(CONFIG_GENERIC_ENTRY) && \ + LINUX_VERSION_CODE >= KERNEL_VERSION(5, 11, 0) + current_thread_info()->syscall_work &= ~SYSCALL_WORK_SECCOMP; +#else + current_thread_info()->flags &= ~(TIF_SECCOMP | _TIF_SECCOMP); +#endif + +#ifdef CONFIG_SECCOMP + current->seccomp.mode = 0; + current->seccomp.filter = NULL; +#else +#endif + + setup_groups(profile, cred); + + setup_selinux(profile->selinux_domain); +} + +int ksu_handle_rename(struct dentry *old_dentry, struct dentry *new_dentry) +{ + if (!current->mm) { + // skip kernel threads + return 0; + } + + if (current_uid().val != 1000) { + // skip non system uid + return 0; + } + + if (!old_dentry || !new_dentry) { + return 0; + } + + // /data/system/packages.list.tmp -> /data/system/packages.list + if (strcmp(new_dentry->d_iname, "packages.list")) { + return 0; + } + + char path[128]; + char *buf = dentry_path_raw(new_dentry, path, sizeof(path)); + if (IS_ERR(buf)) { + pr_err("dentry_path_raw failed.\n"); + return 0; + } + + if (strcmp(buf, "/system/packages.list")) { + return 0; + } + pr_info("renameat: %s -> %s, new path: %s\n", old_dentry->d_iname, + new_dentry->d_iname, buf); + + track_throne(); + + return 0; +} + +int ksu_handle_prctl(int option, unsigned long arg2, unsigned long arg3, + unsigned long arg4, unsigned long arg5) +{ + // if success, we modify the arg5 as result! + u32 *result = (u32 *)arg5; + u32 reply_ok = KERNEL_SU_OPTION; + + if (KERNEL_SU_OPTION != option) { + return 0; + } + + // TODO: find it in throne tracker! + uid_t current_uid_val = current_uid().val; + uid_t manager_uid = ksu_get_manager_uid(); + if (current_uid_val != manager_uid && + current_uid_val % 100000 == manager_uid) { + ksu_set_manager_uid(current_uid_val); + } + + bool from_root = 0 == current_uid().val; + bool from_manager = is_manager(); + + if (!from_root && !from_manager) { + // only root or manager can access this interface + return 0; + } + +#ifdef CONFIG_KSU_DEBUG + pr_info("option: 0x%x, cmd: %ld\n", option, arg2); +#endif + + if (arg2 == CMD_BECOME_MANAGER) { + if (from_manager) { + if (copy_to_user(result, &reply_ok, sizeof(reply_ok))) { + pr_err("become_manager: prctl reply error\n"); + } + return 0; + } + return 0; + } + + if (arg2 == CMD_GRANT_ROOT) { + if (is_allow_su()) { + pr_info("allow root for: %d\n", current_uid().val); + escape_to_root(); + if (copy_to_user(result, &reply_ok, sizeof(reply_ok))) { + pr_err("grant_root: prctl reply error\n"); + } + } + return 0; + } + + // Both root manager and root processes should be allowed to get version + if (arg2 == CMD_GET_VERSION) { + u32 version = KERNEL_SU_VERSION; + if (copy_to_user(arg3, &version, sizeof(version))) { + pr_err("prctl reply error, cmd: %lu\n", arg2); + } +#ifdef MODULE + u32 is_lkm = 0x1; +#else + u32 is_lkm = 0x0; +#endif + if (arg4 && copy_to_user(arg4, &is_lkm, sizeof(is_lkm))) { + pr_err("prctl reply error, cmd: %lu\n", arg2); + } + return 0; + } + + if (arg2 == CMD_REPORT_EVENT) { + if (!from_root) { + return 0; + } + switch (arg3) { + case EVENT_POST_FS_DATA: { + static bool post_fs_data_lock = false; + if (!post_fs_data_lock) { + post_fs_data_lock = true; + pr_info("post-fs-data triggered\n"); + on_post_fs_data(); + } + break; + } + case EVENT_BOOT_COMPLETED: { + static bool boot_complete_lock = false; + if (!boot_complete_lock) { + boot_complete_lock = true; + pr_info("boot_complete triggered\n"); + } + break; + } + case EVENT_MODULE_MOUNTED: { + ksu_module_mounted = true; + pr_info("module mounted!\n"); + break; + } + default: + break; + } + return 0; + } + + if (arg2 == CMD_SET_SEPOLICY) { + if (!from_root) { + return 0; + } + if (!handle_sepolicy(arg3, arg4)) { + if (copy_to_user(result, &reply_ok, sizeof(reply_ok))) { + pr_err("sepolicy: prctl reply error\n"); + } + } + + return 0; + } + + if (arg2 == CMD_CHECK_SAFEMODE) { + if (ksu_is_safe_mode()) { + pr_warn("safemode enabled!\n"); + if (copy_to_user(result, &reply_ok, sizeof(reply_ok))) { + pr_err("safemode: prctl reply error\n"); + } + } + return 0; + } + + if (arg2 == CMD_GET_ALLOW_LIST || arg2 == CMD_GET_DENY_LIST) { + u32 array[128]; + u32 array_length; + bool success = ksu_get_allow_list(array, &array_length, + arg2 == CMD_GET_ALLOW_LIST); + if (success) { + if (!copy_to_user(arg4, &array_length, + sizeof(array_length)) && + !copy_to_user(arg3, array, + sizeof(u32) * array_length)) { + if (copy_to_user(result, &reply_ok, + sizeof(reply_ok))) { + pr_err("prctl reply error, cmd: %lu\n", + arg2); + } + } else { + pr_err("prctl copy allowlist error\n"); + } + } + return 0; + } + + if (arg2 == CMD_UID_GRANTED_ROOT || arg2 == CMD_UID_SHOULD_UMOUNT) { + uid_t target_uid = (uid_t)arg3; + bool allow = false; + if (arg2 == CMD_UID_GRANTED_ROOT) { + allow = ksu_is_allow_uid(target_uid); + } else if (arg2 == CMD_UID_SHOULD_UMOUNT) { + allow = ksu_uid_should_umount(target_uid); + } else { + pr_err("unknown cmd: %lu\n", arg2); + } + if (!copy_to_user(arg4, &allow, sizeof(allow))) { + if (copy_to_user(result, &reply_ok, sizeof(reply_ok))) { + pr_err("prctl reply error, cmd: %lu\n", arg2); + } + } else { + pr_err("prctl copy err, cmd: %lu\n", arg2); + } + return 0; + } + + // all other cmds are for 'root manager' + if (!from_manager) { + return 0; + } + + // we are already manager + if (arg2 == CMD_GET_APP_PROFILE) { + struct app_profile profile; + if (copy_from_user(&profile, arg3, sizeof(profile))) { + pr_err("copy profile failed\n"); + return 0; + } + + bool success = ksu_get_app_profile(&profile); + if (success) { + if (copy_to_user(arg3, &profile, sizeof(profile))) { + pr_err("copy profile failed\n"); + return 0; + } + if (copy_to_user(result, &reply_ok, sizeof(reply_ok))) { + pr_err("prctl reply error, cmd: %lu\n", arg2); + } + } + return 0; + } + + if (arg2 == CMD_SET_APP_PROFILE) { + struct app_profile profile; + if (copy_from_user(&profile, arg3, sizeof(profile))) { + pr_err("copy profile failed\n"); + return 0; + } + + // todo: validate the params + if (ksu_set_app_profile(&profile, true)) { + if (copy_to_user(result, &reply_ok, sizeof(reply_ok))) { + pr_err("prctl reply error, cmd: %lu\n", arg2); + } + } + return 0; + } + + return 0; +} + +static bool is_appuid(kuid_t uid) +{ +#define PER_USER_RANGE 100000 +#define FIRST_APPLICATION_UID 10000 +#define LAST_APPLICATION_UID 19999 + + uid_t appid = uid.val % PER_USER_RANGE; + return appid >= FIRST_APPLICATION_UID && appid <= LAST_APPLICATION_UID; +} + +static bool should_umount(struct path *path) +{ + if (!path) { + return false; + } + + if (current->nsproxy->mnt_ns == init_nsproxy.mnt_ns) { + pr_info("ignore global mnt namespace process: %d\n", + current_uid().val); + return false; + } + + if (path->mnt && path->mnt->mnt_sb && path->mnt->mnt_sb->s_type) { + const char *fstype = path->mnt->mnt_sb->s_type->name; + return strcmp(fstype, "overlay") == 0; + } + return false; +} + +static int ksu_umount_mnt(struct path *path, int flags) +{ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 9, 0) || defined(KSU_UMOUNT) + return path_umount(path, flags); +#else + // TODO: umount for non GKI kernel + return -ENOSYS; +#endif +} + +static void try_umount(const char *mnt, bool check_mnt, int flags) +{ + struct path path; + int err = kern_path(mnt, 0, &path); + if (err) { + return; + } + + if (path.dentry != path.mnt->mnt_root) { + // it is not root mountpoint, maybe umounted by others already. + return; + } + + // we are only interest in some specific mounts + if (check_mnt && !should_umount(&path)) { + return; + } + + err = ksu_umount_mnt(&path, flags); + if (err) { + pr_warn("umount %s failed: %d\n", mnt, err); + } +} + +int ksu_handle_setuid(struct cred *new, const struct cred *old) +{ + // this hook is used for umounting overlayfs for some uid, if there isn't any module mounted, just ignore it! + if (!ksu_module_mounted) { + return 0; + } + + if (!new || !old) { + return 0; + } + + kuid_t new_uid = new->uid; + kuid_t old_uid = old->uid; + + if (0 != old_uid.val) { + // old process is not root, ignore it. + return 0; + } + + if (!is_appuid(new_uid) || is_unsupported_uid(new_uid.val)) { + // pr_info("handle setuid ignore non application or isolated uid: %d\n", new_uid.val); + return 0; + } + + if (ksu_is_allow_uid(new_uid.val)) { + // pr_info("handle setuid ignore allowed application: %d\n", new_uid.val); + return 0; + } + + if (!ksu_uid_should_umount(new_uid.val)) { + return 0; + } else { +#ifdef CONFIG_KSU_DEBUG + pr_info("uid: %d should not umount!\n", current_uid().val); +#endif + } + + // check old process's selinux context, if it is not zygote, ignore it! + // because some su apps may setuid to untrusted_app but they are in global mount namespace + // when we umount for such process, that is a disaster! + bool is_zygote_child = is_zygote(old->security); + if (!is_zygote_child) { + pr_info("handle umount ignore non zygote child: %d\n", + current->pid); + return 0; + } +#ifdef CONFIG_KSU_DEBUG + // umount the target mnt + pr_info("handle umount for uid: %d, pid: %d\n", new_uid.val, + current->pid); +#endif + + // fixme: use `collect_mounts` and `iterate_mount` to iterate all mountpoint and + // filter the mountpoint whose target is `/data/adb` + try_umount("/system", true, 0); + try_umount("/vendor", true, 0); + try_umount("/product", true, 0); + try_umount("/data/adb/modules", false, MNT_DETACH); + + // try umount ksu temp path + try_umount("/debug_ramdisk", false, MNT_DETACH); + try_umount("/sbin", false, MNT_DETACH); + + return 0; +} + +// Init functons + +static int handler_pre(struct kprobe *p, struct pt_regs *regs) +{ + struct pt_regs *real_regs = PT_REAL_REGS(regs); + int option = (int)PT_REGS_PARM1(real_regs); + unsigned long arg2 = (unsigned long)PT_REGS_PARM2(real_regs); + unsigned long arg3 = (unsigned long)PT_REGS_PARM3(real_regs); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 16, 0) + // PRCTL_SYMBOL is the arch-specificed one, which receive raw pt_regs from syscall + unsigned long arg4 = (unsigned long)PT_REGS_SYSCALL_PARM4(real_regs); +#else + // PRCTL_SYMBOL is the common one, called by C convention in do_syscall_64 + // https://elixir.bootlin.com/linux/v4.15.18/source/arch/x86/entry/common.c#L287 + unsigned long arg4 = (unsigned long)PT_REGS_CCALL_PARM4(real_regs); +#endif + unsigned long arg5 = (unsigned long)PT_REGS_PARM5(real_regs); + + return ksu_handle_prctl(option, arg2, arg3, arg4, arg5); +} + +static struct kprobe prctl_kp = { + .symbol_name = PRCTL_SYMBOL, + .pre_handler = handler_pre, +}; + +static int renameat_handler_pre(struct kprobe *p, struct pt_regs *regs) +{ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 12, 0) + // https://elixir.bootlin.com/linux/v5.12-rc1/source/include/linux/fs.h + struct renamedata *rd = PT_REGS_PARM1(regs); + struct dentry *old_entry = rd->old_dentry; + struct dentry *new_entry = rd->new_dentry; +#else + struct dentry *old_entry = (struct dentry *)PT_REGS_PARM2(regs); + struct dentry *new_entry = (struct dentry *)PT_REGS_CCALL_PARM4(regs); +#endif + + return ksu_handle_rename(old_entry, new_entry); +} + +static struct kprobe renameat_kp = { + .symbol_name = "vfs_rename", + .pre_handler = renameat_handler_pre, +}; + +__maybe_unused int ksu_kprobe_init(void) +{ + int rc = 0; + rc = register_kprobe(&prctl_kp); + + if (rc) { + pr_info("prctl kprobe failed: %d.\n", rc); + return rc; + } + + rc = register_kprobe(&renameat_kp); + pr_info("renameat kp: %d\n", rc); + + return rc; +} + +__maybe_unused int ksu_kprobe_exit(void) +{ + unregister_kprobe(&prctl_kp); + unregister_kprobe(&renameat_kp); + return 0; +} + +static int ksu_task_prctl(int option, unsigned long arg2, unsigned long arg3, + unsigned long arg4, unsigned long arg5) +{ + ksu_handle_prctl(option, arg2, arg3, arg4, arg5); + return -ENOSYS; +} +// kernel 4.4 and 4.9 +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 10, 0) || defined(CONFIG_IS_HW_HISI) +static int ksu_key_permission(key_ref_t key_ref, const struct cred *cred, + unsigned perm) +{ + if (init_session_keyring != NULL) { + return 0; + } + if (strcmp(current->comm, "init")) { + // we are only interested in `init` process + return 0; + } + init_session_keyring = cred->session_keyring; + pr_info("kernel_compat: got init_session_keyring\n"); + return 0; +} +#endif +static int ksu_inode_rename(struct inode *old_inode, struct dentry *old_dentry, + struct inode *new_inode, struct dentry *new_dentry) +{ + return ksu_handle_rename(old_dentry, new_dentry); +} + +static int ksu_task_fix_setuid(struct cred *new, const struct cred *old, + int flags) +{ + return ksu_handle_setuid(new, old); +} + +#ifndef MODULE +static struct security_hook_list ksu_hooks[] = { + LSM_HOOK_INIT(task_prctl, ksu_task_prctl), + LSM_HOOK_INIT(inode_rename, ksu_inode_rename), + LSM_HOOK_INIT(task_fix_setuid, ksu_task_fix_setuid), +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 10, 0) || defined(CONFIG_IS_HW_HISI) + LSM_HOOK_INIT(key_permission, ksu_key_permission) +#endif +}; + +void __init ksu_lsm_hook_init(void) +{ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0) + security_add_hooks(ksu_hooks, ARRAY_SIZE(ksu_hooks), "ksu"); +#else + // https://elixir.bootlin.com/linux/v4.10.17/source/include/linux/lsm_hooks.h#L1892 + security_add_hooks(ksu_hooks, ARRAY_SIZE(ksu_hooks)); +#endif +} + +#else +static int override_security_head(void *head, const void *new_head, size_t len) +{ + unsigned long base = (unsigned long)head & PAGE_MASK; + unsigned long offset = offset_in_page(head); + + // this is impossible for our case because the page alignment + // but be careful for other cases! + BUG_ON(offset + len > PAGE_SIZE); + struct page *page = phys_to_page(__pa(base)); + if (!page) { + return -EFAULT; + } + + void *addr = vmap(&page, 1, VM_MAP, PAGE_KERNEL); + if (!addr) { + return -ENOMEM; + } + local_irq_disable(); + memcpy(addr + offset, new_head, len); + local_irq_enable(); + vunmap(addr); + return 0; +} + +static void free_security_hook_list(struct hlist_head *head) +{ + struct hlist_node *temp; + struct security_hook_list *entry; + + if (!head) + return; + + hlist_for_each_entry_safe (entry, temp, head, list) { + hlist_del(&entry->list); + kfree(entry); + } + + kfree(head); +} + +struct hlist_head *copy_security_hlist(struct hlist_head *orig) +{ + struct hlist_head *new_head = kmalloc(sizeof(*new_head), GFP_KERNEL); + if (!new_head) + return NULL; + + INIT_HLIST_HEAD(new_head); + + struct security_hook_list *entry; + struct security_hook_list *new_entry; + + hlist_for_each_entry (entry, orig, list) { + new_entry = kmalloc(sizeof(*new_entry), GFP_KERNEL); + if (!new_entry) { + free_security_hook_list(new_head); + return NULL; + } + + *new_entry = *entry; + + hlist_add_tail_rcu(&new_entry->list, new_head); + } + + return new_head; +} + +#define LSM_SEARCH_MAX 180 // This should be enough to iterate +static void *find_head_addr(void *security_ptr, int *index) +{ + if (!security_ptr) { + return NULL; + } + struct hlist_head *head_start = + (struct hlist_head *)&security_hook_heads; + + for (int i = 0; i < LSM_SEARCH_MAX; i++) { + struct hlist_head *head = head_start + i; + struct security_hook_list *pos; + hlist_for_each_entry (pos, head, list) { + if (pos->hook.capget == security_ptr) { + if (index) { + *index = i; + } + return head; + } + } + } + + return NULL; +} + +#define GET_SYMBOL_ADDR(sym) \ + ({ \ + void *addr = kallsyms_lookup_name(#sym ".cfi_jt"); \ + if (!addr) { \ + addr = kallsyms_lookup_name(#sym); \ + } \ + addr; \ + }) + +#define KSU_LSM_HOOK_HACK_INIT(head_ptr, name, func) \ + do { \ + static struct security_hook_list hook = { \ + .hook = { .name = func } \ + }; \ + hook.head = head_ptr; \ + hook.lsm = "ksu"; \ + struct hlist_head *new_head = copy_security_hlist(hook.head); \ + if (!new_head) { \ + pr_err("Failed to copy security list: %s\n", #name); \ + break; \ + } \ + hlist_add_tail_rcu(&hook.list, new_head); \ + if (override_security_head(hook.head, new_head, \ + sizeof(*new_head))) { \ + free_security_hook_list(new_head); \ + pr_err("Failed to hack lsm for: %s\n", #name); \ + } \ + } while (0) + +void __init ksu_lsm_hook_init(void) +{ + void *cap_prctl = GET_SYMBOL_ADDR(cap_task_prctl); + void *prctl_head = find_head_addr(cap_prctl, NULL); + if (prctl_head) { + if (prctl_head != &security_hook_heads.task_prctl) { + pr_warn("prctl's address has shifted!\n"); + } + KSU_LSM_HOOK_HACK_INIT(prctl_head, task_prctl, ksu_task_prctl); + } else { + pr_warn("Failed to find task_prctl!\n"); + } + + int inode_killpriv_index = -1; + void *cap_killpriv = GET_SYMBOL_ADDR(cap_inode_killpriv); + find_head_addr(cap_killpriv, &inode_killpriv_index); + if (inode_killpriv_index < 0) { + pr_warn("Failed to find inode_rename, use kprobe instead!\n"); + register_kprobe(&renameat_kp); + } else { + int inode_rename_index = inode_killpriv_index + + &security_hook_heads.inode_rename - + &security_hook_heads.inode_killpriv; + struct hlist_head *head_start = + (struct hlist_head *)&security_hook_heads; + void *inode_rename_head = head_start + inode_rename_index; + if (inode_rename_head != &security_hook_heads.inode_rename) { + pr_warn("inode_rename's address has shifted!\n"); + } + KSU_LSM_HOOK_HACK_INIT(inode_rename_head, inode_rename, + ksu_inode_rename); + } + void *cap_setuid = GET_SYMBOL_ADDR(cap_task_fix_setuid); + void *setuid_head = find_head_addr(cap_setuid, NULL); + if (setuid_head) { + if (setuid_head != &security_hook_heads.task_fix_setuid) { + pr_warn("setuid's address has shifted!\n"); + } + KSU_LSM_HOOK_HACK_INIT(setuid_head, task_fix_setuid, + ksu_task_fix_setuid); + } else { + pr_warn("Failed to find task_fix_setuid!\n"); + } + smp_mb(); +} +#endif + +void __init ksu_core_init(void) +{ + ksu_lsm_hook_init(); +} + +void ksu_core_exit(void) +{ +#ifdef CONFIG_KPROBES + pr_info("ksu_core_kprobe_exit\n"); + // we dont use this now + // ksu_kprobe_exit(); +#endif +} diff --git a/KernelSU/kernel/core_hook.h b/KernelSU/kernel/core_hook.h new file mode 100644 index 000000000000..616951e8db35 --- /dev/null +++ b/KernelSU/kernel/core_hook.h @@ -0,0 +1,9 @@ +#ifndef __KSU_H_KSU_CORE +#define __KSU_H_KSU_CORE + +#include + +void __init ksu_core_init(void); +void ksu_core_exit(void); + +#endif diff --git a/KernelSU/kernel/embed_ksud.c b/KernelSU/kernel/embed_ksud.c new file mode 100644 index 000000000000..24c401219c15 --- /dev/null +++ b/KernelSU/kernel/embed_ksud.c @@ -0,0 +1,5 @@ +// WARNING: THIS IS A STUB FILE +// This file will be regenerated by CI + +unsigned int ksud_size = 0; +const char ksud[0] = {}; diff --git a/KernelSU/kernel/export_symbol.txt b/KernelSU/kernel/export_symbol.txt new file mode 100644 index 000000000000..1abd805e8e6a --- /dev/null +++ b/KernelSU/kernel/export_symbol.txt @@ -0,0 +1,2 @@ +register_kprobe +unregister_kprobe diff --git a/KernelSU/kernel/include/ksu_hook.h b/KernelSU/kernel/include/ksu_hook.h new file mode 100644 index 000000000000..ea0b04d3e538 --- /dev/null +++ b/KernelSU/kernel/include/ksu_hook.h @@ -0,0 +1,28 @@ +#ifndef __KSU_H_KSHOOK +#define __KSU_H_KSHOOK + +#include +#include + +// For sucompat + +int ksu_handle_faccessat(int *dfd, const char __user **filename_user, int *mode, + int *flags); + +int ksu_handle_stat(int *dfd, const char __user **filename_user, int *flags); + +// For ksud + +int ksu_handle_vfs_read(struct file **file_ptr, char __user **buf_ptr, + size_t *count_ptr, loff_t **pos); + +// For ksud and sucompat + +int ksu_handle_execveat(int *fd, struct filename **filename_ptr, void *argv, + void *envp, int *flags); + +// For volume button +int ksu_handle_input_handle_event(unsigned int *type, unsigned int *code, + int *value); + +#endif diff --git a/KernelSU/kernel/kernel_compat.c b/KernelSU/kernel/kernel_compat.c new file mode 100644 index 000000000000..a250cc2fa5c8 --- /dev/null +++ b/KernelSU/kernel/kernel_compat.c @@ -0,0 +1,176 @@ +#include +#include +#include +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 10, 0) +#include +#else +#include +#endif +#include +#include "klog.h" // IWYU pragma: keep +#include "kernel_compat.h" // Add check Huawei Device + +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 10, 0) || defined(CONFIG_IS_HW_HISI) +#include +#include +#include +struct key *init_session_keyring = NULL; + +static inline int install_session_keyring(struct key *keyring) +{ + struct cred *new; + int ret; + + new = prepare_creds(); + if (!new) + return -ENOMEM; + + ret = install_session_keyring_to_cred(new, keyring); + if (ret < 0) { + abort_creds(new); + return ret; + } + + return commit_creds(new); +} +#endif + +extern struct task_struct init_task; + +// mnt_ns context switch for environment that android_init->nsproxy->mnt_ns != init_task.nsproxy->mnt_ns, such as WSA +struct ksu_ns_fs_saved { + struct nsproxy *ns; + struct fs_struct *fs; +}; + +static void ksu_save_ns_fs(struct ksu_ns_fs_saved *ns_fs_saved) +{ + ns_fs_saved->ns = current->nsproxy; + ns_fs_saved->fs = current->fs; +} + +static void ksu_load_ns_fs(struct ksu_ns_fs_saved *ns_fs_saved) +{ + current->nsproxy = ns_fs_saved->ns; + current->fs = ns_fs_saved->fs; +} + +static bool android_context_saved_checked = false; +static bool android_context_saved_enabled = false; +static struct ksu_ns_fs_saved android_context_saved; + +void ksu_android_ns_fs_check() +{ + if (android_context_saved_checked) + return; + android_context_saved_checked = true; + task_lock(current); + if (current->nsproxy && current->fs && + current->nsproxy->mnt_ns != init_task.nsproxy->mnt_ns) { + android_context_saved_enabled = true; + pr_info("android context saved enabled due to init mnt_ns(%p) != android mnt_ns(%p)\n", + current->nsproxy->mnt_ns, init_task.nsproxy->mnt_ns); + ksu_save_ns_fs(&android_context_saved); + } else { + pr_info("android context saved disabled\n"); + } + task_unlock(current); +} + +struct file *ksu_filp_open_compat(const char *filename, int flags, umode_t mode) +{ +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 10, 0) || defined(CONFIG_IS_HW_HISI) + if (init_session_keyring != NULL && !current_cred()->session_keyring && + (current->flags & PF_WQ_WORKER)) { + pr_info("installing init session keyring for older kernel\n"); + install_session_keyring(init_session_keyring); + } +#endif + // switch mnt_ns even if current is not wq_worker, to ensure what we open is the correct file in android mnt_ns, rather than user created mnt_ns + struct ksu_ns_fs_saved saved; + if (android_context_saved_enabled) { + pr_info("start switch current nsproxy and fs to android context\n"); + task_lock(current); + ksu_save_ns_fs(&saved); + ksu_load_ns_fs(&android_context_saved); + task_unlock(current); + } + struct file *fp = filp_open(filename, flags, mode); + if (android_context_saved_enabled) { + task_lock(current); + ksu_load_ns_fs(&saved); + task_unlock(current); + pr_info("switch current nsproxy and fs back to saved successfully\n"); + } + return fp; +} + +ssize_t ksu_kernel_read_compat(struct file *p, void *buf, size_t count, + loff_t *pos) +{ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 0) + return kernel_read(p, buf, count, pos); +#else + loff_t offset = pos ? *pos : 0; + ssize_t result = kernel_read(p, offset, (char *)buf, count); + if (pos && result > 0) { + *pos = offset + result; + } + return result; +#endif +} + +ssize_t ksu_kernel_write_compat(struct file *p, const void *buf, size_t count, + loff_t *pos) +{ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 0) + return kernel_write(p, buf, count, pos); +#else + loff_t offset = pos ? *pos : 0; + ssize_t result = kernel_write(p, buf, count, offset); + if (pos && result > 0) { + *pos = offset + result; + } + return result; +#endif +} + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 8, 0) +long ksu_strncpy_from_user_nofault(char *dst, const void __user *unsafe_addr, + long count) +{ + return strncpy_from_user_nofault(dst, unsafe_addr, count); +} +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0) +long ksu_strncpy_from_user_nofault(char *dst, const void __user *unsafe_addr, + long count) +{ + return strncpy_from_user_nofault(dst, unsafe_addr, count); +} +#else +// Copied from: https://elixir.bootlin.com/linux/v4.9.337/source/mm/maccess.c#L201 +long ksu_strncpy_from_user_nofault(char *dst, const void __user *unsafe_addr, + long count) +{ + mm_segment_t old_fs = get_fs(); + long ret; + + if (unlikely(count <= 0)) + return 0; + + set_fs(USER_DS); + pagefault_disable(); + ret = strncpy_from_user(dst, unsafe_addr, count); + pagefault_enable(); + set_fs(old_fs); + + if (ret >= count) { + ret = count; + dst[ret - 1] = '\0'; + } else if (ret > 0) { + ret++; + } + + return ret; +} +#endif diff --git a/KernelSU/kernel/kernel_compat.h b/KernelSU/kernel/kernel_compat.h new file mode 100644 index 000000000000..ba9981857fd1 --- /dev/null +++ b/KernelSU/kernel/kernel_compat.h @@ -0,0 +1,39 @@ +#ifndef __KSU_H_KERNEL_COMPAT +#define __KSU_H_KERNEL_COMPAT + +#include +#include +#include "ss/policydb.h" +#include "linux/key.h" + +/* + * Adapt to Huawei HISI kernel without affecting other kernels , + * Huawei Hisi Kernel EBITMAP Enable or Disable Flag , + * From ss/ebitmap.h + */ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 9, 0)) && \ + (LINUX_VERSION_CODE < KERNEL_VERSION(4, 10, 0)) || \ + (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 14, 0)) && \ + (LINUX_VERSION_CODE < KERNEL_VERSION(4, 15, 0)) +#ifdef HISI_SELINUX_EBITMAP_RO +#define CONFIG_IS_HW_HISI +#endif +#endif + +extern long ksu_strncpy_from_user_nofault(char *dst, + const void __user *unsafe_addr, + long count); + +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 10, 0) || defined(CONFIG_IS_HW_HISI) +extern struct key *init_session_keyring; +#endif + +extern void ksu_android_ns_fs_check(); +extern struct file *ksu_filp_open_compat(const char *filename, int flags, + umode_t mode); +extern ssize_t ksu_kernel_read_compat(struct file *p, void *buf, size_t count, + loff_t *pos); +extern ssize_t ksu_kernel_write_compat(struct file *p, const void *buf, + size_t count, loff_t *pos); + +#endif diff --git a/KernelSU/kernel/klog.h b/KernelSU/kernel/klog.h new file mode 100644 index 000000000000..a934027fbeeb --- /dev/null +++ b/KernelSU/kernel/klog.h @@ -0,0 +1,11 @@ +#ifndef __KSU_H_KLOG +#define __KSU_H_KLOG + +#include + +#ifdef pr_fmt +#undef pr_fmt +#define pr_fmt(fmt) "KernelSU: " fmt +#endif + +#endif diff --git a/KernelSU/kernel/ksu.c b/KernelSU/kernel/ksu.c new file mode 100644 index 000000000000..3639edc21503 --- /dev/null +++ b/KernelSU/kernel/ksu.c @@ -0,0 +1,100 @@ +#include +#include +#include +#include +#include + +#include "allowlist.h" +#include "arch.h" +#include "core_hook.h" +#include "klog.h" // IWYU pragma: keep +#include "ksu.h" +#include "throne_tracker.h" + +static struct workqueue_struct *ksu_workqueue; + +bool ksu_queue_work(struct work_struct *work) +{ + return queue_work(ksu_workqueue, work); +} + +extern int ksu_handle_execveat_sucompat(int *fd, struct filename **filename_ptr, + void *argv, void *envp, int *flags); + +extern int ksu_handle_execveat_ksud(int *fd, struct filename **filename_ptr, + void *argv, void *envp, int *flags); + +int ksu_handle_execveat(int *fd, struct filename **filename_ptr, void *argv, + void *envp, int *flags) +{ + ksu_handle_execveat_ksud(fd, filename_ptr, argv, envp, flags); + return ksu_handle_execveat_sucompat(fd, filename_ptr, argv, envp, + flags); +} + +extern void ksu_sucompat_init(); +extern void ksu_sucompat_exit(); +extern void ksu_ksud_init(); +extern void ksu_ksud_exit(); + +int __init kernelsu_init(void) +{ +#ifdef CONFIG_KSU_DEBUG + pr_alert("*************************************************************"); + pr_alert("** NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE **"); + pr_alert("** **"); + pr_alert("** You are running KernelSU in DEBUG mode **"); + pr_alert("** **"); + pr_alert("** NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE **"); + pr_alert("*************************************************************"); +#endif + + ksu_core_init(); + + ksu_workqueue = alloc_ordered_workqueue("kernelsu_work_queue", 0); + + ksu_allowlist_init(); + + ksu_throne_tracker_init(); + +#ifdef CONFIG_KPROBES + ksu_sucompat_init(); + ksu_ksud_init(); +#else + pr_alert("KPROBES is disabled, KernelSU may not work, please check https://kernelsu.org/guide/how-to-integrate-for-non-gki.html"); +#endif + +#ifdef MODULE +#ifndef CONFIG_KSU_DEBUG + kobject_del(&THIS_MODULE->mkobj.kobj); +#endif +#endif + return 0; +} + +void kernelsu_exit(void) +{ + ksu_allowlist_exit(); + + ksu_throne_tracker_exit(); + + destroy_workqueue(ksu_workqueue); + +#ifdef CONFIG_KPROBES + ksu_ksud_exit(); + ksu_sucompat_exit(); +#endif + + ksu_core_exit(); +} + +module_init(kernelsu_init); +module_exit(kernelsu_exit); + +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("weishu"); +MODULE_DESCRIPTION("Android KernelSU"); + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 0, 0) +MODULE_IMPORT_NS(VFS_internal_I_am_really_a_filesystem_and_am_NOT_a_driver); +#endif diff --git a/KernelSU/kernel/ksu.h b/KernelSU/kernel/ksu.h new file mode 100644 index 000000000000..35d1b14dbb7c --- /dev/null +++ b/KernelSU/kernel/ksu.h @@ -0,0 +1,99 @@ +#ifndef __KSU_H_KSU +#define __KSU_H_KSU + +#include +#include + +#define KERNEL_SU_VERSION KSU_VERSION +#define KERNEL_SU_OPTION 0xDEADBEEF + +#define CMD_GRANT_ROOT 0 +#define CMD_BECOME_MANAGER 1 +#define CMD_GET_VERSION 2 +#define CMD_ALLOW_SU 3 +#define CMD_DENY_SU 4 +#define CMD_GET_ALLOW_LIST 5 +#define CMD_GET_DENY_LIST 6 +#define CMD_REPORT_EVENT 7 +#define CMD_SET_SEPOLICY 8 +#define CMD_CHECK_SAFEMODE 9 +#define CMD_GET_APP_PROFILE 10 +#define CMD_SET_APP_PROFILE 11 +#define CMD_UID_GRANTED_ROOT 12 +#define CMD_UID_SHOULD_UMOUNT 13 + +#define EVENT_POST_FS_DATA 1 +#define EVENT_BOOT_COMPLETED 2 +#define EVENT_MODULE_MOUNTED 3 + +#define KSU_APP_PROFILE_VER 2 +#define KSU_MAX_PACKAGE_NAME 256 +// NGROUPS_MAX for Linux is 65535 generally, but we only supports 32 groups. +#define KSU_MAX_GROUPS 32 +#define KSU_SELINUX_DOMAIN 64 + +struct root_profile { + int32_t uid; + int32_t gid; + + int32_t groups_count; + int32_t groups[KSU_MAX_GROUPS]; + + // kernel_cap_t is u32[2] for capabilities v3 + struct { + u64 effective; + u64 permitted; + u64 inheritable; + } capabilities; + + char selinux_domain[KSU_SELINUX_DOMAIN]; + + int32_t namespaces; +}; + +struct non_root_profile { + bool umount_modules; +}; + +struct app_profile { + // It may be utilized for backward compatibility, although we have never explicitly made any promises regarding this. + u32 version; + + // this is usually the package of the app, but can be other value for special apps + char key[KSU_MAX_PACKAGE_NAME]; + int32_t current_uid; + bool allow_su; + + union { + struct { + bool use_default; + char template_name[KSU_MAX_PACKAGE_NAME]; + + struct root_profile profile; + } rp_config; + + struct { + bool use_default; + + struct non_root_profile profile; + } nrp_config; + }; +}; + +bool ksu_queue_work(struct work_struct *work); + +static inline int startswith(char *s, char *prefix) +{ + return strncmp(s, prefix, strlen(prefix)); +} + +static inline int endswith(const char *s, const char *t) +{ + size_t slen = strlen(s); + size_t tlen = strlen(t); + if (tlen > slen) + return 1; + return strcmp(s + slen - tlen, t); +} + +#endif diff --git a/KernelSU/kernel/ksud.c b/KernelSU/kernel/ksud.c new file mode 100644 index 000000000000..68e473524284 --- /dev/null +++ b/KernelSU/kernel/ksud.c @@ -0,0 +1,666 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 0) +#include +#else +#include +#endif +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 1, 0) +#include +#endif +#include +#include +#include +#include +#include + +#include "allowlist.h" +#include "arch.h" +#include "klog.h" // IWYU pragma: keep +#include "ksud.h" +#include "kernel_compat.h" +#include "selinux/selinux.h" + +static const char KERNEL_SU_RC[] = + "\n" + + "on post-fs-data\n" + " start logd\n" + // We should wait for the post-fs-data finish + " exec u:r:su:s0 root -- " KSUD_PATH " post-fs-data\n" + "\n" + + "on nonencrypted\n" + " exec u:r:su:s0 root -- " KSUD_PATH " services\n" + "\n" + + "on property:vold.decrypt=trigger_restart_framework\n" + " exec u:r:su:s0 root -- " KSUD_PATH " services\n" + "\n" + + "on property:sys.boot_completed=1\n" + " exec u:r:su:s0 root -- " KSUD_PATH " boot-completed\n" + "\n" + + "\n"; + +static void stop_vfs_read_hook(); +static void stop_execve_hook(); +static void stop_input_hook(); + +#ifdef CONFIG_KPROBES +static struct work_struct stop_vfs_read_work; +static struct work_struct stop_execve_hook_work; +static struct work_struct stop_input_hook_work; +#else +bool ksu_vfs_read_hook __read_mostly = true; +bool ksu_execveat_hook __read_mostly = true; +bool ksu_input_hook __read_mostly = true; +#endif + +u32 ksu_devpts_sid; + +void on_post_fs_data(void) +{ + static bool done = false; + if (done) { + pr_info("on_post_fs_data already done\n"); + return; + } + done = true; + pr_info("on_post_fs_data!\n"); + ksu_load_allow_list(); + // sanity check, this may influence the performance + stop_input_hook(); + + ksu_devpts_sid = ksu_get_devpts_sid(); + pr_info("devpts sid: %d\n", ksu_devpts_sid); +} + +#define MAX_ARG_STRINGS 0x7FFFFFFF +struct user_arg_ptr { +#ifdef CONFIG_COMPAT + bool is_compat; +#endif + union { + const char __user *const __user *native; +#ifdef CONFIG_COMPAT + const compat_uptr_t __user *compat; +#endif + } ptr; +}; + +static const char __user *get_user_arg_ptr(struct user_arg_ptr argv, int nr) +{ + const char __user *native; + +#ifdef CONFIG_COMPAT + if (unlikely(argv.is_compat)) { + compat_uptr_t compat; + + if (get_user(compat, argv.ptr.compat + nr)) + return ERR_PTR(-EFAULT); + + return compat_ptr(compat); + } +#endif + + if (get_user(native, argv.ptr.native + nr)) + return ERR_PTR(-EFAULT); + + return native; +} + +/* + * count() counts the number of strings in array ARGV. + */ + +/* + * Make sure old GCC compiler can use __maybe_unused, + * Test passed in 4.4.x ~ 4.9.x when use GCC. + */ + +static int __maybe_unused count(struct user_arg_ptr argv, int max) +{ + int i = 0; + + if (argv.ptr.native != NULL) { + for (;;) { + const char __user *p = get_user_arg_ptr(argv, i); + + if (!p) + break; + + if (IS_ERR(p)) + return -EFAULT; + + if (i >= max) + return -E2BIG; + ++i; + + if (fatal_signal_pending(current)) + return -ERESTARTNOHAND; + cond_resched(); + } + } + return i; +} + +// IMPORTANT NOTE: the call from execve_handler_pre WON'T provided correct value for envp and flags in GKI version +int ksu_handle_execveat_ksud(int *fd, struct filename **filename_ptr, + struct user_arg_ptr *argv, + struct user_arg_ptr *envp, int *flags) +{ +#ifndef CONFIG_KPROBES + if (!ksu_execveat_hook) { + return 0; + } +#endif + struct filename *filename; + + static const char app_process[] = "/system/bin/app_process"; + static bool first_app_process = true; + + /* This applies to versions Android 10+ */ + static const char system_bin_init[] = "/system/bin/init"; + /* This applies to versions between Android 6 ~ 9 */ + static const char old_system_init[] = "/init"; + static bool init_second_stage_executed = false; + + if (!filename_ptr) + return 0; + + filename = *filename_ptr; + if (IS_ERR(filename)) { + return 0; + } + + if (unlikely(!memcmp(filename->name, system_bin_init, + sizeof(system_bin_init) - 1) && + argv)) { + // /system/bin/init executed + int argc = count(*argv, MAX_ARG_STRINGS); + pr_info("/system/bin/init argc: %d\n", argc); + if (argc > 1 && !init_second_stage_executed) { + const char __user *p = get_user_arg_ptr(*argv, 1); + if (p && !IS_ERR(p)) { + char first_arg[16]; + ksu_strncpy_from_user_nofault( + first_arg, p, sizeof(first_arg)); + pr_info("/system/bin/init first arg: %s\n", + first_arg); + if (!strcmp(first_arg, "second_stage")) { + pr_info("/system/bin/init second_stage executed\n"); + apply_kernelsu_rules(); + init_second_stage_executed = true; + ksu_android_ns_fs_check(); + } + } else { + pr_err("/system/bin/init parse args err!\n"); + } + } + } else if (unlikely(!memcmp(filename->name, old_system_init, + sizeof(old_system_init) - 1) && + argv)) { + // /init executed + int argc = count(*argv, MAX_ARG_STRINGS); + pr_info("/init argc: %d\n", argc); + if (argc > 1 && !init_second_stage_executed) { + /* This applies to versions between Android 6 ~ 7 */ + const char __user *p = get_user_arg_ptr(*argv, 1); + if (p && !IS_ERR(p)) { + char first_arg[16]; + ksu_strncpy_from_user_nofault( + first_arg, p, sizeof(first_arg)); + pr_info("/init first arg: %s\n", first_arg); + if (!strcmp(first_arg, "--second-stage")) { + pr_info("/init second_stage executed\n"); + apply_kernelsu_rules(); + init_second_stage_executed = true; + ksu_android_ns_fs_check(); + } + } else { + pr_err("/init parse args err!\n"); + } + } else if (argc == 1 && !init_second_stage_executed && envp) { + /* This applies to versions between Android 8 ~ 9 */ + int envc = count(*envp, MAX_ARG_STRINGS); + if (envc > 0) { + int n; + for (n = 1; n <= envc; n++) { + const char __user *p = + get_user_arg_ptr(*envp, n); + if (!p || IS_ERR(p)) { + continue; + } + char env[256]; + // Reading environment variable strings from user space + if (ksu_strncpy_from_user_nofault( + env, p, sizeof(env)) < 0) + continue; + // Parsing environment variable names and values + char *env_name = env; + char *env_value = strchr(env, '='); + if (env_value == NULL) + continue; + // Replace equal sign with string terminator + *env_value = '\0'; + env_value++; + // Check if the environment variable name and value are matching + if (!strcmp(env_name, + "INIT_SECOND_STAGE") && + (!strcmp(env_value, "1") || + !strcmp(env_value, "true"))) { + pr_info("/init second_stage executed\n"); + apply_kernelsu_rules(); + init_second_stage_executed = + true; + ksu_android_ns_fs_check(); + } + } + } + } + } + + if (unlikely(first_app_process && !memcmp(filename->name, app_process, + sizeof(app_process) - 1))) { + first_app_process = false; + pr_info("exec app_process, /data prepared, second_stage: %d\n", + init_second_stage_executed); + on_post_fs_data(); // we keep this for old ksud + stop_execve_hook(); + } + + return 0; +} + +static ssize_t (*orig_read)(struct file *, char __user *, size_t, loff_t *); +static ssize_t (*orig_read_iter)(struct kiocb *, struct iov_iter *); +static struct file_operations fops_proxy; +static ssize_t read_count_append = 0; + +static ssize_t read_proxy(struct file *file, char __user *buf, size_t count, + loff_t *pos) +{ + bool first_read = file->f_pos == 0; + ssize_t ret = orig_read(file, buf, count, pos); + if (first_read) { + pr_info("read_proxy append %ld + %ld\n", ret, + read_count_append); + ret += read_count_append; + } + return ret; +} + +static ssize_t read_iter_proxy(struct kiocb *iocb, struct iov_iter *to) +{ + bool first_read = iocb->ki_pos == 0; + ssize_t ret = orig_read_iter(iocb, to); + if (first_read) { + pr_info("read_iter_proxy append %ld + %ld\n", ret, + read_count_append); + ret += read_count_append; + } + return ret; +} + +int ksu_handle_vfs_read(struct file **file_ptr, char __user **buf_ptr, + size_t *count_ptr, loff_t **pos) +{ +#ifndef CONFIG_KPROBES + if (!ksu_vfs_read_hook) { + return 0; + } +#endif + struct file *file; + char __user *buf; + size_t count; + + if (strcmp(current->comm, "init")) { + // we are only interest in `init` process + return 0; + } + + file = *file_ptr; + if (IS_ERR(file)) { + return 0; + } + + if (!d_is_reg(file->f_path.dentry)) { + return 0; + } + + const char *short_name = file->f_path.dentry->d_name.name; + if (strcmp(short_name, "atrace.rc")) { + // we are only interest `atrace.rc` file name file + return 0; + } + char path[256]; + char *dpath = d_path(&file->f_path, path, sizeof(path)); + + if (IS_ERR(dpath)) { + return 0; + } + + if (strcmp(dpath, "/system/etc/init/atrace.rc")) { + return 0; + } + + // we only process the first read + static bool rc_inserted = false; + if (rc_inserted) { + // we don't need this kprobe, unregister it! + stop_vfs_read_hook(); + return 0; + } + rc_inserted = true; + + // now we can sure that the init process is reading + // `/system/etc/init/atrace.rc` + buf = *buf_ptr; + count = *count_ptr; + + size_t rc_count = strlen(KERNEL_SU_RC); + + pr_info("vfs_read: %s, comm: %s, count: %zu, rc_count: %zu\n", dpath, + current->comm, count, rc_count); + + if (count < rc_count) { + pr_err("count: %zu < rc_count: %zu\n", count, rc_count); + return 0; + } + + size_t ret = copy_to_user(buf, KERNEL_SU_RC, rc_count); + if (ret) { + pr_err("copy ksud.rc failed: %zu\n", ret); + return 0; + } + + // we've succeed to insert ksud.rc, now we need to proxy the read and modify the result! + // But, we can not modify the file_operations directly, because it's in read-only memory. + // We just replace the whole file_operations with a proxy one. + memcpy(&fops_proxy, file->f_op, sizeof(struct file_operations)); + orig_read = file->f_op->read; + if (orig_read) { + fops_proxy.read = read_proxy; + } + orig_read_iter = file->f_op->read_iter; + if (orig_read_iter) { + fops_proxy.read_iter = read_iter_proxy; + } + // replace the file_operations + file->f_op = &fops_proxy; + read_count_append = rc_count; + + *buf_ptr = buf + rc_count; + *count_ptr = count - rc_count; + + return 0; +} + +int ksu_handle_sys_read(unsigned int fd, char __user **buf_ptr, + size_t *count_ptr) +{ + struct file *file = fget(fd); + if (!file) { + return 0; + } + int result = ksu_handle_vfs_read(&file, buf_ptr, count_ptr, NULL); + fput(file); + return result; +} + +static unsigned int volumedown_pressed_count = 0; + +static bool is_volumedown_enough(unsigned int count) +{ + return count >= 3; +} + +int ksu_handle_input_handle_event(unsigned int *type, unsigned int *code, + int *value) +{ +#ifndef CONFIG_KPROBES + if (!ksu_input_hook) { + return 0; + } +#endif + if (*type == EV_KEY && *code == KEY_VOLUMEDOWN) { + int val = *value; + pr_info("KEY_VOLUMEDOWN val: %d\n", val); + if (val) { + // key pressed, count it + volumedown_pressed_count += 1; + if (is_volumedown_enough(volumedown_pressed_count)) { + stop_input_hook(); + } + } + } + + return 0; +} + +bool ksu_is_safe_mode() +{ + static bool safe_mode = false; + if (safe_mode) { + // don't need to check again, userspace may call multiple times + return true; + } + + // stop hook first! + stop_input_hook(); + + pr_info("volumedown_pressed_count: %d\n", volumedown_pressed_count); + if (is_volumedown_enough(volumedown_pressed_count)) { + // pressed over 3 times + pr_info("KEY_VOLUMEDOWN pressed max times, safe mode detected!\n"); + safe_mode = true; + return true; + } + + return false; +} + +#ifdef CONFIG_KPROBES + +// https://elixir.bootlin.com/linux/v5.10.158/source/fs/exec.c#L1864 +static int execve_handler_pre(struct kprobe *p, struct pt_regs *regs) +{ + int *fd = (int *)&PT_REGS_PARM1(regs); + struct filename **filename_ptr = + (struct filename **)&PT_REGS_PARM2(regs); + struct user_arg_ptr argv; +#ifdef CONFIG_COMPAT + argv.is_compat = PT_REGS_PARM3(regs); + if (unlikely(argv.is_compat)) { + argv.ptr.compat = PT_REGS_CCALL_PARM4(regs); + } else { + argv.ptr.native = PT_REGS_CCALL_PARM4(regs); + } +#else + argv.ptr.native = PT_REGS_PARM3(regs); +#endif + + return ksu_handle_execveat_ksud(fd, filename_ptr, &argv, NULL, NULL); +} + +static int sys_execve_handler_pre(struct kprobe *p, struct pt_regs *regs) +{ + struct pt_regs *real_regs = PT_REAL_REGS(regs); + const char __user **filename_user = + (const char **)&PT_REGS_PARM1(real_regs); + const char __user *const __user *__argv = + (const char __user *const __user *)PT_REGS_PARM2(real_regs); + struct user_arg_ptr argv = { .ptr.native = __argv }; + struct filename filename_in, *filename_p; + char path[32]; + + if (!filename_user) + return 0; + + memset(path, 0, sizeof(path)); + ksu_strncpy_from_user_nofault(path, *filename_user, 32); + filename_in.name = path; + + filename_p = &filename_in; + return ksu_handle_execveat_ksud(AT_FDCWD, &filename_p, &argv, NULL, + NULL); +} + +// remove this later! +__maybe_unused static int vfs_read_handler_pre(struct kprobe *p, + struct pt_regs *regs) +{ + struct file **file_ptr = (struct file **)&PT_REGS_PARM1(regs); + char __user **buf_ptr = (char **)&PT_REGS_PARM2(regs); + size_t *count_ptr = (size_t *)&PT_REGS_PARM3(regs); + loff_t **pos_ptr = (loff_t **)&PT_REGS_CCALL_PARM4(regs); + + return ksu_handle_vfs_read(file_ptr, buf_ptr, count_ptr, pos_ptr); +} + +static int sys_read_handler_pre(struct kprobe *p, struct pt_regs *regs) +{ + struct pt_regs *real_regs = PT_REAL_REGS(regs); + unsigned int fd = PT_REGS_PARM1(real_regs); + char __user **buf_ptr = (char __user **)&PT_REGS_PARM2(real_regs); + size_t count_ptr = (size_t *)&PT_REGS_PARM3(real_regs); + + return ksu_handle_sys_read(fd, buf_ptr, count_ptr); +} + +static int input_handle_event_handler_pre(struct kprobe *p, + struct pt_regs *regs) +{ + unsigned int *type = (unsigned int *)&PT_REGS_PARM2(regs); + unsigned int *code = (unsigned int *)&PT_REGS_PARM3(regs); + int *value = (int *)&PT_REGS_CCALL_PARM4(regs); + return ksu_handle_input_handle_event(type, code, value); +} + +#if 1 +static struct kprobe execve_kp = { + .symbol_name = SYS_EXECVE_SYMBOL, + .pre_handler = sys_execve_handler_pre, +}; +#else +static struct kprobe execve_kp = { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 9, 0) + .symbol_name = "do_execveat_common", +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 0) + .symbol_name = "__do_execve_file", +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) + .symbol_name = "do_execveat_common", +#endif + .pre_handler = execve_handler_pre, +}; +#endif + +#if 1 +static struct kprobe vfs_read_kp = { + .symbol_name = SYS_READ_SYMBOL, + .pre_handler = sys_read_handler_pre, +}; +#else +static struct kprobe vfs_read_kp = { + .symbol_name = "vfs_read", + .pre_handler = vfs_read_handler_pre, +}; +#endif + +static struct kprobe input_event_kp = { + .symbol_name = "input_event", + .pre_handler = input_handle_event_handler_pre, +}; + +static void do_stop_vfs_read_hook(struct work_struct *work) +{ + unregister_kprobe(&vfs_read_kp); +} + +static void do_stop_execve_hook(struct work_struct *work) +{ + unregister_kprobe(&execve_kp); +} + +static void do_stop_input_hook(struct work_struct *work) +{ + unregister_kprobe(&input_event_kp); +} +#endif + +static void stop_vfs_read_hook() +{ +#ifdef CONFIG_KPROBES + bool ret = schedule_work(&stop_vfs_read_work); + pr_info("unregister vfs_read kprobe: %d!\n", ret); +#else + ksu_vfs_read_hook = false; + pr_info("stop vfs_read_hook\n"); +#endif +} + +static void stop_execve_hook() +{ +#ifdef CONFIG_KPROBES + bool ret = schedule_work(&stop_execve_hook_work); + pr_info("unregister execve kprobe: %d!\n", ret); +#else + ksu_execveat_hook = false; + pr_info("stop execve_hook\n"); +#endif +} + +static void stop_input_hook() +{ + static bool input_hook_stopped = false; + if (input_hook_stopped) { + return; + } + input_hook_stopped = true; +#ifdef CONFIG_KPROBES + bool ret = schedule_work(&stop_input_hook_work); + pr_info("unregister input kprobe: %d!\n", ret); +#else + ksu_input_hook = false; + pr_info("stop input_hook\n"); +#endif +} + +// ksud: module support +void ksu_ksud_init() +{ +#ifdef CONFIG_KPROBES + int ret; + + ret = register_kprobe(&execve_kp); + pr_info("ksud: execve_kp: %d\n", ret); + + ret = register_kprobe(&vfs_read_kp); + pr_info("ksud: vfs_read_kp: %d\n", ret); + + ret = register_kprobe(&input_event_kp); + pr_info("ksud: input_event_kp: %d\n", ret); + + INIT_WORK(&stop_vfs_read_work, do_stop_vfs_read_hook); + INIT_WORK(&stop_execve_hook_work, do_stop_execve_hook); + INIT_WORK(&stop_input_hook_work, do_stop_input_hook); +#endif +} + +void ksu_ksud_exit() +{ +#ifdef CONFIG_KPROBES + unregister_kprobe(&execve_kp); + // this should be done before unregister vfs_read_kp + // unregister_kprobe(&vfs_read_kp); + unregister_kprobe(&input_event_kp); +#endif +} \ No newline at end of file diff --git a/KernelSU/kernel/ksud.h b/KernelSU/kernel/ksud.h new file mode 100644 index 000000000000..cc2df243a8f0 --- /dev/null +++ b/KernelSU/kernel/ksud.h @@ -0,0 +1,14 @@ +#ifndef __KSU_H_KSUD +#define __KSU_H_KSUD + +#include + +#define KSUD_PATH "/data/adb/ksud" + +void on_post_fs_data(void); + +bool ksu_is_safe_mode(void); + +extern u32 ksu_devpts_sid; + +#endif diff --git a/KernelSU/kernel/manager.h b/KernelSU/kernel/manager.h new file mode 100644 index 000000000000..be5bbced6f73 --- /dev/null +++ b/KernelSU/kernel/manager.h @@ -0,0 +1,36 @@ +#ifndef __KSU_H_KSU_MANAGER +#define __KSU_H_KSU_MANAGER + +#include +#include + +#define KSU_INVALID_UID -1 + +extern uid_t ksu_manager_uid; // DO NOT DIRECT USE + +static inline bool ksu_is_manager_uid_valid() +{ + return ksu_manager_uid != KSU_INVALID_UID; +} + +static inline bool is_manager() +{ + return unlikely(ksu_manager_uid == current_uid().val); +} + +static inline uid_t ksu_get_manager_uid() +{ + return ksu_manager_uid; +} + +static inline void ksu_set_manager_uid(uid_t uid) +{ + ksu_manager_uid = uid; +} + +static inline void ksu_invalidate_manager_uid() +{ + ksu_manager_uid = KSU_INVALID_UID; +} + +#endif diff --git a/KernelSU/kernel/selinux/Makefile b/KernelSU/kernel/selinux/Makefile new file mode 100644 index 000000000000..870750be2ed6 --- /dev/null +++ b/KernelSU/kernel/selinux/Makefile @@ -0,0 +1,16 @@ +obj-y += selinux.o +obj-y += sepolicy.o +obj-y += rules.o + +ifeq ($(shell grep -q " current_sid(void)" $(srctree)/security/selinux/include/objsec.h; echo $$?),0) +ccflags-y += -DKSU_COMPAT_HAS_CURRENT_SID +endif + +ifeq ($(shell grep -q "struct selinux_state " $(srctree)/security/selinux/include/security.h; echo $$?),0) +ccflags-y += -DKSU_COMPAT_HAS_SELINUX_STATE +endif + +ccflags-y += -Wno-implicit-function-declaration -Wno-strict-prototypes -Wno-int-conversion +ccflags-y += -Wno-declaration-after-statement -Wno-unused-function +ccflags-y += -I$(srctree)/security/selinux -I$(srctree)/security/selinux/include +ccflags-y += -I$(objtree)/security/selinux -include $(srctree)/include/uapi/asm-generic/errno.h diff --git a/KernelSU/kernel/selinux/rules.c b/KernelSU/kernel/selinux/rules.c new file mode 100644 index 000000000000..1ba6d853f2a9 --- /dev/null +++ b/KernelSU/kernel/selinux/rules.c @@ -0,0 +1,476 @@ +#include +#include +#include + +#include "../klog.h" // IWYU pragma: keep +#include "selinux.h" +#include "sepolicy.h" +#include "ss/services.h" +#include "linux/lsm_audit.h" +#include "xfrm.h" + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 10, 0) +#define SELINUX_POLICY_INSTEAD_SELINUX_SS +#endif + +#define KERNEL_SU_DOMAIN "su" +#define KERNEL_SU_FILE "ksu_file" +#define KERNEL_EXEC_TYPE "ksu_exec" +#define ALL NULL + +static struct policydb *get_policydb(void) +{ + struct policydb *db; +// selinux_state does not exists before 4.19 +#ifdef KSU_COMPAT_USE_SELINUX_STATE +#ifdef SELINUX_POLICY_INSTEAD_SELINUX_SS + struct selinux_policy *policy = rcu_dereference(selinux_state.policy); + db = &policy->policydb; +#else + struct selinux_ss *ss = rcu_dereference(selinux_state.ss); + db = &ss->policydb; +#endif +#else + db = &policydb; +#endif + return db; +} + +void apply_kernelsu_rules() +{ + if (!getenforce()) { + pr_info("SELinux permissive or disabled, apply rules!\n"); + } + + rcu_read_lock(); + struct policydb *db = get_policydb(); + + ksu_permissive(db, KERNEL_SU_DOMAIN); + ksu_typeattribute(db, KERNEL_SU_DOMAIN, "mlstrustedsubject"); + ksu_typeattribute(db, KERNEL_SU_DOMAIN, "netdomain"); + ksu_typeattribute(db, KERNEL_SU_DOMAIN, "bluetoothdomain"); + + // Create unconstrained file type + ksu_type(db, KERNEL_SU_FILE, "file_type"); + ksu_typeattribute(db, KERNEL_SU_FILE, "mlstrustedobject"); + ksu_allow(db, ALL, KERNEL_SU_FILE, ALL, ALL); + + // allow all! + ksu_allow(db, KERNEL_SU_DOMAIN, ALL, ALL, ALL); + + // allow us do any ioctl + if (db->policyvers >= POLICYDB_VERSION_XPERMS_IOCTL) { + ksu_allowxperm(db, KERNEL_SU_DOMAIN, ALL, "blk_file", ALL); + ksu_allowxperm(db, KERNEL_SU_DOMAIN, ALL, "fifo_file", ALL); + ksu_allowxperm(db, KERNEL_SU_DOMAIN, ALL, "chr_file", ALL); + ksu_allowxperm(db, KERNEL_SU_DOMAIN, ALL, "file", ALL); + } + + // we need to save allowlist in /data/adb/ksu + ksu_allow(db, "kernel", "adb_data_file", "dir", ALL); + ksu_allow(db, "kernel", "adb_data_file", "file", ALL); + // we need to search /data/app + ksu_allow(db, "kernel", "apk_data_file", "file", "open"); + ksu_allow(db, "kernel", "apk_data_file", "dir", "open"); + ksu_allow(db, "kernel", "apk_data_file", "dir", "read"); + ksu_allow(db, "kernel", "apk_data_file", "dir", "search"); + // we may need to do mount on shell + ksu_allow(db, "kernel", "shell_data_file", "file", ALL); + // we need to read /data/system/packages.list + ksu_allow(db, "kernel", "kernel", "capability", "dac_override"); + // Android 10+: + // http://aospxref.com/android-12.0.0_r3/xref/system/sepolicy/private/file_contexts#512 + ksu_allow(db, "kernel", "packages_list_file", "file", ALL); + // Kernel 4.4 + ksu_allow(db, "kernel", "packages_list_file", "dir", ALL); + // Android 9-: + // http://aospxref.com/android-9.0.0_r61/xref/system/sepolicy/private/file_contexts#360 + ksu_allow(db, "kernel", "system_data_file", "file", ALL); + ksu_allow(db, "kernel", "system_data_file", "dir", ALL); + // our ksud triggered by init + ksu_allow(db, "init", "adb_data_file", "file", ALL); + ksu_allow(db, "init", "adb_data_file", "dir", ALL); // #1289 + ksu_allow(db, "init", KERNEL_SU_DOMAIN, ALL, ALL); + // we need to umount modules in zygote + ksu_allow(db, "zygote", "adb_data_file", "dir", "search"); + + // copied from Magisk rules + // suRights + ksu_allow(db, "servicemanager", KERNEL_SU_DOMAIN, "dir", "search"); + ksu_allow(db, "servicemanager", KERNEL_SU_DOMAIN, "dir", "read"); + ksu_allow(db, "servicemanager", KERNEL_SU_DOMAIN, "file", "open"); + ksu_allow(db, "servicemanager", KERNEL_SU_DOMAIN, "file", "read"); + ksu_allow(db, "servicemanager", KERNEL_SU_DOMAIN, "process", "getattr"); + ksu_allow(db, ALL, KERNEL_SU_DOMAIN, "process", "sigchld"); + + // allowLog + ksu_allow(db, "logd", KERNEL_SU_DOMAIN, "dir", "search"); + ksu_allow(db, "logd", KERNEL_SU_DOMAIN, "file", "read"); + ksu_allow(db, "logd", KERNEL_SU_DOMAIN, "file", "open"); + ksu_allow(db, "logd", KERNEL_SU_DOMAIN, "file", "getattr"); + + // dumpsys + ksu_allow(db, ALL, KERNEL_SU_DOMAIN, "fd", "use"); + ksu_allow(db, ALL, KERNEL_SU_DOMAIN, "fifo_file", "write"); + ksu_allow(db, ALL, KERNEL_SU_DOMAIN, "fifo_file", "read"); + ksu_allow(db, ALL, KERNEL_SU_DOMAIN, "fifo_file", "open"); + ksu_allow(db, ALL, KERNEL_SU_DOMAIN, "fifo_file", "getattr"); + + // bootctl + ksu_allow(db, "hwservicemanager", KERNEL_SU_DOMAIN, "dir", "search"); + ksu_allow(db, "hwservicemanager", KERNEL_SU_DOMAIN, "file", "read"); + ksu_allow(db, "hwservicemanager", KERNEL_SU_DOMAIN, "file", "open"); + ksu_allow(db, "hwservicemanager", KERNEL_SU_DOMAIN, "process", + "getattr"); + + // For mounting loop devices, mirrors, tmpfs + ksu_allow(db, "kernel", ALL, "file", "read"); + ksu_allow(db, "kernel", ALL, "file", "write"); + + // Allow all binder transactions + ksu_allow(db, ALL, KERNEL_SU_DOMAIN, "binder", ALL); + + // Allow system server kill su process + ksu_allow(db, "system_server", KERNEL_SU_DOMAIN, "process", "getpgid"); + ksu_allow(db, "system_server", KERNEL_SU_DOMAIN, "process", "sigkill"); + + rcu_read_unlock(); +} + +#define MAX_SEPOL_LEN 128 + +#define CMD_NORMAL_PERM 1 +#define CMD_XPERM 2 +#define CMD_TYPE_STATE 3 +#define CMD_TYPE 4 +#define CMD_TYPE_ATTR 5 +#define CMD_ATTR 6 +#define CMD_TYPE_TRANSITION 7 +#define CMD_TYPE_CHANGE 8 +#define CMD_GENFSCON 9 + +struct sepol_data { + u32 cmd; + u32 subcmd; + char __user *sepol1; + char __user *sepol2; + char __user *sepol3; + char __user *sepol4; + char __user *sepol5; + char __user *sepol6; + char __user *sepol7; +}; + +static int get_object(char *buf, char __user *user_object, size_t buf_sz, + char **object) +{ + if (!user_object) { + *object = ALL; + return 0; + } + + if (strncpy_from_user(buf, user_object, buf_sz) < 0) { + return -1; + } + + *object = buf; + + return 0; +} + +// reset avc cache table, otherwise the new rules will not take effect if already denied +static void reset_avc_cache() +{ +#if ((!defined(KSU_COMPAT_USE_SELINUX_STATE)) || \ + LINUX_VERSION_CODE >= KERNEL_VERSION(6, 4, 0)) + avc_ss_reset(0); + selnl_notify_policyload(0); + selinux_status_update_policyload(0); +#else + struct selinux_avc *avc = selinux_state.avc; + avc_ss_reset(avc, 0); + selnl_notify_policyload(0); + selinux_status_update_policyload(&selinux_state, 0); +#endif + selinux_xfrm_notify_policyload(); +} + +int handle_sepolicy(unsigned long arg3, void __user *arg4) +{ + if (!arg4) { + return -1; + } + + if (!getenforce()) { + pr_info("SELinux permissive or disabled when handle policy!\n"); + } + + struct sepol_data data; + if (copy_from_user(&data, arg4, sizeof(struct sepol_data))) { + pr_err("sepol: copy sepol_data failed.\n"); + return -1; + } + + u32 cmd = data.cmd; + u32 subcmd = data.subcmd; + + rcu_read_lock(); + + struct policydb *db = get_policydb(); + + int ret = -1; + if (cmd == CMD_NORMAL_PERM) { + char src_buf[MAX_SEPOL_LEN]; + char tgt_buf[MAX_SEPOL_LEN]; + char cls_buf[MAX_SEPOL_LEN]; + char perm_buf[MAX_SEPOL_LEN]; + + char *s, *t, *c, *p; + if (get_object(src_buf, data.sepol1, sizeof(src_buf), &s) < 0) { + pr_err("sepol: copy src failed.\n"); + goto exit; + } + + if (get_object(tgt_buf, data.sepol2, sizeof(tgt_buf), &t) < 0) { + pr_err("sepol: copy tgt failed.\n"); + goto exit; + } + + if (get_object(cls_buf, data.sepol3, sizeof(cls_buf), &c) < 0) { + pr_err("sepol: copy cls failed.\n"); + goto exit; + } + + if (get_object(perm_buf, data.sepol4, sizeof(perm_buf), &p) < + 0) { + pr_err("sepol: copy perm failed.\n"); + goto exit; + } + + bool success = false; + if (subcmd == 1) { + success = ksu_allow(db, s, t, c, p); + } else if (subcmd == 2) { + success = ksu_deny(db, s, t, c, p); + } else if (subcmd == 3) { + success = ksu_auditallow(db, s, t, c, p); + } else if (subcmd == 4) { + success = ksu_dontaudit(db, s, t, c, p); + } else { + pr_err("sepol: unknown subcmd: %d\n", subcmd); + } + ret = success ? 0 : -1; + + } else if (cmd == CMD_XPERM) { + char src_buf[MAX_SEPOL_LEN]; + char tgt_buf[MAX_SEPOL_LEN]; + char cls_buf[MAX_SEPOL_LEN]; + + char __maybe_unused + operation[MAX_SEPOL_LEN]; // it is always ioctl now! + char perm_set[MAX_SEPOL_LEN]; + + char *s, *t, *c; + if (get_object(src_buf, data.sepol1, sizeof(src_buf), &s) < 0) { + pr_err("sepol: copy src failed.\n"); + goto exit; + } + if (get_object(tgt_buf, data.sepol2, sizeof(tgt_buf), &t) < 0) { + pr_err("sepol: copy tgt failed.\n"); + goto exit; + } + if (get_object(cls_buf, data.sepol3, sizeof(cls_buf), &c) < 0) { + pr_err("sepol: copy cls failed.\n"); + goto exit; + } + if (strncpy_from_user(operation, data.sepol4, + sizeof(operation)) < 0) { + pr_err("sepol: copy operation failed.\n"); + goto exit; + } + if (strncpy_from_user(perm_set, data.sepol5, sizeof(perm_set)) < + 0) { + pr_err("sepol: copy perm_set failed.\n"); + goto exit; + } + + bool success = false; + if (subcmd == 1) { + success = ksu_allowxperm(db, s, t, c, perm_set); + } else if (subcmd == 2) { + success = ksu_auditallowxperm(db, s, t, c, perm_set); + } else if (subcmd == 3) { + success = ksu_dontauditxperm(db, s, t, c, perm_set); + } else { + pr_err("sepol: unknown subcmd: %d\n", subcmd); + } + ret = success ? 0 : -1; + } else if (cmd == CMD_TYPE_STATE) { + char src[MAX_SEPOL_LEN]; + + if (strncpy_from_user(src, data.sepol1, sizeof(src)) < 0) { + pr_err("sepol: copy src failed.\n"); + goto exit; + } + + bool success = false; + if (subcmd == 1) { + success = ksu_permissive(db, src); + } else if (subcmd == 2) { + success = ksu_enforce(db, src); + } else { + pr_err("sepol: unknown subcmd: %d\n", subcmd); + } + if (success) + ret = 0; + + } else if (cmd == CMD_TYPE || cmd == CMD_TYPE_ATTR) { + char type[MAX_SEPOL_LEN]; + char attr[MAX_SEPOL_LEN]; + + if (strncpy_from_user(type, data.sepol1, sizeof(type)) < 0) { + pr_err("sepol: copy type failed.\n"); + goto exit; + } + if (strncpy_from_user(attr, data.sepol2, sizeof(attr)) < 0) { + pr_err("sepol: copy attr failed.\n"); + goto exit; + } + + bool success = false; + if (cmd == CMD_TYPE) { + success = ksu_type(db, type, attr); + } else { + success = ksu_typeattribute(db, type, attr); + } + if (!success) { + pr_err("sepol: %d failed.\n", cmd); + goto exit; + } + ret = 0; + + } else if (cmd == CMD_ATTR) { + char attr[MAX_SEPOL_LEN]; + + if (strncpy_from_user(attr, data.sepol1, sizeof(attr)) < 0) { + pr_err("sepol: copy attr failed.\n"); + goto exit; + } + if (!ksu_attribute(db, attr)) { + pr_err("sepol: %d failed.\n", cmd); + goto exit; + } + ret = 0; + + } else if (cmd == CMD_TYPE_TRANSITION) { + char src[MAX_SEPOL_LEN]; + char tgt[MAX_SEPOL_LEN]; + char cls[MAX_SEPOL_LEN]; + char default_type[MAX_SEPOL_LEN]; + char object[MAX_SEPOL_LEN]; + + if (strncpy_from_user(src, data.sepol1, sizeof(src)) < 0) { + pr_err("sepol: copy src failed.\n"); + goto exit; + } + if (strncpy_from_user(tgt, data.sepol2, sizeof(tgt)) < 0) { + pr_err("sepol: copy tgt failed.\n"); + goto exit; + } + if (strncpy_from_user(cls, data.sepol3, sizeof(cls)) < 0) { + pr_err("sepol: copy cls failed.\n"); + goto exit; + } + if (strncpy_from_user(default_type, data.sepol4, + sizeof(default_type)) < 0) { + pr_err("sepol: copy default_type failed.\n"); + goto exit; + } + char *real_object; + if (data.sepol5 == NULL) { + real_object = NULL; + } else { + if (strncpy_from_user(object, data.sepol5, + sizeof(object)) < 0) { + pr_err("sepol: copy object failed.\n"); + goto exit; + } + real_object = object; + } + + bool success = ksu_type_transition(db, src, tgt, cls, + default_type, real_object); + if (success) + ret = 0; + + } else if (cmd == CMD_TYPE_CHANGE) { + char src[MAX_SEPOL_LEN]; + char tgt[MAX_SEPOL_LEN]; + char cls[MAX_SEPOL_LEN]; + char default_type[MAX_SEPOL_LEN]; + + if (strncpy_from_user(src, data.sepol1, sizeof(src)) < 0) { + pr_err("sepol: copy src failed.\n"); + goto exit; + } + if (strncpy_from_user(tgt, data.sepol2, sizeof(tgt)) < 0) { + pr_err("sepol: copy tgt failed.\n"); + goto exit; + } + if (strncpy_from_user(cls, data.sepol3, sizeof(cls)) < 0) { + pr_err("sepol: copy cls failed.\n"); + goto exit; + } + if (strncpy_from_user(default_type, data.sepol4, + sizeof(default_type)) < 0) { + pr_err("sepol: copy default_type failed.\n"); + goto exit; + } + bool success = false; + if (subcmd == 1) { + success = ksu_type_change(db, src, tgt, cls, + default_type); + } else if (subcmd == 2) { + success = ksu_type_member(db, src, tgt, cls, + default_type); + } else { + pr_err("sepol: unknown subcmd: %d\n", subcmd); + } + if (success) + ret = 0; + } else if (cmd == CMD_GENFSCON) { + char name[MAX_SEPOL_LEN]; + char path[MAX_SEPOL_LEN]; + char context[MAX_SEPOL_LEN]; + if (strncpy_from_user(name, data.sepol1, sizeof(name)) < 0) { + pr_err("sepol: copy name failed.\n"); + goto exit; + } + if (strncpy_from_user(path, data.sepol2, sizeof(path)) < 0) { + pr_err("sepol: copy path failed.\n"); + goto exit; + } + if (strncpy_from_user(context, data.sepol3, sizeof(context)) < + 0) { + pr_err("sepol: copy context failed.\n"); + goto exit; + } + + if (!ksu_genfscon(db, name, path, context)) { + pr_err("sepol: %d failed.\n", cmd); + goto exit; + } + ret = 0; + } else { + pr_err("sepol: unknown cmd: %d\n", cmd); + } + +exit: + rcu_read_unlock(); + + // only allow and xallow needs to reset avc cache, but we cannot do that because + // we are in atomic context. so we just reset it every time. + reset_avc_cache(); + + return ret; +} diff --git a/KernelSU/kernel/selinux/selinux.c b/KernelSU/kernel/selinux/selinux.c new file mode 100644 index 000000000000..c333e8a800e6 --- /dev/null +++ b/KernelSU/kernel/selinux/selinux.c @@ -0,0 +1,145 @@ +#include "selinux.h" +#include "objsec.h" +#include "linux/version.h" +#include "../klog.h" // IWYU pragma: keep +#ifndef KSU_COMPAT_USE_SELINUX_STATE +#include "avc.h" +#endif + +#define KERNEL_SU_DOMAIN "u:r:su:s0" + +static int transive_to_domain(const char *domain) +{ + struct cred *cred; + struct task_security_struct *tsec; + u32 sid; + int error; + + cred = (struct cred *)__task_cred(current); + + tsec = cred->security; + if (!tsec) { + pr_err("tsec == NULL!\n"); + return -1; + } + + error = security_secctx_to_secid(domain, strlen(domain), &sid); + if (error) { + pr_info("security_secctx_to_secid %s -> sid: %d, error: %d\n", + domain, sid, error); + } + if (!error) { + tsec->sid = sid; + tsec->create_sid = 0; + tsec->keycreate_sid = 0; + tsec->sockcreate_sid = 0; + } + return error; +} + +void setup_selinux(const char *domain) +{ + if (transive_to_domain(domain)) { + pr_err("transive domain failed.\n"); + return; + } + + /* we didn't need this now, we have change selinux rules when boot! +if (!is_domain_permissive) { + if (set_domain_permissive() == 0) { + is_domain_permissive = true; + } +}*/ +} + +void setenforce(bool enforce) +{ +#ifdef CONFIG_SECURITY_SELINUX_DEVELOP +#ifdef KSU_COMPAT_USE_SELINUX_STATE + selinux_state.enforcing = enforce; +#else + selinux_enforcing = enforce; +#endif +#endif +} + +bool getenforce() +{ +#ifdef CONFIG_SECURITY_SELINUX_DISABLE +#ifdef KSU_COMPAT_USE_SELINUX_STATE + if (selinux_state.disabled) { +#else + if (selinux_disabled) { +#endif + return false; + } +#endif + +#ifdef CONFIG_SECURITY_SELINUX_DEVELOP +#ifdef KSU_COMPAT_USE_SELINUX_STATE + return selinux_state.enforcing; +#else + return selinux_enforcing; +#endif +#else + return true; +#endif +} + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0)) && \ + !defined(KSU_COMPAT_HAS_CURRENT_SID) +/* + * get the subjective security ID of the current task + */ +static inline u32 current_sid(void) +{ + const struct task_security_struct *tsec = current_security(); + + return tsec->sid; +} +#endif + +bool is_ksu_domain() +{ + char *domain; + u32 seclen; + bool result; + int err = security_secid_to_secctx(current_sid(), &domain, &seclen); + if (err) { + return false; + } + result = strncmp(KERNEL_SU_DOMAIN, domain, seclen) == 0; + security_release_secctx(domain, seclen); + return result; +} + +bool is_zygote(void *sec) +{ + struct task_security_struct *tsec = (struct task_security_struct *)sec; + if (!tsec) { + return false; + } + char *domain; + u32 seclen; + bool result; + int err = security_secid_to_secctx(tsec->sid, &domain, &seclen); + if (err) { + return false; + } + result = strncmp("u:r:zygote:s0", domain, seclen) == 0; + security_release_secctx(domain, seclen); + return result; +} + +#define DEVPTS_DOMAIN "u:object_r:devpts:s0" + +u32 ksu_get_devpts_sid() +{ + u32 devpts_sid = 0; + int err = security_secctx_to_secid(DEVPTS_DOMAIN, strlen(DEVPTS_DOMAIN), + &devpts_sid); + if (err) { + pr_info("get devpts sid err %d\n", err); + } + return devpts_sid; +} \ No newline at end of file diff --git a/KernelSU/kernel/selinux/selinux.h b/KernelSU/kernel/selinux/selinux.h new file mode 100644 index 000000000000..07120c253268 --- /dev/null +++ b/KernelSU/kernel/selinux/selinux.h @@ -0,0 +1,25 @@ +#ifndef __KSU_H_SELINUX +#define __KSU_H_SELINUX + +#include "linux/types.h" +#include "linux/version.h" + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 10, 0)) || defined(KSU_COMPAT_HAS_SELINUX_STATE) +#define KSU_COMPAT_USE_SELINUX_STATE +#endif + +void setup_selinux(const char *); + +void setenforce(bool); + +bool getenforce(); + +bool is_ksu_domain(); + +bool is_zygote(void *cred); + +void apply_kernelsu_rules(); + +u32 ksu_get_devpts_sid(); + +#endif diff --git a/KernelSU/kernel/selinux/sepolicy.c b/KernelSU/kernel/selinux/sepolicy.c new file mode 100644 index 000000000000..acdc45ad81f7 --- /dev/null +++ b/KernelSU/kernel/selinux/sepolicy.c @@ -0,0 +1,1070 @@ +#include +#include +#include +#include + +#include "sepolicy.h" +#include "../klog.h" // IWYU pragma: keep +#include "ss/symtab.h" +#include "../kernel_compat.h" // Add check Huawei Device + +#define KSU_SUPPORT_ADD_TYPE + +////////////////////////////////////////////////////// +// Declaration +////////////////////////////////////////////////////// + +static struct avtab_node *get_avtab_node(struct policydb *db, + struct avtab_key *key, + struct avtab_extended_perms *xperms); + +static bool add_rule(struct policydb *db, const char *s, const char *t, + const char *c, const char *p, int effect, bool invert); + +static void add_rule_raw(struct policydb *db, struct type_datum *src, + struct type_datum *tgt, struct class_datum *cls, + struct perm_datum *perm, int effect, bool invert); + +static void add_xperm_rule_raw(struct policydb *db, struct type_datum *src, + struct type_datum *tgt, struct class_datum *cls, + uint16_t low, uint16_t high, int effect, + bool invert); +static bool add_xperm_rule(struct policydb *db, const char *s, const char *t, + const char *c, const char *range, int effect, + bool invert); + +static bool add_type_rule(struct policydb *db, const char *s, const char *t, + const char *c, const char *d, int effect); + +static bool add_filename_trans(struct policydb *db, const char *s, + const char *t, const char *c, const char *d, + const char *o); + +static bool add_genfscon(struct policydb *db, const char *fs_name, + const char *path, const char *context); + +static bool add_type(struct policydb *db, const char *type_name, bool attr); + +static bool set_type_state(struct policydb *db, const char *type_name, + bool permissive); + +static void add_typeattribute_raw(struct policydb *db, struct type_datum *type, + struct type_datum *attr); + +static bool add_typeattribute(struct policydb *db, const char *type, + const char *attr); + +////////////////////////////////////////////////////// +// Implementation +////////////////////////////////////////////////////// + +// Invert is adding rules for auditdeny; in other cases, invert is removing +// rules +#define strip_av(effect, invert) ((effect == AVTAB_AUDITDENY) == !invert) + +#define ksu_hash_for_each(node_ptr, n_slot, cur) \ + int i; \ + for (i = 0; i < n_slot; ++i) \ + for (cur = node_ptr[i]; cur; cur = cur->next) + +// htable is a struct instead of pointer above 5.8.0: +// https://elixir.bootlin.com/linux/v5.8-rc1/source/security/selinux/ss/symtab.h +#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 8, 0) +#define ksu_hashtab_for_each(htab, cur) \ + ksu_hash_for_each(htab.htable, htab.size, cur) +#else +#define ksu_hashtab_for_each(htab, cur) \ + ksu_hash_for_each(htab->htable, htab->size, cur) +#endif + +// symtab_search is introduced on 5.9.0: +// https://elixir.bootlin.com/linux/v5.9-rc1/source/security/selinux/ss/symtab.h +#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 9, 0) +#define symtab_search(s, name) hashtab_search((s)->table, name) +#define symtab_insert(s, name, datum) hashtab_insert((s)->table, name, datum) +#endif + +#define avtab_for_each(avtab, cur) \ + ksu_hash_for_each(avtab.htable, avtab.nslot, cur); + +static struct avtab_node *get_avtab_node(struct policydb *db, + struct avtab_key *key, + struct avtab_extended_perms *xperms) +{ + struct avtab_node *node; + + /* AVTAB_XPERMS entries are not necessarily unique */ + if (key->specified & AVTAB_XPERMS) { + bool match = false; + node = avtab_search_node(&db->te_avtab, key); + while (node) { + if ((node->datum.u.xperms->specified == + xperms->specified) && + (node->datum.u.xperms->driver == xperms->driver)) { + match = true; + break; + } + node = avtab_search_node_next(node, key->specified); + } + if (!match) + node = NULL; + } else { + node = avtab_search_node(&db->te_avtab, key); + } + + if (!node) { + struct avtab_datum avdatum = {}; + /* + * AUDITDENY, aka DONTAUDIT, are &= assigned, versus |= for + * others. Initialize the data accordingly. + */ + if (key->specified & AVTAB_XPERMS) { + avdatum.u.xperms = xperms; + } else { + avdatum.u.data = + key->specified == AVTAB_AUDITDENY ? ~0U : 0U; + } + /* this is used to get the node - insertion is actually unique */ + node = avtab_insert_nonunique(&db->te_avtab, key, &avdatum); + + int grow_size = sizeof(struct avtab_key); + grow_size += sizeof(struct avtab_datum); + if (key->specified & AVTAB_XPERMS) { + grow_size += sizeof(u8); + grow_size += sizeof(u8); + grow_size += sizeof(u32) * + ARRAY_SIZE(avdatum.u.xperms->perms.p); + } + db->len += grow_size; + } + + return node; +} + +static bool add_rule(struct policydb *db, const char *s, const char *t, + const char *c, const char *p, int effect, bool invert) +{ + struct type_datum *src = NULL, *tgt = NULL; + struct class_datum *cls = NULL; + struct perm_datum *perm = NULL; + + if (s) { + src = symtab_search(&db->p_types, s); + if (src == NULL) { + pr_info("source type %s does not exist\n", s); + return false; + } + } + + if (t) { + tgt = symtab_search(&db->p_types, t); + if (tgt == NULL) { + pr_info("target type %s does not exist\n", t); + return false; + } + } + + if (c) { + cls = symtab_search(&db->p_classes, c); + if (cls == NULL) { + pr_info("class %s does not exist\n", c); + return false; + } + } + + if (p) { + if (c == NULL) { + pr_info("No class is specified, cannot add perm [%s] \n", + p); + return false; + } + + perm = symtab_search(&cls->permissions, p); + if (perm == NULL && cls->comdatum != NULL) { + perm = symtab_search(&cls->comdatum->permissions, p); + } + if (perm == NULL) { + pr_info("perm %s does not exist in class %s\n", p, c); + return false; + } + } + add_rule_raw(db, src, tgt, cls, perm, effect, invert); + return true; +} + +static void add_rule_raw(struct policydb *db, struct type_datum *src, + struct type_datum *tgt, struct class_datum *cls, + struct perm_datum *perm, int effect, bool invert) +{ + if (src == NULL) { + struct hashtab_node *node; + if (strip_av(effect, invert)) { + ksu_hashtab_for_each(db->p_types.table, node) + { + add_rule_raw(db, + (struct type_datum *)node->datum, + tgt, cls, perm, effect, invert); + }; + } else { + ksu_hashtab_for_each(db->p_types.table, node) + { + struct type_datum *type = + (struct type_datum *)(node->datum); + if (type->attribute) { + add_rule_raw(db, type, tgt, cls, perm, + effect, invert); + } + }; + } + } else if (tgt == NULL) { + struct hashtab_node *node; + if (strip_av(effect, invert)) { + ksu_hashtab_for_each(db->p_types.table, node) + { + add_rule_raw(db, src, + (struct type_datum *)node->datum, + cls, perm, effect, invert); + }; + } else { + ksu_hashtab_for_each(db->p_types.table, node) + { + struct type_datum *type = + (struct type_datum *)(node->datum); + if (type->attribute) { + add_rule_raw(db, src, type, cls, perm, + effect, invert); + } + }; + } + } else if (cls == NULL) { + struct hashtab_node *node; + ksu_hashtab_for_each(db->p_classes.table, node) + { + add_rule_raw(db, src, tgt, + (struct class_datum *)node->datum, perm, + effect, invert); + } + } else { + struct avtab_key key; + key.source_type = src->value; + key.target_type = tgt->value; + key.target_class = cls->value; + key.specified = effect; + + struct avtab_node *node = get_avtab_node(db, &key, NULL); + if (invert) { + if (perm) + node->datum.u.data &= + ~(1U << (perm->value - 1)); + else + node->datum.u.data = 0U; + } else { + if (perm) + node->datum.u.data |= 1U << (perm->value - 1); + else + node->datum.u.data = ~0U; + } + } +} + +#define ioctl_driver(x) (x >> 8 & 0xFF) +#define ioctl_func(x) (x & 0xFF) + +#define xperm_test(x, p) (1 & (p[x >> 5] >> (x & 0x1f))) +#define xperm_set(x, p) (p[x >> 5] |= (1 << (x & 0x1f))) +#define xperm_clear(x, p) (p[x >> 5] &= ~(1 << (x & 0x1f))) + +static void add_xperm_rule_raw(struct policydb *db, struct type_datum *src, + struct type_datum *tgt, struct class_datum *cls, + uint16_t low, uint16_t high, int effect, + bool invert) +{ + if (src == NULL) { + struct hashtab_node *node; + ksu_hashtab_for_each(db->p_types.table, node) + { + struct type_datum *type = + (struct type_datum *)(node->datum); + if (type->attribute) { + add_xperm_rule_raw(db, type, tgt, cls, low, + high, effect, invert); + } + }; + } else if (tgt == NULL) { + struct hashtab_node *node; + ksu_hashtab_for_each(db->p_types.table, node) + { + struct type_datum *type = + (struct type_datum *)(node->datum); + if (type->attribute) { + add_xperm_rule_raw(db, src, type, cls, low, + high, effect, invert); + } + }; + } else if (cls == NULL) { + struct hashtab_node *node; + ksu_hashtab_for_each(db->p_classes.table, node) + { + add_xperm_rule_raw(db, src, tgt, + (struct class_datum *)(node->datum), + low, high, effect, invert); + }; + } else { + struct avtab_key key; + key.source_type = src->value; + key.target_type = tgt->value; + key.target_class = cls->value; + key.specified = effect; + + struct avtab_datum *datum; + struct avtab_node *node; + struct avtab_extended_perms xperms; + + memset(&xperms, 0, sizeof(xperms)); + if (ioctl_driver(low) != ioctl_driver(high)) { + xperms.specified = AVTAB_XPERMS_IOCTLDRIVER; + xperms.driver = 0; + } else { + xperms.specified = AVTAB_XPERMS_IOCTLFUNCTION; + xperms.driver = ioctl_driver(low); + } + int i; + if (xperms.specified == AVTAB_XPERMS_IOCTLDRIVER) { + for (i = ioctl_driver(low); i <= ioctl_driver(high); + ++i) { + if (invert) + xperm_clear(i, xperms.perms.p); + else + xperm_set(i, xperms.perms.p); + } + } else { + for (i = ioctl_func(low); i <= ioctl_func(high); ++i) { + if (invert) + xperm_clear(i, xperms.perms.p); + else + xperm_set(i, xperms.perms.p); + } + } + + node = get_avtab_node(db, &key, &xperms); + if (!node) { + pr_warn("add_xperm_rule_raw cannot found node!\n"); + return; + } + datum = &node->datum; + + if (datum->u.xperms == NULL) { + datum->u.xperms = + (struct avtab_extended_perms *)(kmalloc( + sizeof(xperms), GFP_KERNEL)); + if (!datum->u.xperms) { + pr_err("alloc xperms failed\n"); + return; + } + memcpy(datum->u.xperms, &xperms, sizeof(xperms)); + } + } +} + +static bool add_xperm_rule(struct policydb *db, const char *s, const char *t, + const char *c, const char *range, int effect, + bool invert) +{ + struct type_datum *src = NULL, *tgt = NULL; + struct class_datum *cls = NULL; + + if (s) { + src = symtab_search(&db->p_types, s); + if (src == NULL) { + pr_info("source type %s does not exist\n", s); + return false; + } + } + + if (t) { + tgt = symtab_search(&db->p_types, t); + if (tgt == NULL) { + pr_info("target type %s does not exist\n", t); + return false; + } + } + + if (c) { + cls = symtab_search(&db->p_classes, c); + if (cls == NULL) { + pr_info("class %s does not exist\n", c); + return false; + } + } + + u16 low, high; + + if (range) { + if (strchr(range, '-')) { + sscanf(range, "%hx-%hx", &low, &high); + } else { + sscanf(range, "%hx", &low); + high = low; + } + } else { + low = 0; + high = 0xFFFF; + } + + add_xperm_rule_raw(db, src, tgt, cls, low, high, effect, invert); + return true; +} + +static bool add_type_rule(struct policydb *db, const char *s, const char *t, + const char *c, const char *d, int effect) +{ + struct type_datum *src, *tgt, *def; + struct class_datum *cls; + + src = symtab_search(&db->p_types, s); + if (src == NULL) { + pr_info("source type %s does not exist\n", s); + return false; + } + tgt = symtab_search(&db->p_types, t); + if (tgt == NULL) { + pr_info("target type %s does not exist\n", t); + return false; + } + cls = symtab_search(&db->p_classes, c); + if (cls == NULL) { + pr_info("class %s does not exist\n", c); + return false; + } + def = symtab_search(&db->p_types, d); + if (def == NULL) { + pr_info("default type %s does not exist\n", d); + return false; + } + + struct avtab_key key; + key.source_type = src->value; + key.target_type = tgt->value; + key.target_class = cls->value; + key.specified = effect; + + struct avtab_node *node = get_avtab_node(db, &key, NULL); + node->datum.u.data = def->value; + + return true; +} + +// 5.9.0 : static inline int hashtab_insert(struct hashtab *h, void *key, void +// *datum, struct hashtab_key_params key_params) 5.8.0: int +// hashtab_insert(struct hashtab *h, void *k, void *d); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 9, 0) +static u32 filenametr_hash(const void *k) +{ + const struct filename_trans_key *ft = k; + unsigned long hash; + unsigned int byte_num; + unsigned char focus; + + hash = ft->ttype ^ ft->tclass; + + byte_num = 0; + while ((focus = ft->name[byte_num++])) + hash = partial_name_hash(focus, hash); + return hash; +} + +static int filenametr_cmp(const void *k1, const void *k2) +{ + const struct filename_trans_key *ft1 = k1; + const struct filename_trans_key *ft2 = k2; + int v; + + v = ft1->ttype - ft2->ttype; + if (v) + return v; + + v = ft1->tclass - ft2->tclass; + if (v) + return v; + + return strcmp(ft1->name, ft2->name); +} + +static const struct hashtab_key_params filenametr_key_params = { + .hash = filenametr_hash, + .cmp = filenametr_cmp, +}; +#endif + +static bool add_filename_trans(struct policydb *db, const char *s, + const char *t, const char *c, const char *d, + const char *o) +{ + struct type_datum *src, *tgt, *def; + struct class_datum *cls; + + src = symtab_search(&db->p_types, s); + if (src == NULL) { + pr_warn("source type %s does not exist\n", s); + return false; + } + tgt = symtab_search(&db->p_types, t); + if (tgt == NULL) { + pr_warn("target type %s does not exist\n", t); + return false; + } + cls = symtab_search(&db->p_classes, c); + if (cls == NULL) { + pr_warn("class %s does not exist\n", c); + return false; + } + def = symtab_search(&db->p_types, d); + if (def == NULL) { + pr_warn("default type %s does not exist\n", d); + return false; + } + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 7, 0) + struct filename_trans_key key; + key.ttype = tgt->value; + key.tclass = cls->value; + key.name = (char *)o; + + struct filename_trans_datum *last = NULL; + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 9, 0) + struct filename_trans_datum *trans = + policydb_filenametr_search(db, &key); +#else + struct filename_trans_datum *trans = + hashtab_search(&db->filename_trans, &key); +#endif + while (trans) { + if (ebitmap_get_bit(&trans->stypes, src->value - 1)) { + // Duplicate, overwrite existing data and return + trans->otype = def->value; + return true; + } + if (trans->otype == def->value) + break; + last = trans; + trans = trans->next; + } + + if (trans == NULL) { + trans = (struct filename_trans_datum *)kcalloc(sizeof(*trans), + 1, GFP_ATOMIC); + struct filename_trans_key *new_key = + (struct filename_trans_key *)kmalloc(sizeof(*new_key), + GFP_ATOMIC); + *new_key = key; + new_key->name = kstrdup(key.name, GFP_ATOMIC); + trans->next = last; + trans->otype = def->value; + hashtab_insert(&db->filename_trans, new_key, trans, + filenametr_key_params); + } + + db->compat_filename_trans_count++; + return ebitmap_set_bit(&trans->stypes, src->value - 1, 1) == 0; +#else // < 5.7.0, has no filename_trans_key, but struct filename_trans + + struct filename_trans key; + key.ttype = tgt->value; + key.tclass = cls->value; + key.name = (char *)o; + + struct filename_trans_datum *trans = + hashtab_search(db->filename_trans, &key); + + if (trans == NULL) { + trans = (struct filename_trans_datum *)kcalloc(sizeof(*trans), + 1, GFP_ATOMIC); + if (!trans) { + pr_err("add_filename_trans: Failed to alloc datum\n"); + return false; + } + struct filename_trans *new_key = + (struct filename_trans *)kmalloc(sizeof(*new_key), + GFP_ATOMIC); + if (!new_key) { + pr_err("add_filename_trans: Failed to alloc new_key\n"); + return false; + } + *new_key = key; + new_key->name = kstrdup(key.name, GFP_ATOMIC); + trans->otype = def->value; + hashtab_insert(db->filename_trans, new_key, trans); + } + + return ebitmap_set_bit(&db->filename_trans_ttypes, src->value - 1, 1) == + 0; +#endif +} + +static bool add_genfscon(struct policydb *db, const char *fs_name, + const char *path, const char *context) +{ + return false; +} + +static void *ksu_realloc(void *old, size_t new_size, size_t old_size) +{ + // we can't use krealloc, because it may be read-only + void *new = kzalloc(new_size, GFP_ATOMIC); + if (!new) { + return NULL; + } + if (old_size) { + memcpy(new, old, old_size); + } + // we can't use kfree, because it may be read-only + // there maybe some leaks, maybe we can check ptr_write, but it's not a big deal + // kfree(old); + return new; +} + +static bool add_type(struct policydb *db, const char *type_name, bool attr) +{ +#ifdef KSU_SUPPORT_ADD_TYPE + struct type_datum *type = symtab_search(&db->p_types, type_name); + if (type) { + pr_warn("Type %s already exists\n", type_name); + return true; + } + + u32 value = ++db->p_types.nprim; + type = (struct type_datum *)kzalloc(sizeof(struct type_datum), + GFP_ATOMIC); + if (!type) { + pr_err("add_type: alloc type_datum failed.\n"); + return false; + } + + type->primary = 1; + type->value = value; + type->attribute = attr; + + char *key = kstrdup(type_name, GFP_ATOMIC); + if (!key) { + pr_err("add_type: alloc key failed.\n"); + return false; + } + + if (symtab_insert(&db->p_types, key, type)) { + pr_err("add_type: insert symtab failed.\n"); + return false; + } + +#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 1, 0) + struct ebitmap *new_type_attr_map_array = + ksu_realloc(db->type_attr_map_array, + value * sizeof(struct ebitmap), + (value - 1) * sizeof(struct ebitmap)); + + if (!new_type_attr_map_array) { + pr_err("add_type: alloc type_attr_map_array failed\n"); + return false; + } + + struct type_datum **new_type_val_to_struct = + ksu_realloc(db->type_val_to_struct, + sizeof(*db->type_val_to_struct) * value, + sizeof(*db->type_val_to_struct) * (value - 1)); + + if (!new_type_val_to_struct) { + pr_err("add_type: alloc type_val_to_struct failed\n"); + return false; + } + + char **new_val_to_name_types = + ksu_realloc(db->sym_val_to_name[SYM_TYPES], + sizeof(char *) * value, + sizeof(char *) * (value - 1)); + if (!new_val_to_name_types) { + pr_err("add_type: alloc val_to_name failed\n"); + return false; + } + + db->type_attr_map_array = new_type_attr_map_array; + ebitmap_init(&db->type_attr_map_array[value - 1]); + ebitmap_set_bit(&db->type_attr_map_array[value - 1], value - 1, 1); + + db->type_val_to_struct = new_type_val_to_struct; + db->type_val_to_struct[value - 1] = type; + + db->sym_val_to_name[SYM_TYPES] = new_val_to_name_types; + db->sym_val_to_name[SYM_TYPES][value - 1] = key; + + int i; + for (i = 0; i < db->p_roles.nprim; ++i) { + ebitmap_set_bit(&db->role_val_to_struct[i]->types, value - 1, + 1); + } + + return true; +#elif defined(CONFIG_IS_HW_HISI) + /* + * Huawei use type_attr_map and type_val_to_struct. + * And use ebitmap not flex_array. + */ + size_t new_size = sizeof(struct ebitmap) * db->p_types.nprim; + struct ebitmap *new_type_attr_map = + (krealloc(db->type_attr_map, new_size, GFP_ATOMIC)); + + struct type_datum **new_type_val_to_struct = + krealloc(db->type_val_to_struct, + sizeof(*db->type_val_to_struct) * db->p_types.nprim, + GFP_ATOMIC); + + if (!new_type_attr_map) { + pr_err("add_type: alloc type_attr_map failed\n"); + return false; + } + + if (!new_type_val_to_struct) { + pr_err("add_type: alloc type_val_to_struct failed\n"); + return false; + } + + char **new_val_to_name_types = + krealloc(db->sym_val_to_name[SYM_TYPES], + sizeof(char *) * db->symtab[SYM_TYPES].nprim, + GFP_KERNEL); + if (!new_val_to_name_types) { + pr_err("add_type: alloc val_to_name failed\n"); + return false; + } + + db->type_attr_map = new_type_attr_map; + ebitmap_init(&db->type_attr_map[value - 1], HISI_SELINUX_EBITMAP_RO); + ebitmap_set_bit(&db->type_attr_map[value - 1], value - 1, 1); + + db->type_val_to_struct = new_type_val_to_struct; + db->type_val_to_struct[value - 1] = type; + + db->sym_val_to_name[SYM_TYPES] = new_val_to_name_types; + db->sym_val_to_name[SYM_TYPES][value - 1] = key; + + int i; + for (i = 0; i < db->p_roles.nprim; ++i) { + ebitmap_set_bit(&db->role_val_to_struct[i]->types, value - 1, + 1); + } + + return true; +#else + // flex_array is not extensible, we need to create a new bigger one instead + struct flex_array *new_type_attr_map_array = + flex_array_alloc(sizeof(struct ebitmap), db->p_types.nprim, + GFP_ATOMIC | __GFP_ZERO); + + struct flex_array *new_type_val_to_struct = + flex_array_alloc(sizeof(struct type_datum *), db->p_types.nprim, + GFP_ATOMIC | __GFP_ZERO); + + struct flex_array *new_val_to_name_types = + flex_array_alloc(sizeof(char *), db->symtab[SYM_TYPES].nprim, + GFP_ATOMIC | __GFP_ZERO); + + if (!new_type_attr_map_array) { + pr_err("add_type: alloc type_attr_map_array failed\n"); + return false; + } + + if (!new_type_val_to_struct) { + pr_err("add_type: alloc type_val_to_struct failed\n"); + return false; + } + + if (!new_val_to_name_types) { + pr_err("add_type: alloc val_to_name failed\n"); + return false; + } + + // preallocate so we don't have to worry about the put ever failing + if (flex_array_prealloc(new_type_attr_map_array, 0, db->p_types.nprim, + GFP_ATOMIC | __GFP_ZERO)) { + pr_err("add_type: prealloc type_attr_map_array failed\n"); + return false; + } + + if (flex_array_prealloc(new_type_val_to_struct, 0, db->p_types.nprim, + GFP_ATOMIC | __GFP_ZERO)) { + pr_err("add_type: prealloc type_val_to_struct_array failed\n"); + return false; + } + + if (flex_array_prealloc(new_val_to_name_types, 0, + db->symtab[SYM_TYPES].nprim, + GFP_ATOMIC | __GFP_ZERO)) { + pr_err("add_type: prealloc val_to_name_types failed\n"); + return false; + } + + int j; + void *old_elem; + // copy the old data or pointers to new flex arrays + for (j = 0; j < db->type_attr_map_array->total_nr_elements; j++) { + old_elem = flex_array_get(db->type_attr_map_array, j); + if (old_elem) + flex_array_put(new_type_attr_map_array, j, old_elem, + GFP_ATOMIC | __GFP_ZERO); + } + + for (j = 0; j < db->type_val_to_struct_array->total_nr_elements; j++) { + old_elem = flex_array_get_ptr(db->type_val_to_struct_array, j); + if (old_elem) + flex_array_put_ptr(new_type_val_to_struct, j, old_elem, + GFP_ATOMIC | __GFP_ZERO); + } + + for (j = 0; j < db->symtab[SYM_TYPES].nprim; j++) { + old_elem = + flex_array_get_ptr(db->sym_val_to_name[SYM_TYPES], j); + if (old_elem) + flex_array_put_ptr(new_val_to_name_types, j, old_elem, + GFP_ATOMIC | __GFP_ZERO); + } + + // store the pointer of old flex arrays first, when assigning new ones we + // should free it + struct flex_array *old_fa; + + old_fa = db->type_attr_map_array; + db->type_attr_map_array = new_type_attr_map_array; + if (old_fa) { + flex_array_free(old_fa); + } + + ebitmap_init(flex_array_get(db->type_attr_map_array, value - 1)); + ebitmap_set_bit(flex_array_get(db->type_attr_map_array, value - 1), + value - 1, 1); + + old_fa = db->type_val_to_struct_array; + db->type_val_to_struct_array = new_type_val_to_struct; + if (old_fa) { + flex_array_free(old_fa); + } + flex_array_put_ptr(db->type_val_to_struct_array, value - 1, type, + GFP_ATOMIC | __GFP_ZERO); + + old_fa = db->sym_val_to_name[SYM_TYPES]; + db->sym_val_to_name[SYM_TYPES] = new_val_to_name_types; + if (old_fa) { + flex_array_free(old_fa); + } + flex_array_put_ptr(db->sym_val_to_name[SYM_TYPES], value - 1, key, + GFP_ATOMIC | __GFP_ZERO); + + int i; + for (i = 0; i < db->p_roles.nprim; ++i) { + ebitmap_set_bit(&db->role_val_to_struct[i]->types, value - 1, + 1); + } + return true; +#endif + +#else + return false; +#endif +} + +static bool set_type_state(struct policydb *db, const char *type_name, + bool permissive) +{ + struct type_datum *type; + if (type_name == NULL) { + struct hashtab_node *node; + ksu_hashtab_for_each(db->p_types.table, node) + { + type = (struct type_datum *)(node->datum); + if (ebitmap_set_bit(&db->permissive_map, type->value, + permissive)) + pr_info("Could not set bit in permissive map\n"); + }; + } else { + type = (struct type_datum *)symtab_search(&db->p_types, + type_name); + if (type == NULL) { + pr_info("type %s does not exist\n", type_name); + return false; + } + if (ebitmap_set_bit(&db->permissive_map, type->value, + permissive)) { + pr_info("Could not set bit in permissive map\n"); + return false; + } + } + return true; +} + +static void add_typeattribute_raw(struct policydb *db, struct type_datum *type, + struct type_datum *attr) +{ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 1, 0) + struct ebitmap *sattr = &db->type_attr_map_array[type->value - 1]; +#elif defined(CONFIG_IS_HW_HISI) + /* + * HISI_SELINUX_EBITMAP_RO is Huawei's unique features. + */ + struct ebitmap *sattr = &db->type_attr_map[type->value - 1], + HISI_SELINUX_EBITMAP_RO; +#else + struct ebitmap *sattr = + flex_array_get(db->type_attr_map_array, type->value - 1); +#endif + ebitmap_set_bit(sattr, attr->value - 1, 1); + + struct hashtab_node *node; + struct constraint_node *n; + struct constraint_expr *e; + ksu_hashtab_for_each(db->p_classes.table, node) + { + struct class_datum *cls = (struct class_datum *)(node->datum); + for (n = cls->constraints; n; n = n->next) { + for (e = n->expr; e; e = e->next) { + if (e->expr_type == CEXPR_NAMES && + ebitmap_get_bit(&e->type_names->types, + attr->value - 1)) { + ebitmap_set_bit(&e->names, + type->value - 1, 1); + } + } + } + }; +} + +static bool add_typeattribute(struct policydb *db, const char *type, + const char *attr) +{ + struct type_datum *type_d = symtab_search(&db->p_types, type); + if (type_d == NULL) { + pr_info("type %s does not exist\n", type); + return false; + } else if (type_d->attribute) { + pr_info("type %s is an attribute\n", attr); + return false; + } + + struct type_datum *attr_d = symtab_search(&db->p_types, attr); + if (attr_d == NULL) { + pr_info("attribute %s does not exist\n", type); + return false; + } else if (!attr_d->attribute) { + pr_info("type %s is not an attribute \n", attr); + return false; + } + + add_typeattribute_raw(db, type_d, attr_d); + return true; +} + +////////////////////////////////////////////////////////////////////////// + +// Operation on types +bool ksu_type(struct policydb *db, const char *name, const char *attr) +{ + return add_type(db, name, false) && add_typeattribute(db, name, attr); +} + +bool ksu_attribute(struct policydb *db, const char *name) +{ + return add_type(db, name, true); +} + +bool ksu_permissive(struct policydb *db, const char *type) +{ + return set_type_state(db, type, true); +} + +bool ksu_enforce(struct policydb *db, const char *type) +{ + return set_type_state(db, type, false); +} + +bool ksu_typeattribute(struct policydb *db, const char *type, const char *attr) +{ + return add_typeattribute(db, type, attr); +} + +bool ksu_exists(struct policydb *db, const char *type) +{ + return symtab_search(&db->p_types, type) != NULL; +} + +// Access vector rules +bool ksu_allow(struct policydb *db, const char *src, const char *tgt, + const char *cls, const char *perm) +{ + return add_rule(db, src, tgt, cls, perm, AVTAB_ALLOWED, false); +} + +bool ksu_deny(struct policydb *db, const char *src, const char *tgt, + const char *cls, const char *perm) +{ + return add_rule(db, src, tgt, cls, perm, AVTAB_ALLOWED, true); +} + +bool ksu_auditallow(struct policydb *db, const char *src, const char *tgt, + const char *cls, const char *perm) +{ + return add_rule(db, src, tgt, cls, perm, AVTAB_AUDITALLOW, false); +} +bool ksu_dontaudit(struct policydb *db, const char *src, const char *tgt, + const char *cls, const char *perm) +{ + return add_rule(db, src, tgt, cls, perm, AVTAB_AUDITDENY, true); +} + +// Extended permissions access vector rules +bool ksu_allowxperm(struct policydb *db, const char *src, const char *tgt, + const char *cls, const char *range) +{ + return add_xperm_rule(db, src, tgt, cls, range, AVTAB_XPERMS_ALLOWED, + false); +} + +bool ksu_auditallowxperm(struct policydb *db, const char *src, const char *tgt, + const char *cls, const char *range) +{ + return add_xperm_rule(db, src, tgt, cls, range, AVTAB_XPERMS_AUDITALLOW, + false); +} + +bool ksu_dontauditxperm(struct policydb *db, const char *src, const char *tgt, + const char *cls, const char *range) +{ + return add_xperm_rule(db, src, tgt, cls, range, AVTAB_XPERMS_DONTAUDIT, + false); +} + +// Type rules +bool ksu_type_transition(struct policydb *db, const char *src, const char *tgt, + const char *cls, const char *def, const char *obj) +{ + if (obj) { + return add_filename_trans(db, src, tgt, cls, def, obj); + } else { + return add_type_rule(db, src, tgt, cls, def, AVTAB_TRANSITION); + } +} + +bool ksu_type_change(struct policydb *db, const char *src, const char *tgt, + const char *cls, const char *def) +{ + return add_type_rule(db, src, tgt, cls, def, AVTAB_CHANGE); +} + +bool ksu_type_member(struct policydb *db, const char *src, const char *tgt, + const char *cls, const char *def) +{ + return add_type_rule(db, src, tgt, cls, def, AVTAB_MEMBER); +} + +// File system labeling +bool ksu_genfscon(struct policydb *db, const char *fs_name, const char *path, + const char *ctx) +{ + return add_genfscon(db, fs_name, path, ctx); +} diff --git a/KernelSU/kernel/selinux/sepolicy.h b/KernelSU/kernel/selinux/sepolicy.h new file mode 100644 index 000000000000..675d1499e46d --- /dev/null +++ b/KernelSU/kernel/selinux/sepolicy.h @@ -0,0 +1,46 @@ +#ifndef __KSU_H_SEPOLICY +#define __KSU_H_SEPOLICY + +#include + +#include "ss/policydb.h" + +// Operation on types +bool ksu_type(struct policydb *db, const char *name, const char *attr); +bool ksu_attribute(struct policydb *db, const char *name); +bool ksu_permissive(struct policydb *db, const char *type); +bool ksu_enforce(struct policydb *db, const char *type); +bool ksu_typeattribute(struct policydb *db, const char *type, const char *attr); +bool ksu_exists(struct policydb *db, const char *type); + +// Access vector rules +bool ksu_allow(struct policydb *db, const char *src, const char *tgt, + const char *cls, const char *perm); +bool ksu_deny(struct policydb *db, const char *src, const char *tgt, + const char *cls, const char *perm); +bool ksu_auditallow(struct policydb *db, const char *src, const char *tgt, + const char *cls, const char *perm); +bool ksu_dontaudit(struct policydb *db, const char *src, const char *tgt, + const char *cls, const char *perm); + +// Extended permissions access vector rules +bool ksu_allowxperm(struct policydb *db, const char *src, const char *tgt, + const char *cls, const char *range); +bool ksu_auditallowxperm(struct policydb *db, const char *src, const char *tgt, + const char *cls, const char *range); +bool ksu_dontauditxperm(struct policydb *db, const char *src, const char *tgt, + const char *cls, const char *range); + +// Type rules +bool ksu_type_transition(struct policydb *db, const char *src, const char *tgt, + const char *cls, const char *def, const char *obj); +bool ksu_type_change(struct policydb *db, const char *src, const char *tgt, + const char *cls, const char *def); +bool ksu_type_member(struct policydb *db, const char *src, const char *tgt, + const char *cls, const char *def); + +// File system labeling +bool ksu_genfscon(struct policydb *db, const char *fs_name, const char *path, + const char *ctx); + +#endif diff --git a/KernelSU/kernel/setup.sh b/KernelSU/kernel/setup.sh new file mode 100755 index 000000000000..e688dbaf3ae5 --- /dev/null +++ b/KernelSU/kernel/setup.sh @@ -0,0 +1,75 @@ +#!/bin/sh +set -eu + +GKI_ROOT=$(pwd) + +display_usage() { + echo "Usage: $0 [--cleanup | ]" + echo " --cleanup: Cleans up previous modifications made by the script." + echo " : Sets up or updates the KernelSU to specified tag or commit." + echo " -h, --help: Displays this usage information." + echo " (no args): Sets up or updates the KernelSU environment to the latest tagged version." +} + +initialize_variables() { + if test -d "$GKI_ROOT/common/drivers"; then + DRIVER_DIR="$GKI_ROOT/common/drivers" + elif test -d "$GKI_ROOT/drivers"; then + DRIVER_DIR="$GKI_ROOT/drivers" + else + echo '[ERROR] "drivers/" directory not found.' + exit 127 + fi + + DRIVER_MAKEFILE=$DRIVER_DIR/Makefile + DRIVER_KCONFIG=$DRIVER_DIR/Kconfig +} + +# Reverts modifications made by this script +perform_cleanup() { + echo "[+] Cleaning up..." + [ -L "$DRIVER_DIR/kernelsu" ] && rm "$DRIVER_DIR/kernelsu" && echo "[-] Symlink removed." + grep -q "kernelsu" "$DRIVER_MAKEFILE" && sed -i '/kernelsu/d' "$DRIVER_MAKEFILE" && echo "[-] Makefile reverted." + grep -q "drivers/kernelsu/Kconfig" "$DRIVER_KCONFIG" && sed -i '/drivers\/kernelsu\/Kconfig/d' "$DRIVER_KCONFIG" && echo "[-] Kconfig reverted." + if [ -d "$GKI_ROOT/KernelSU" ]; then + rm -rf "$GKI_ROOT/KernelSU" && echo "[-] KernelSU directory deleted." + fi +} + +# Sets up or update KernelSU environment +setup_kernelsu() { + echo "[+] Setting up KernelSU..." + test -d "$GKI_ROOT/KernelSU" || git clone https://github.com/tiann/KernelSU && echo "[+] Repository cloned." + cd "$GKI_ROOT/KernelSU" + git stash && echo "[-] Stashed current changes." + if [ "$(git status | grep -Po 'v\d+(\.\d+)*' | head -n1)" ]; then + git checkout main && echo "[-] Switched to main branch." + fi + git pull && echo "[+] Repository updated." + if [ -z "${1-}" ]; then + git checkout "$(git describe --abbrev=0 --tags)" && echo "[-] Checked out latest tag." + else + git checkout "$1" && echo "[-] Checked out $1." || echo "[-] Checkout default branch" + fi + cd "$DRIVER_DIR" + ln -sf "$(realpath --relative-to="$DRIVER_DIR" "$GKI_ROOT/KernelSU/kernel")" "kernelsu" && echo "[+] Symlink created." + + # Add entries in Makefile and Kconfig if not already existing + grep -q "kernelsu" "$DRIVER_MAKEFILE" || printf "\nobj-\$(CONFIG_KSU) += kernelsu/\n" >> "$DRIVER_MAKEFILE" && echo "[+] Modified Makefile." + grep -q "source \"drivers/kernelsu/Kconfig\"" "$DRIVER_KCONFIG" || sed -i "/endmenu/i\source \"drivers/kernelsu/Kconfig\"" "$DRIVER_KCONFIG" && echo "[+] Modified Kconfig." + echo '[+] Done.' +} + +# Process command-line arguments +if [ "$#" -eq 0 ]; then + initialize_variables + setup_kernelsu +elif [ "$1" = "-h" ] || [ "$1" = "--help" ]; then + display_usage +elif [ "$1" = "--cleanup" ]; then + initialize_variables + perform_cleanup +else + initialize_variables + setup_kernelsu "$@" +fi diff --git a/KernelSU/kernel/sucompat.c b/KernelSU/kernel/sucompat.c new file mode 100644 index 000000000000..9b45cd0d9490 --- /dev/null +++ b/KernelSU/kernel/sucompat.c @@ -0,0 +1,367 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0) +#include +#else +#include +#endif + +#include "objsec.h" +#include "allowlist.h" +#include "arch.h" +#include "klog.h" // IWYU pragma: keep +#include "ksud.h" +#include "kernel_compat.h" + +#define SU_PATH "/system/bin/su" +#define SH_PATH "/system/bin/sh" + +extern void escape_to_root(); + +static void __user *userspace_stack_buffer(const void *d, size_t len) +{ + /* To avoid having to mmap a page in userspace, just write below the stack + * pointer. */ + char __user *p = (void __user *)current_user_stack_pointer() - len; + + return copy_to_user(p, d, len) ? NULL : p; +} + +static char __user *sh_user_path(void) +{ + static const char sh_path[] = "/system/bin/sh"; + + return userspace_stack_buffer(sh_path, sizeof(sh_path)); +} + +static char __user *ksud_user_path(void) +{ + static const char ksud_path[] = KSUD_PATH; + + return userspace_stack_buffer(ksud_path, sizeof(ksud_path)); +} + +int ksu_handle_faccessat(int *dfd, const char __user **filename_user, int *mode, + int *__unused_flags) +{ + const char su[] = SU_PATH; + + if (!ksu_is_allow_uid(current_uid().val)) { + return 0; + } + + char path[sizeof(su) + 1]; + memset(path, 0, sizeof(path)); + ksu_strncpy_from_user_nofault(path, *filename_user, sizeof(path)); + + if (unlikely(!memcmp(path, su, sizeof(su)))) { + pr_info("faccessat su->sh!\n"); + *filename_user = sh_user_path(); + } + + return 0; +} + +int ksu_handle_stat(int *dfd, const char __user **filename_user, int *flags) +{ + // const char sh[] = SH_PATH; + const char su[] = SU_PATH; + + if (!ksu_is_allow_uid(current_uid().val)) { + return 0; + } + + if (unlikely(!filename_user)) { + return 0; + } + + char path[sizeof(su) + 1]; + memset(path, 0, sizeof(path)); +// Remove this later!! we use syscall hook, so this will never happen!!!!! +#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 18, 0) && 0 + // it becomes a `struct filename *` after 5.18 + // https://elixir.bootlin.com/linux/v5.18/source/fs/stat.c#L216 + const char sh[] = SH_PATH; + struct filename *filename = *((struct filename **)filename_user); + if (IS_ERR(filename)) { + return 0; + } + if (likely(memcmp(filename->name, su, sizeof(su)))) + return 0; + pr_info("vfs_statx su->sh!\n"); + memcpy((void *)filename->name, sh, sizeof(sh)); +#else + ksu_strncpy_from_user_nofault(path, *filename_user, sizeof(path)); + + if (unlikely(!memcmp(path, su, sizeof(su)))) { + pr_info("newfstatat su->sh!\n"); + *filename_user = sh_user_path(); + } +#endif + + return 0; +} + +// the call from execve_handler_pre won't provided correct value for __never_use_argument, use them after fix execve_handler_pre, keeping them for consistence for manually patched code +int ksu_handle_execveat_sucompat(int *fd, struct filename **filename_ptr, + void *__never_use_argv, void *__never_use_envp, + int *__never_use_flags) +{ + struct filename *filename; + const char sh[] = KSUD_PATH; + const char su[] = SU_PATH; + + if (unlikely(!filename_ptr)) + return 0; + + filename = *filename_ptr; + if (IS_ERR(filename)) { + return 0; + } + + if (likely(memcmp(filename->name, su, sizeof(su)))) + return 0; + + if (!ksu_is_allow_uid(current_uid().val)) + return 0; + + pr_info("do_execveat_common su found\n"); + memcpy((void *)filename->name, sh, sizeof(sh)); + + escape_to_root(); + + return 0; +} + +int ksu_handle_execve_sucompat(int *fd, const char __user **filename_user, + void *__never_use_argv, void *__never_use_envp, + int *__never_use_flags) +{ + const char su[] = SU_PATH; + char path[sizeof(su) + 1]; + + if (unlikely(!filename_user)) + return 0; + + memset(path, 0, sizeof(path)); + ksu_strncpy_from_user_nofault(path, *filename_user, sizeof(path)); + + if (likely(memcmp(path, su, sizeof(su)))) + return 0; + + if (!ksu_is_allow_uid(current_uid().val)) + return 0; + + pr_info("sys_execve su found\n"); + *filename_user = ksud_user_path(); + + escape_to_root(); + + return 0; +} + +int ksu_handle_devpts(struct inode *inode) +{ + if (!current->mm) { + return 0; + } + + uid_t uid = current_uid().val; + if (uid % 100000 < 10000) { + // not untrusted_app, ignore it + return 0; + } + + if (!ksu_is_allow_uid(uid)) + return 0; + + if (ksu_devpts_sid) { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 1, 0) + struct inode_security_struct *sec = selinux_inode(inode); +#else + struct inode_security_struct *sec = + (struct inode_security_struct *)inode->i_security; +#endif + if (sec) { + sec->sid = ksu_devpts_sid; + } + } + + return 0; +} + +#ifdef CONFIG_KPROBES + +__maybe_unused static int faccessat_handler_pre(struct kprobe *p, + struct pt_regs *regs) +{ + int *dfd = (int *)&PT_REGS_PARM1(regs); + const char __user **filename_user = (const char **)&PT_REGS_PARM2(regs); + int *mode = (int *)&PT_REGS_PARM3(regs); + // Both sys_ and do_ is C function + int *flags = (int *)&PT_REGS_CCALL_PARM4(regs); + + return ksu_handle_faccessat(dfd, filename_user, mode, flags); +} + +static int sys_faccessat_handler_pre(struct kprobe *p, struct pt_regs *regs) +{ + struct pt_regs *real_regs = PT_REAL_REGS(regs); + int *dfd = (int *)&PT_REGS_PARM1(real_regs); + const char __user **filename_user = + (const char **)&PT_REGS_PARM2(real_regs); + int *mode = (int *)&PT_REGS_PARM3(real_regs); + + return ksu_handle_faccessat(dfd, filename_user, mode, NULL); +} + +__maybe_unused static int newfstatat_handler_pre(struct kprobe *p, + struct pt_regs *regs) +{ + int *dfd = (int *)&PT_REGS_PARM1(regs); + const char __user **filename_user = (const char **)&PT_REGS_PARM2(regs); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0) + // static int vfs_statx(int dfd, const char __user *filename, int flags, struct kstat *stat, u32 request_mask) + int *flags = (int *)&PT_REGS_PARM3(regs); +#else + // int vfs_fstatat(int dfd, const char __user *filename, struct kstat *stat,int flag) + int *flags = (int *)&PT_REGS_CCALL_PARM4(regs); +#endif + + return ksu_handle_stat(dfd, filename_user, flags); +} + +static int sys_newfstatat_handler_pre(struct kprobe *p, struct pt_regs *regs) +{ + struct pt_regs *real_regs = PT_REAL_REGS(regs); + int *dfd = (int *)&PT_REGS_PARM1(real_regs); + const char __user **filename_user = + (const char **)&PT_REGS_PARM2(real_regs); + int *flags = (int *)&PT_REGS_SYSCALL_PARM4(real_regs); + + return ksu_handle_stat(dfd, filename_user, flags); +} + +// https://elixir.bootlin.com/linux/v5.10.158/source/fs/exec.c#L1864 +static int execve_handler_pre(struct kprobe *p, struct pt_regs *regs) +{ + int *fd = (int *)&PT_REGS_PARM1(regs); + struct filename **filename_ptr = + (struct filename **)&PT_REGS_PARM2(regs); + + return ksu_handle_execveat_sucompat(fd, filename_ptr, NULL, NULL, NULL); +} + +static int sys_execve_handler_pre(struct kprobe *p, struct pt_regs *regs) +{ + struct pt_regs *real_regs = PT_REAL_REGS(regs); + const char __user **filename_user = + (const char **)&PT_REGS_PARM1(real_regs); + + return ksu_handle_execve_sucompat(AT_FDCWD, filename_user, NULL, NULL, + NULL); +} + +#if 1 +static struct kprobe faccessat_kp = { + .symbol_name = SYS_FACCESSAT_SYMBOL, + .pre_handler = sys_faccessat_handler_pre, +}; +#else +static struct kprobe faccessat_kp = { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 17, 0) + .symbol_name = "do_faccessat", +#else + .symbol_name = "sys_faccessat", +#endif + .pre_handler = faccessat_handler_pre, +}; +#endif + +#if 1 +static struct kprobe newfstatat_kp = { + .symbol_name = SYS_NEWFSTATAT_SYMBOL, + .pre_handler = sys_newfstatat_handler_pre, +}; +#else +static struct kprobe newfstatat_kp = { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 11, 0) + .symbol_name = "vfs_statx", +#else + .symbol_name = "vfs_fstatat", +#endif + .pre_handler = newfstatat_handler_pre, +}; +#endif + +#if 1 +static struct kprobe execve_kp = { + .symbol_name = SYS_EXECVE_SYMBOL, + .pre_handler = sys_execve_handler_pre, +}; +#else +static struct kprobe execve_kp = { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 9, 0) + .symbol_name = "do_execveat_common", +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 0) + .symbol_name = "__do_execve_file", +#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) + .symbol_name = "do_execveat_common", +#endif + .pre_handler = execve_handler_pre, +}; +#endif + +static int pts_unix98_lookup_pre(struct kprobe *p, struct pt_regs *regs) +{ + struct inode *inode; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0) + struct file *file = (struct file *)PT_REGS_PARM2(regs); + inode = file->f_path.dentry->d_inode; +#else + inode = (struct inode *)PT_REGS_PARM2(regs); +#endif + + return ksu_handle_devpts(inode); +} + +static struct kprobe pts_unix98_lookup_kp = { .symbol_name = + "pts_unix98_lookup", + .pre_handler = + pts_unix98_lookup_pre }; + +#endif + +// sucompat: permited process can execute 'su' to gain root access. +void ksu_sucompat_init() +{ +#ifdef CONFIG_KPROBES + int ret; + ret = register_kprobe(&execve_kp); + pr_info("sucompat: execve_kp: %d\n", ret); + ret = register_kprobe(&newfstatat_kp); + pr_info("sucompat: newfstatat_kp: %d\n", ret); + ret = register_kprobe(&faccessat_kp); + pr_info("sucompat: faccessat_kp: %d\n", ret); + ret = register_kprobe(&pts_unix98_lookup_kp); + pr_info("sucompat: devpts_kp: %d\n", ret); +#endif +} + +void ksu_sucompat_exit() +{ +#ifdef CONFIG_KPROBES + unregister_kprobe(&execve_kp); + unregister_kprobe(&newfstatat_kp); + unregister_kprobe(&faccessat_kp); + unregister_kprobe(&pts_unix98_lookup_kp); +#endif +} diff --git a/KernelSU/kernel/throne_tracker.c b/KernelSU/kernel/throne_tracker.c new file mode 100644 index 000000000000..c709a6921a23 --- /dev/null +++ b/KernelSU/kernel/throne_tracker.c @@ -0,0 +1,382 @@ +#include +#include +#include +#include +#include +#include +#include + +#include "allowlist.h" +#include "klog.h" // IWYU pragma: keep +#include "ksu.h" +#include "manager.h" +#include "throne_tracker.h" +#include "kernel_compat.h" + +uid_t ksu_manager_uid = KSU_INVALID_UID; + +#define SYSTEM_PACKAGES_LIST_PATH "/data/system/packages.list.tmp" + +struct uid_data { + struct list_head list; + u32 uid; + char package[KSU_MAX_PACKAGE_NAME]; +}; + +static int get_pkg_from_apk_path(char *pkg, const char *path) +{ + int len = strlen(path); + if (len >= KSU_MAX_PACKAGE_NAME || len < 1) + return -1; + + const char *last_slash = NULL; + const char *second_last_slash = NULL; + + int i; + for (i = len - 1; i >= 0; i--) { + if (path[i] == '/') { + if (!last_slash) { + last_slash = &path[i]; + } else { + second_last_slash = &path[i]; + break; + } + } + } + + if (!last_slash || !second_last_slash) + return -1; + + const char *last_hyphen = strchr(second_last_slash, '-'); + if (!last_hyphen || last_hyphen > last_slash) + return -1; + + int pkg_len = last_hyphen - second_last_slash - 1; + if (pkg_len >= KSU_MAX_PACKAGE_NAME || pkg_len <= 0) + return -1; + + // Copying the package name + strncpy(pkg, second_last_slash + 1, pkg_len); + pkg[pkg_len] = '\0'; + + return 0; +} + +static void crown_manager(const char *apk, struct list_head *uid_data) +{ + char pkg[KSU_MAX_PACKAGE_NAME]; + if (get_pkg_from_apk_path(pkg, apk) < 0) { + pr_err("Failed to get package name from apk path: %s\n", apk); + return; + } + + pr_info("manager pkg: %s\n", pkg); + +#ifdef KSU_MANAGER_PACKAGE + // pkg is `/` + if (strncmp(pkg, KSU_MANAGER_PACKAGE, sizeof(KSU_MANAGER_PACKAGE))) { + pr_info("manager package is inconsistent with kernel build: %s\n", + KSU_MANAGER_PACKAGE); + return; + } +#endif + struct list_head *list = (struct list_head *)uid_data; + struct uid_data *np; + + list_for_each_entry (np, list, list) { + if (strncmp(np->package, pkg, KSU_MAX_PACKAGE_NAME) == 0) { + pr_info("Crowning manager: %s(uid=%d)\n", pkg, np->uid); + ksu_set_manager_uid(np->uid); + break; + } + } +} + +#define DATA_PATH_LEN 384 // 384 is enough for /data/app//base.apk + +struct data_path { + char dirpath[DATA_PATH_LEN]; + int depth; + struct list_head list; +}; + +struct apk_path_hash { + unsigned int hash; + bool exists; + struct list_head list; +}; + +static struct list_head apk_path_hash_list = LIST_HEAD_INIT(apk_path_hash_list); + +struct my_dir_context { + struct dir_context ctx; + struct list_head *data_path_list; + char *parent_dir; + void *private_data; + int depth; + int *stop; +}; +// https://docs.kernel.org/filesystems/porting.html +// filldir_t (readdir callbacks) calling conventions have changed. Instead of returning 0 or -E... it returns bool now. false means "no more" (as -E... used to) and true - "keep going" (as 0 in old calling conventions). Rationale: callers never looked at specific -E... values anyway. -> iterate_shared() instances require no changes at all, all filldir_t ones in the tree converted. +#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 1, 0) +#define FILLDIR_RETURN_TYPE bool +#define FILLDIR_ACTOR_CONTINUE true +#define FILLDIR_ACTOR_STOP false +#else +#define FILLDIR_RETURN_TYPE int +#define FILLDIR_ACTOR_CONTINUE 0 +#define FILLDIR_ACTOR_STOP -EINVAL +#endif + +FILLDIR_RETURN_TYPE my_actor(struct dir_context *ctx, const char *name, + int namelen, loff_t off, u64 ino, + unsigned int d_type) +{ + struct my_dir_context *my_ctx = + container_of(ctx, struct my_dir_context, ctx); + char dirpath[DATA_PATH_LEN]; + + if (!my_ctx) { + pr_err("Invalid context\n"); + return FILLDIR_ACTOR_STOP; + } + if (my_ctx->stop && *my_ctx->stop) { + pr_info("Stop searching\n"); + return FILLDIR_ACTOR_STOP; + } + + if (!strncmp(name, "..", namelen) || !strncmp(name, ".", namelen)) + return FILLDIR_ACTOR_CONTINUE; // Skip "." and ".." + + if (snprintf(dirpath, DATA_PATH_LEN, "%s/%.*s", my_ctx->parent_dir, + namelen, name) >= DATA_PATH_LEN) { + pr_err("Path too long: %s/%.*s\n", my_ctx->parent_dir, namelen, + name); + return FILLDIR_ACTOR_CONTINUE; + } + + if (d_type == DT_DIR && my_ctx->depth > 0 && + (my_ctx->stop && !*my_ctx->stop)) { + struct data_path *data = kmalloc(sizeof(struct data_path), GFP_ATOMIC); + + if (!data) { + pr_err("Failed to allocate memory for %s\n", dirpath); + return FILLDIR_ACTOR_CONTINUE; + } + + strscpy(data->dirpath, dirpath, DATA_PATH_LEN); + data->depth = my_ctx->depth - 1; + list_add_tail(&data->list, my_ctx->data_path_list); + } else { + if ((namelen == 8) && (strncmp(name, "base.apk", namelen) == 0)) { + struct apk_path_hash *pos, *n; +#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 8, 0) + unsigned int hash = full_name_hash(dirpath, strlen(dirpath)); +#else + unsigned int hash = full_name_hash(NULL, dirpath, strlen(dirpath)); +#endif + list_for_each_entry(pos, &apk_path_hash_list, list) { + if (hash == pos->hash) { + pos->exists = true; + return FILLDIR_ACTOR_CONTINUE; + } + } + + bool is_manager = is_manager_apk(dirpath); + pr_info("Found new base.apk at path: %s, is_manager: %d\n", + dirpath, is_manager); + if (is_manager) { + crown_manager(dirpath, my_ctx->private_data); + *my_ctx->stop = 1; + + // Manager found, clear APK cache list + list_for_each_entry_safe(pos, n, &apk_path_hash_list, list) { + list_del(&pos->list); + kfree(pos); + } + } else { + struct apk_path_hash *apk_data = kmalloc(sizeof(struct apk_path_hash), GFP_ATOMIC); + apk_data->hash = hash; + apk_data->exists = true; + list_add_tail(&apk_data->list, &apk_path_hash_list); + } + } + } + + return FILLDIR_ACTOR_CONTINUE; +} + +void search_manager(const char *path, int depth, struct list_head *uid_data) +{ + int i, stop = 0; + struct list_head data_path_list; + INIT_LIST_HEAD(&data_path_list); + + // Initialize APK cache list + struct apk_path_hash *pos, *n; + list_for_each_entry(pos, &apk_path_hash_list, list) { + pos->exists = false; + } + + // First depth + struct data_path data; + strscpy(data.dirpath, path, DATA_PATH_LEN); + data.depth = depth; + list_add_tail(&data.list, &data_path_list); + + for (i = depth; i > 0; i--) { + struct data_path *pos, *n; + + list_for_each_entry_safe(pos, n, &data_path_list, list) { + struct my_dir_context ctx = { .ctx.actor = my_actor, + .data_path_list = &data_path_list, + .parent_dir = pos->dirpath, + .private_data = uid_data, + .depth = pos->depth, + .stop = &stop }; + struct file *file; + + if (!stop) { + file = ksu_filp_open_compat(pos->dirpath, O_RDONLY | O_NOFOLLOW, 0); + if (IS_ERR(file)) { + pr_err("Failed to open directory: %s, err: %ld\n", pos->dirpath, PTR_ERR(file)); + return; + } + + iterate_dir(file, &ctx.ctx); + filp_close(file, NULL); + } + + list_del(&pos->list); + if (pos != &data) + kfree(pos); + } + } + + // Remove stale cached APK entries + list_for_each_entry_safe(pos, n, &apk_path_hash_list, list) { + if (!pos->exists) { + list_del(&pos->list); + kfree(pos); + } + } +} + +static bool is_uid_exist(uid_t uid, char *package, void *data) +{ + struct list_head *list = (struct list_head *)data; + struct uid_data *np; + + bool exist = false; + list_for_each_entry (np, list, list) { + if (np->uid == uid % 100000 && + strncmp(np->package, package, KSU_MAX_PACKAGE_NAME) == 0) { + exist = true; + break; + } + } + return exist; +} + +void track_throne() +{ + struct file *fp = + ksu_filp_open_compat(SYSTEM_PACKAGES_LIST_PATH, O_RDONLY, 0); + if (IS_ERR(fp)) { + pr_err("%s: open " SYSTEM_PACKAGES_LIST_PATH " failed: %ld\n", + __func__, PTR_ERR(fp)); + return; + } + + struct list_head uid_list; + INIT_LIST_HEAD(&uid_list); + + char chr = 0; + loff_t pos = 0; + loff_t line_start = 0; + char buf[KSU_MAX_PACKAGE_NAME]; + for (;;) { + ssize_t count = + ksu_kernel_read_compat(fp, &chr, sizeof(chr), &pos); + if (count != sizeof(chr)) + break; + if (chr != '\n') + continue; + + count = ksu_kernel_read_compat(fp, buf, sizeof(buf), + &line_start); + + struct uid_data *data = + kzalloc(sizeof(struct uid_data), GFP_ATOMIC); + if (!data) { + filp_close(fp, 0); + goto out; + } + + char *tmp = buf; + const char *delim = " "; + char *package = strsep(&tmp, delim); + char *uid = strsep(&tmp, delim); + if (!uid || !package) { + pr_err("update_uid: package or uid is NULL!\n"); + break; + } + + u32 res; + if (kstrtou32(uid, 10, &res)) { + pr_err("update_uid: uid parse err\n"); + break; + } + data->uid = res; + strncpy(data->package, package, KSU_MAX_PACKAGE_NAME); + list_add_tail(&data->list, &uid_list); + // reset line start + line_start = pos; + } + filp_close(fp, 0); + + // now update uid list + struct uid_data *np; + struct uid_data *n; + + // first, check if manager_uid exist! + bool manager_exist = false; + list_for_each_entry (np, &uid_list, list) { + // if manager is installed in work profile, the uid in packages.list is still equals main profile + // don't delete it in this case! + int manager_uid = ksu_get_manager_uid() % 100000; + if (np->uid == manager_uid) { + manager_exist = true; + break; + } + } + + if (!manager_exist) { + if (ksu_is_manager_uid_valid()) { + pr_info("manager is uninstalled, invalidate it!\n"); + ksu_invalidate_manager_uid(); + } + pr_info("Searching manager...\n"); + search_manager("/data/app", 2, &uid_list); + pr_info("Search manager finished\n"); + } + + // then prune the allowlist + ksu_prune_allowlist(is_uid_exist, &uid_list); +out: + // free uid_list + list_for_each_entry_safe (np, n, &uid_list, list) { + list_del(&np->list); + kfree(np); + } +} + +void ksu_throne_tracker_init() +{ + // nothing to do +} + +void ksu_throne_tracker_exit() +{ + // nothing to do +} diff --git a/KernelSU/kernel/throne_tracker.h b/KernelSU/kernel/throne_tracker.h new file mode 100644 index 000000000000..5d7f477003ac --- /dev/null +++ b/KernelSU/kernel/throne_tracker.h @@ -0,0 +1,10 @@ +#ifndef __KSU_H_UID_OBSERVER +#define __KSU_H_UID_OBSERVER + +void ksu_throne_tracker_init(); + +void ksu_throne_tracker_exit(); + +void track_throne(); + +#endif diff --git a/KernelSU/manager/.gitignore b/KernelSU/manager/.gitignore new file mode 100644 index 000000000000..dd42da43f547 --- /dev/null +++ b/KernelSU/manager/.gitignore @@ -0,0 +1,9 @@ +*.iml +.gradle +local.properties +.idea +.DS_Store +build +captures +.cxx +key.jks diff --git a/KernelSU/manager/app/.gitignore b/KernelSU/manager/app/.gitignore new file mode 100644 index 000000000000..dc5ca963c57a --- /dev/null +++ b/KernelSU/manager/app/.gitignore @@ -0,0 +1,2 @@ +/build +/release/ diff --git a/KernelSU/manager/app/build.gradle.kts b/KernelSU/manager/app/build.gradle.kts new file mode 100644 index 000000000000..1c85d8af7e8a --- /dev/null +++ b/KernelSU/manager/app/build.gradle.kts @@ -0,0 +1,116 @@ +import com.android.build.gradle.internal.api.BaseVariantOutputImpl + +plugins { + alias(libs.plugins.agp.app) + alias(libs.plugins.kotlin) + alias(libs.plugins.compose.compiler) + alias(libs.plugins.ksp) + alias(libs.plugins.lsplugin.apksign) + id("kotlin-parcelize") +} + +val managerVersionCode: Int by rootProject.extra +val managerVersionName: String by rootProject.extra + +apksign { + storeFileProperty = "KEYSTORE_FILE" + storePasswordProperty = "KEYSTORE_PASSWORD" + keyAliasProperty = "KEY_ALIAS" + keyPasswordProperty = "KEY_PASSWORD" +} + +android { + namespace = "me.weishu.kernelsu" + + buildTypes { + release { + isMinifyEnabled = true + isShrinkResources = true + proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") + } + } + + buildFeatures { + aidl = true + buildConfig = true + compose = true + } + + kotlinOptions { + jvmTarget = "21" + } + + packaging { + jniLibs { + useLegacyPackaging = true + } + resources { + excludes += "/META-INF/{AL2.0,LGPL2.1}" + } + } + + externalNativeBuild { + cmake { + path("src/main/cpp/CMakeLists.txt") + } + } + + applicationVariants.all { + outputs.forEach { + val output = it as BaseVariantOutputImpl + output.outputFileName = "KernelSU_${managerVersionName}_${managerVersionCode}-$name.apk" + } + + kotlin.sourceSets { + getByName(name) { + kotlin.srcDir("build/generated/ksp/$name/kotlin") + } + } + } +} + +dependencies { + implementation(libs.androidx.activity.compose) + implementation(libs.androidx.navigation.compose) + + implementation(platform(libs.androidx.compose.bom)) + implementation(libs.androidx.compose.material.icons.extended) + implementation(libs.androidx.compose.material) + implementation(libs.androidx.compose.material3) + implementation(libs.androidx.compose.ui) + implementation(libs.androidx.compose.ui.tooling.preview) + + debugImplementation(libs.androidx.compose.ui.test.manifest) + debugImplementation(libs.androidx.compose.ui.tooling) + + implementation(libs.androidx.lifecycle.runtime.compose) + implementation(libs.androidx.lifecycle.runtime.ktx) + implementation(libs.androidx.lifecycle.viewmodel.compose) + + implementation(libs.com.google.accompanist.drawablepainter) + implementation(libs.com.google.accompanist.navigation.animation) + implementation(libs.com.google.accompanist.systemuicontroller) + implementation(libs.com.google.accompanist.webview) + + implementation(libs.compose.destinations.animations.core) + ksp(libs.compose.destinations.ksp) + + implementation(libs.com.github.topjohnwu.libsu.core) + implementation(libs.com.github.topjohnwu.libsu.service) + implementation(libs.com.github.topjohnwu.libsu.io) + + implementation(libs.dev.rikka.rikkax.parcelablelist) + + implementation(libs.io.coil.kt.coil.compose) + + implementation(libs.kotlinx.coroutines.core) + + implementation(libs.me.zhanghai.android.appiconloader.coil) + + implementation(libs.sheet.compose.dialogs.core) + implementation(libs.sheet.compose.dialogs.list) + implementation(libs.sheet.compose.dialogs.input) + + implementation(libs.markdown) + implementation(libs.androidx.webkit) +} \ No newline at end of file diff --git a/KernelSU/manager/app/proguard-rules.pro b/KernelSU/manager/app/proguard-rules.pro new file mode 100644 index 000000000000..dcaf39ce70fe --- /dev/null +++ b/KernelSU/manager/app/proguard-rules.pro @@ -0,0 +1,9 @@ +-dontwarn org.bouncycastle.jsse.BCSSLParameters +-dontwarn org.bouncycastle.jsse.BCSSLSocket +-dontwarn org.bouncycastle.jsse.provider.BouncyCastleJsseProvider +-dontwarn org.conscrypt.Conscrypt$Version +-dontwarn org.conscrypt.Conscrypt +-dontwarn org.conscrypt.ConscryptHostnameVerifier +-dontwarn org.openjsse.javax.net.ssl.SSLParameters +-dontwarn org.openjsse.javax.net.ssl.SSLSocket +-dontwarn org.openjsse.net.ssl.OpenJSSE diff --git a/KernelSU/manager/app/src/main/AndroidManifest.xml b/KernelSU/manager/app/src/main/AndroidManifest.xml new file mode 100644 index 000000000000..32c920ab4c3b --- /dev/null +++ b/KernelSU/manager/app/src/main/AndroidManifest.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/aidl/me/weishu/kernelsu/IKsuInterface.aidl b/KernelSU/manager/app/src/main/aidl/me/weishu/kernelsu/IKsuInterface.aidl new file mode 100644 index 000000000000..a6545566bb4f --- /dev/null +++ b/KernelSU/manager/app/src/main/aidl/me/weishu/kernelsu/IKsuInterface.aidl @@ -0,0 +1,9 @@ +// IKsuInterface.aidl +package me.weishu.kernelsu; + +import android.content.pm.PackageInfo; +import rikka.parcelablelist.ParcelableListSlice; + +interface IKsuInterface { + ParcelableListSlice getPackages(int flags); +} \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/cpp/CMakeLists.txt b/KernelSU/manager/app/src/main/cpp/CMakeLists.txt new file mode 100644 index 000000000000..cca26d5e4aef --- /dev/null +++ b/KernelSU/manager/app/src/main/cpp/CMakeLists.txt @@ -0,0 +1,18 @@ + +# For more information about using CMake with Android Studio, read the +# documentation: https://d.android.com/studio/projects/add-native-code.html + +# Sets the minimum version of CMake required to build the native library. +cmake_minimum_required(VERSION 3.18.1) + +project("kernelsu") + +add_library(kernelsu + SHARED + jni.cc + ksu.cc + ) + +find_library(log-lib log) + +target_link_libraries(kernelsu ${log-lib}) \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/cpp/jni.cc b/KernelSU/manager/app/src/main/cpp/jni.cc new file mode 100644 index 000000000000..b0d28698742b --- /dev/null +++ b/KernelSU/manager/app/src/main/cpp/jni.cc @@ -0,0 +1,298 @@ +#include + +#include + +#include +#include + +#include "ksu.h" + +#define LOG_TAG "KernelSU" +#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__) + +extern "C" +JNIEXPORT jboolean JNICALL +Java_me_weishu_kernelsu_Natives_becomeManager(JNIEnv *env, jobject, jstring pkg) { + auto cpkg = env->GetStringUTFChars(pkg, nullptr); + auto result = become_manager(cpkg); + env->ReleaseStringUTFChars(pkg, cpkg); + return result; +} + +extern "C" +JNIEXPORT jint JNICALL +Java_me_weishu_kernelsu_Natives_getVersion(JNIEnv *env, jobject) { + return get_version(); +} + +extern "C" +JNIEXPORT jintArray JNICALL +Java_me_weishu_kernelsu_Natives_getAllowList(JNIEnv *env, jobject) { + int uids[1024]; + int size = 0; + bool result = get_allow_list(uids, &size); + LOGD("getAllowList: %d, size: %d", result, size); + if (result) { + auto array = env->NewIntArray(size); + env->SetIntArrayRegion(array, 0, size, uids); + return array; + } + return env->NewIntArray(0); +} + +extern "C" +JNIEXPORT jboolean JNICALL +Java_me_weishu_kernelsu_Natives_isSafeMode(JNIEnv *env, jclass clazz) { + return is_safe_mode(); +} + +extern "C" +JNIEXPORT jboolean JNICALL +Java_me_weishu_kernelsu_Natives_isLkmMode(JNIEnv *env, jclass clazz) { + return is_lkm_mode(); +} + +static void fillIntArray(JNIEnv *env, jobject list, int *data, int count) { + auto cls = env->GetObjectClass(list); + auto add = env->GetMethodID(cls, "add", "(Ljava/lang/Object;)Z"); + auto integerCls = env->FindClass("java/lang/Integer"); + auto constructor = env->GetMethodID(integerCls, "", "(I)V"); + for (int i = 0; i < count; ++i) { + auto integer = env->NewObject(integerCls, constructor, data[i]); + env->CallBooleanMethod(list, add, integer); + } +} + +static void addIntToList(JNIEnv *env, jobject list, int ele) { + auto cls = env->GetObjectClass(list); + auto add = env->GetMethodID(cls, "add", "(Ljava/lang/Object;)Z"); + auto integerCls = env->FindClass("java/lang/Integer"); + auto constructor = env->GetMethodID(integerCls, "", "(I)V"); + auto integer = env->NewObject(integerCls, constructor, ele); + env->CallBooleanMethod(list, add, integer); +} + +static uint64_t capListToBits(JNIEnv *env, jobject list) { + auto cls = env->GetObjectClass(list); + auto get = env->GetMethodID(cls, "get", "(I)Ljava/lang/Object;"); + auto size = env->GetMethodID(cls, "size", "()I"); + auto listSize = env->CallIntMethod(list, size); + auto integerCls = env->FindClass("java/lang/Integer"); + auto intValue = env->GetMethodID(integerCls, "intValue", "()I"); + uint64_t result = 0; + for (int i = 0; i < listSize; ++i) { + auto integer = env->CallObjectMethod(list, get, i); + int data = env->CallIntMethod(integer, intValue); + + if (cap_valid(data)) { + result |= (1ULL << data); + } + } + + return result; +} + +static int getListSize(JNIEnv *env, jobject list) { + auto cls = env->GetObjectClass(list); + auto size = env->GetMethodID(cls, "size", "()I"); + return env->CallIntMethod(list, size); +} + +static void fillArrayWithList(JNIEnv *env, jobject list, int *data, int count) { + auto cls = env->GetObjectClass(list); + auto get = env->GetMethodID(cls, "get", "(I)Ljava/lang/Object;"); + auto integerCls = env->FindClass("java/lang/Integer"); + auto intValue = env->GetMethodID(integerCls, "intValue", "()I"); + for (int i = 0; i < count; ++i) { + auto integer = env->CallObjectMethod(list, get, i); + data[i] = env->CallIntMethod(integer, intValue); + } +} + +extern "C" +JNIEXPORT jobject JNICALL +Java_me_weishu_kernelsu_Natives_getAppProfile(JNIEnv *env, jobject, jstring pkg, jint uid) { + if (env->GetStringLength(pkg) > KSU_MAX_PACKAGE_NAME) { + return nullptr; + } + + p_key_t key = {}; + auto cpkg = env->GetStringUTFChars(pkg, nullptr); + strcpy(key, cpkg); + env->ReleaseStringUTFChars(pkg, cpkg); + + app_profile profile = {}; + profile.version = KSU_APP_PROFILE_VER; + + strcpy(profile.key, key); + profile.current_uid = uid; + + bool useDefaultProfile = !get_app_profile(key, &profile); + + auto cls = env->FindClass("me/weishu/kernelsu/Natives$Profile"); + auto constructor = env->GetMethodID(cls, "", "()V"); + auto obj = env->NewObject(cls, constructor); + auto keyField = env->GetFieldID(cls, "name", "Ljava/lang/String;"); + auto currentUidField = env->GetFieldID(cls, "currentUid", "I"); + auto allowSuField = env->GetFieldID(cls, "allowSu", "Z"); + + auto rootUseDefaultField = env->GetFieldID(cls, "rootUseDefault", "Z"); + auto rootTemplateField = env->GetFieldID(cls, "rootTemplate", "Ljava/lang/String;"); + + auto uidField = env->GetFieldID(cls, "uid", "I"); + auto gidField = env->GetFieldID(cls, "gid", "I"); + auto groupsField = env->GetFieldID(cls, "groups", "Ljava/util/List;"); + auto capabilitiesField = env->GetFieldID(cls, "capabilities", "Ljava/util/List;"); + auto domainField = env->GetFieldID(cls, "context", "Ljava/lang/String;"); + auto namespacesField = env->GetFieldID(cls, "namespace", "I"); + + auto nonRootUseDefaultField = env->GetFieldID(cls, "nonRootUseDefault", "Z"); + auto umountModulesField = env->GetFieldID(cls, "umountModules", "Z"); + + env->SetObjectField(obj, keyField, env->NewStringUTF(profile.key)); + env->SetIntField(obj, currentUidField, profile.current_uid); + + if (useDefaultProfile) { + // no profile found, so just use default profile: + // don't allow root and use default profile! + LOGD("use default profile for: %s, %d", key, uid); + + // allow_su = false + // non root use default = true + env->SetBooleanField(obj, allowSuField, false); + env->SetBooleanField(obj, nonRootUseDefaultField, true); + + return obj; + } + + auto allowSu = profile.allow_su; + + if (allowSu) { + env->SetBooleanField(obj, rootUseDefaultField, (jboolean) profile.rp_config.use_default); + if (strlen(profile.rp_config.template_name) > 0) { + env->SetObjectField(obj, rootTemplateField, + env->NewStringUTF(profile.rp_config.template_name)); + } + + env->SetIntField(obj, uidField, profile.rp_config.profile.uid); + env->SetIntField(obj, gidField, profile.rp_config.profile.gid); + + jobject groupList = env->GetObjectField(obj, groupsField); + int groupCount = profile.rp_config.profile.groups_count; + if (groupCount > KSU_MAX_GROUPS) { + LOGD("kernel group count too large: %d???", groupCount); + groupCount = KSU_MAX_GROUPS; + } + fillIntArray(env, groupList, profile.rp_config.profile.groups, groupCount); + + jobject capList = env->GetObjectField(obj, capabilitiesField); + for (int i = 0; i <= CAP_LAST_CAP; i++) { + if (profile.rp_config.profile.capabilities.effective & (1ULL << i)) { + addIntToList(env, capList, i); + } + } + + env->SetObjectField(obj, domainField, + env->NewStringUTF(profile.rp_config.profile.selinux_domain)); + env->SetIntField(obj, namespacesField, profile.rp_config.profile.namespaces); + env->SetBooleanField(obj, allowSuField, profile.allow_su); + } else { + env->SetBooleanField(obj, nonRootUseDefaultField, + (jboolean) profile.nrp_config.use_default); + env->SetBooleanField(obj, umountModulesField, profile.nrp_config.profile.umount_modules); + } + + return obj; +} + +extern "C" +JNIEXPORT jboolean JNICALL +Java_me_weishu_kernelsu_Natives_setAppProfile(JNIEnv *env, jobject clazz, jobject profile) { + auto cls = env->FindClass("me/weishu/kernelsu/Natives$Profile"); + + auto keyField = env->GetFieldID(cls, "name", "Ljava/lang/String;"); + auto currentUidField = env->GetFieldID(cls, "currentUid", "I"); + auto allowSuField = env->GetFieldID(cls, "allowSu", "Z"); + + auto rootUseDefaultField = env->GetFieldID(cls, "rootUseDefault", "Z"); + auto rootTemplateField = env->GetFieldID(cls, "rootTemplate", "Ljava/lang/String;"); + + auto uidField = env->GetFieldID(cls, "uid", "I"); + auto gidField = env->GetFieldID(cls, "gid", "I"); + auto groupsField = env->GetFieldID(cls, "groups", "Ljava/util/List;"); + auto capabilitiesField = env->GetFieldID(cls, "capabilities", "Ljava/util/List;"); + auto domainField = env->GetFieldID(cls, "context", "Ljava/lang/String;"); + auto namespacesField = env->GetFieldID(cls, "namespace", "I"); + + auto nonRootUseDefaultField = env->GetFieldID(cls, "nonRootUseDefault", "Z"); + auto umountModulesField = env->GetFieldID(cls, "umountModules", "Z"); + + auto key = env->GetObjectField(profile, keyField); + if (!key) { + return false; + } + if (env->GetStringLength((jstring) key) > KSU_MAX_PACKAGE_NAME) { + return false; + } + + auto cpkg = env->GetStringUTFChars((jstring) key, nullptr); + p_key_t p_key = {}; + strcpy(p_key, cpkg); + env->ReleaseStringUTFChars((jstring) key, cpkg); + + auto currentUid = env->GetIntField(profile, currentUidField); + + auto uid = env->GetIntField(profile, uidField); + auto gid = env->GetIntField(profile, gidField); + auto groups = env->GetObjectField(profile, groupsField); + auto capabilities = env->GetObjectField(profile, capabilitiesField); + auto domain = env->GetObjectField(profile, domainField); + auto allowSu = env->GetBooleanField(profile, allowSuField); + auto umountModules = env->GetBooleanField(profile, umountModulesField); + + app_profile p = {}; + p.version = KSU_APP_PROFILE_VER; + + strcpy(p.key, p_key); + p.allow_su = allowSu; + p.current_uid = currentUid; + + if (allowSu) { + p.rp_config.use_default = env->GetBooleanField(profile, rootUseDefaultField); + auto templateName = env->GetObjectField(profile, rootTemplateField); + if (templateName) { + auto ctemplateName = env->GetStringUTFChars((jstring) templateName, nullptr); + strcpy(p.rp_config.template_name, ctemplateName); + env->ReleaseStringUTFChars((jstring) templateName, ctemplateName); + } + + p.rp_config.profile.uid = uid; + p.rp_config.profile.gid = gid; + + int groups_count = getListSize(env, groups); + if (groups_count > KSU_MAX_GROUPS) { + LOGD("groups count too large: %d", groups_count); + return false; + } + p.rp_config.profile.groups_count = groups_count; + fillArrayWithList(env, groups, p.rp_config.profile.groups, groups_count); + + p.rp_config.profile.capabilities.effective = capListToBits(env, capabilities); + + auto cdomain = env->GetStringUTFChars((jstring) domain, nullptr); + strcpy(p.rp_config.profile.selinux_domain, cdomain); + env->ReleaseStringUTFChars((jstring) domain, cdomain); + + p.rp_config.profile.namespaces = env->GetIntField(profile, namespacesField); + } else { + p.nrp_config.use_default = env->GetBooleanField(profile, nonRootUseDefaultField); + p.nrp_config.profile.umount_modules = umountModules; + } + + return set_app_profile(&p); +} +extern "C" +JNIEXPORT jboolean JNICALL +Java_me_weishu_kernelsu_Natives_uidShouldUmount(JNIEnv *env, jobject thiz, jint uid) { + return uid_should_umount(uid); +} \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/cpp/ksu.cc b/KernelSU/manager/app/src/main/cpp/ksu.cc new file mode 100644 index 000000000000..1e7981892f00 --- /dev/null +++ b/KernelSU/manager/app/src/main/cpp/ksu.cc @@ -0,0 +1,86 @@ +// +// Created by weishu on 2022/12/9. +// + +#include +#include +#include +#include +#include + +#include "ksu.h" + +#define KERNEL_SU_OPTION 0xDEADBEEF + +#define CMD_GRANT_ROOT 0 + +#define CMD_BECOME_MANAGER 1 +#define CMD_GET_VERSION 2 +#define CMD_ALLOW_SU 3 +#define CMD_DENY_SU 4 +#define CMD_GET_SU_LIST 5 +#define CMD_GET_DENY_LIST 6 +#define CMD_CHECK_SAFEMODE 9 + +#define CMD_GET_APP_PROFILE 10 +#define CMD_SET_APP_PROFILE 11 + +#define CMD_IS_UID_GRANTED_ROOT 12 +#define CMD_IS_UID_SHOULD_UMOUNT 13 + +static bool ksuctl(int cmd, void* arg1, void* arg2) { + int32_t result = 0; + prctl(KERNEL_SU_OPTION, cmd, arg1, arg2, &result); + return result == KERNEL_SU_OPTION; +} + +bool become_manager(const char* pkg) { + char param[128]; + uid_t uid = getuid(); + uint32_t userId = uid / 100000; + if (userId == 0) { + sprintf(param, "/data/data/%s", pkg); + } else { + snprintf(param, sizeof(param), "/data/user/%d/%s", userId, pkg); + } + + return ksuctl(CMD_BECOME_MANAGER, param, nullptr); +} + +// cache the result to avoid unnecessary syscall +static bool is_lkm; +int get_version() { + int32_t version = -1; + int32_t lkm = 0; + ksuctl(CMD_GET_VERSION, &version, &lkm); + if (!is_lkm && lkm != 0) { + is_lkm = true; + } + return version; +} + +bool get_allow_list(int *uids, int *size) { + return ksuctl(CMD_GET_SU_LIST, uids, size); +} + +bool is_safe_mode() { + return ksuctl(CMD_CHECK_SAFEMODE, nullptr, nullptr); +} + +bool is_lkm_mode() { + // you should call get_version first! + return is_lkm; +} + +bool uid_should_umount(int uid) { + bool should; + return ksuctl(CMD_IS_UID_SHOULD_UMOUNT, reinterpret_cast(uid), &should) && should; +} + +bool set_app_profile(const app_profile *profile) { + return ksuctl(CMD_SET_APP_PROFILE, (void*) profile, nullptr); +} + +bool get_app_profile(p_key_t key, app_profile *profile) { + return ksuctl(CMD_GET_APP_PROFILE, (void*) profile, nullptr); +} diff --git a/KernelSU/manager/app/src/main/cpp/ksu.h b/KernelSU/manager/app/src/main/cpp/ksu.h new file mode 100644 index 000000000000..160a9d6faa0b --- /dev/null +++ b/KernelSU/manager/app/src/main/cpp/ksu.h @@ -0,0 +1,82 @@ +// +// Created by weishu on 2022/12/9. +// + +#ifndef KERNELSU_KSU_H +#define KERNELSU_KSU_H + +#include + +bool become_manager(const char *); + +int get_version(); + +bool get_allow_list(int *uids, int *size); + +bool uid_should_umount(int uid); + +bool is_safe_mode(); + +bool is_lkm_mode(); + +#define KSU_APP_PROFILE_VER 2 +#define KSU_MAX_PACKAGE_NAME 256 +// NGROUPS_MAX for Linux is 65535 generally, but we only supports 32 groups. +#define KSU_MAX_GROUPS 32 +#define KSU_SELINUX_DOMAIN 64 + +using p_key_t = char[KSU_MAX_PACKAGE_NAME]; + +struct root_profile { + int32_t uid; + int32_t gid; + + int32_t groups_count; + int32_t groups[KSU_MAX_GROUPS]; + + // kernel_cap_t is u32[2] for capabilities v3 + struct { + uint64_t effective; + uint64_t permitted; + uint64_t inheritable; + } capabilities; + + char selinux_domain[KSU_SELINUX_DOMAIN]; + + int32_t namespaces; +}; + +struct non_root_profile { + bool umount_modules; +}; + +struct app_profile { + // It may be utilized for backward compatibility, although we have never explicitly made any promises regarding this. + uint32_t version; + + // this is usually the package of the app, but can be other value for special apps + char key[KSU_MAX_PACKAGE_NAME]; + int32_t current_uid; + bool allow_su; + + union { + struct { + bool use_default; + char template_name[KSU_MAX_PACKAGE_NAME]; + + struct root_profile profile; + } rp_config; + + struct { + bool use_default; + + struct non_root_profile profile; + } nrp_config; + }; +}; + +bool set_app_profile(const app_profile *profile); + +bool get_app_profile(p_key_t key, app_profile *profile); + +#endif //KERNELSU_KSU_H diff --git a/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/KernelSUApplication.kt b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/KernelSUApplication.kt new file mode 100644 index 000000000000..0503b42f0f43 --- /dev/null +++ b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/KernelSUApplication.kt @@ -0,0 +1,36 @@ +package me.weishu.kernelsu + +import android.app.Application +import coil.Coil +import coil.ImageLoader +import me.zhanghai.android.appiconloader.coil.AppIconFetcher +import me.zhanghai.android.appiconloader.coil.AppIconKeyer +import java.io.File + +lateinit var ksuApp: KernelSUApplication + +class KernelSUApplication : Application() { + + override fun onCreate() { + super.onCreate() + ksuApp = this + + val context = this + val iconSize = resources.getDimensionPixelSize(android.R.dimen.app_icon_size) + Coil.setImageLoader( + ImageLoader.Builder(context) + .components { + add(AppIconKeyer()) + add(AppIconFetcher.Factory(iconSize, false, context)) + } + .build() + ) + + val webroot = File(dataDir, "webroot") + if (!webroot.exists()) { + webroot.mkdir() + } + } + + +} \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/Kernels.kt b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/Kernels.kt new file mode 100644 index 000000000000..860e46fcb149 --- /dev/null +++ b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/Kernels.kt @@ -0,0 +1,44 @@ +package me.weishu.kernelsu + +import android.system.Os + +/** + * @author weishu + * @date 2022/12/10. + */ + +data class KernelVersion(val major: Int, val patchLevel: Int, val subLevel: Int) { + override fun toString(): String { + return "$major.$patchLevel.$subLevel" + } + + fun isGKI(): Boolean { + + // kernel 6.x + if (major > 5) { + return true + } + + // kernel 5.10.x + if (major == 5) { + return patchLevel >= 10 + } + + return false + } +} + +fun parseKernelVersion(version: String): KernelVersion { + val find = "(\\d+)\\.(\\d+)\\.(\\d+)".toRegex().find(version) + return if (find != null) { + KernelVersion(find.groupValues[1].toInt(), find.groupValues[2].toInt(), find.groupValues[3].toInt()) + } else { + KernelVersion(-1, -1, -1) + } +} + +fun getKernelVersion(): KernelVersion { + Os.uname().release.let { + return parseKernelVersion(it) + } +} \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/Natives.kt b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/Natives.kt new file mode 100644 index 000000000000..bb788293aa31 --- /dev/null +++ b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/Natives.kt @@ -0,0 +1,117 @@ +package me.weishu.kernelsu + +import android.os.Parcelable +import androidx.annotation.Keep +import androidx.compose.runtime.Immutable +import kotlinx.parcelize.Parcelize + +/** + * @author weishu + * @date 2022/12/8. + */ +object Natives { + // minimal supported kernel version + // 10915: allowlist breaking change, add app profile + // 10931: app profile struct add 'version' field + // 10946: add capabilities + // 10977: change groups_count and groups to avoid overflow write + // 11071: Fix the issue of failing to set a custom SELinux type. + const val MINIMAL_SUPPORTED_KERNEL = 11071 + + // 11640: Support query working mode, LKM or GKI + // when MINIMAL_SUPPORTED_KERNEL > 11640, we can remove this constant. + const val MINIMAL_SUPPORTED_KERNEL_LKM = 11648 + const val KERNEL_SU_DOMAIN = "u:r:su:s0" + + const val ROOT_UID = 0 + const val ROOT_GID = 0 + + init { + System.loadLibrary("kernelsu") + } + + // become root manager, return true if success. + external fun becomeManager(pkg: String?): Boolean + val version: Int + external get + + // get the uid list of allowed su processes. + val allowList: IntArray + external get + + val isSafeMode: Boolean + external get + + val isLkmMode: Boolean + external get + + external fun uidShouldUmount(uid: Int): Boolean + + /** + * Get the profile of the given package. + * @param key usually the package name + * @return return null if failed. + */ + external fun getAppProfile(key: String?, uid: Int): Profile + external fun setAppProfile(profile: Profile?): Boolean + + private const val NON_ROOT_DEFAULT_PROFILE_KEY = "$" + private const val NOBODY_UID = 9999 + + fun setDefaultUmountModules(umountModules: Boolean): Boolean { + Profile( + NON_ROOT_DEFAULT_PROFILE_KEY, + NOBODY_UID, + false, + umountModules = umountModules + ).let { + return setAppProfile(it) + } + } + + fun isDefaultUmountModules(): Boolean { + getAppProfile(NON_ROOT_DEFAULT_PROFILE_KEY, NOBODY_UID).let { + return it.umountModules + } + } + + fun requireNewKernel(): Boolean { + return version < MINIMAL_SUPPORTED_KERNEL + } + + @Immutable + @Parcelize + @Keep + data class Profile( + // and there is a default profile for root and non-root + val name: String, + // current uid for the package, this is convivent for kernel to check + // if the package name doesn't match uid, then it should be invalidated. + val currentUid: Int = 0, + + // if this is true, kernel will grant root permission to this package + val allowSu: Boolean = false, + + // these are used for root profile + val rootUseDefault: Boolean = true, + val rootTemplate: String? = null, + val uid: Int = ROOT_UID, + val gid: Int = ROOT_GID, + val groups: List = mutableListOf(), + val capabilities: List = mutableListOf(), + val context: String = KERNEL_SU_DOMAIN, + val namespace: Int = Namespace.INHERITED.ordinal, + + val nonRootUseDefault: Boolean = true, + val umountModules: Boolean = true, + var rules: String = "", // this field is save in ksud!! + ) : Parcelable { + enum class Namespace { + INHERITED, + GLOBAL, + INDIVIDUAL, + } + + constructor() : this("") + } +} \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/profile/Capabilities.kt b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/profile/Capabilities.kt new file mode 100644 index 000000000000..d52518c2b4e0 --- /dev/null +++ b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/profile/Capabilities.kt @@ -0,0 +1,49 @@ +package me.weishu.kernelsu.profile + +/** + * @author weishu + * @date 2023/6/3. + */ +enum class Capabilities(val cap: Int, val display: String, val desc: String) { + CAP_CHOWN(0, "CHOWN", "Make arbitrary changes to file UIDs and GIDs (see chown(2))"), + CAP_DAC_OVERRIDE(1, "DAC_OVERRIDE", "Bypass file read, write, and execute permission checks"), + CAP_DAC_READ_SEARCH(2, "DAC_READ_SEARCH", "Bypass file read permission checks and directory read and execute permission checks"), + CAP_FOWNER(3, "FOWNER", "Bypass permission checks on operations that normally require the filesystem UID of the process to match the UID of the file (e.g., chmod(2), utime(2)), excluding those operations covered by CAP_DAC_OVERRIDE and CAP_DAC_READ_SEARCH"), + CAP_FSETID(4, "FSETID", "Don’t clear set-user-ID and set-group-ID permission bits when a file is modified; set the set-group-ID bit for a file whose GID does not match the filesystem or any of the supplementary GIDs of the calling process"), + CAP_KILL(5, "KILL", "Bypass permission checks for sending signals (see kill(2))."), + CAP_SETGID(6, "SETGID", "Make arbitrary manipulations of process GIDs and supplementary GID list; allow setgid(2) manipulation of the caller’s effective and real group IDs"), + CAP_SETUID(7, "SETUID", "Make arbitrary manipulations of process UIDs (setuid(2), setreuid(2), setresuid(2), setfsuid(2)); allow changing the current process user IDs; allow changing of the current process group ID to any value in the system’s range of legal group IDs"), + CAP_SETPCAP(8, "SETPCAP", "If file capabilities are supported: grant or remove any capability in the caller’s permitted capability set to or from any other process. (This property supersedes the obsolete notion of giving a process all capabilities by granting all capabilities in its permitted set, and of removing all capabilities from a process by granting no capabilities in its permitted set. It does not permit any actions that were not permitted before.)"), + CAP_LINUX_IMMUTABLE(9, "LINUX_IMMUTABLE", "Set the FS_APPEND_FL and FS_IMMUTABLE_FL inode flags (see chattr(1))."), + CAP_NET_BIND_SERVICE(10, "NET_BIND_SERVICE", "Bind a socket to Internet domain"), + CAP_NET_BROADCAST(11, "NET_BROADCAST", "Make socket broadcasts, and listen to multicasts"), + CAP_NET_ADMIN(12, "NET_ADMIN", "Perform various network-related operations: interface configuration, administration of IP firewall, masquerading, and accounting, modify routing tables, bind to any address for transparent proxying, set type-of-service (TOS), clear driver statistics, set promiscuous mode, enabling multicasting, use setsockopt(2) to set the following socket options: SO_DEBUG, SO_MARK, SO_PRIORITY (for a priority outside the range 0 to 6), SO_RCVBUFFORCE, and SO_SNDBUFFORCE"), + CAP_NET_RAW(13, "NET_RAW", "Use RAW and PACKET sockets"), + CAP_IPC_LOCK(14, "IPC_LOCK", "Lock memory (mlock(2), mlockall(2), mmap(2), shmctl(2))"), + CAP_IPC_OWNER(15, "IPC_OWNER", "Bypass permission checks for operations on System V IPC objects"), + CAP_SYS_MODULE(16, "SYS_MODULE", "Load and unload kernel modules (see init_module(2) and delete_module(2)); in kernels before 2.6.25, this also granted rights for various other operations related to kernel modules"), + CAP_SYS_RAWIO(17, "SYS_RAWIO", "Perform I/O port operations (iopl(2) and ioperm(2)); access /proc/kcore"), + CAP_SYS_CHROOT(18, "SYS_CHROOT", "Use chroot(2)"), + CAP_SYS_PTRACE(19, "SYS_PTRACE", "Trace arbitrary processes using ptrace(2)"), + CAP_SYS_PACCT(20, "SYS_PACCT", "Use acct(2)"), + CAP_SYS_ADMIN(21, "SYS_ADMIN", "Perform a range of system administration operations including: quotactl(2), mount(2), umount(2), swapon(2), swapoff(2), sethostname(2), and setdomainname(2); set and modify process resource limits (setrlimit(2)); perform various network-related operations (e.g., setting privileged socket options, enabling multicasting, interface configuration); perform various IPC operations (e.g., SysV semaphores, POSIX message queues, System V shared memory); allow reboot and kexec_load(2); override /proc/sys kernel tunables; perform ptrace(2) PTRACE_SECCOMP_GET_FILTER operation; perform some tracing and debugging operations (see ptrace(2)); administer the lifetime of kernel tracepoints (tracefs(5)); perform the KEYCTL_CHOWN and KEYCTL_SETPERM keyctl(2) operations; perform the following keyctl(2) operations: KEYCTL_CAPABILITIES, KEYCTL_CAPSQUASH, and KEYCTL_PKEY_ OPERATIONS; set state for the Extensible Authentication Protocol (EAP) kernel module; and override the RLIMIT_NPROC resource limit; allow ioperm/iopl access to I/O ports"), + CAP_SYS_BOOT(22, "SYS_BOOT", "Use reboot(2) and kexec_load(2), reboot and load a new kernel for later execution"), + CAP_SYS_NICE(23, "SYS_NICE", "Raise process nice value (nice(2), setpriority(2)) and change the nice value for arbitrary processes; set real-time scheduling policies for calling process, and set scheduling policies and priorities for arbitrary processes (sched_setscheduler(2), sched_setparam(2)"), + CAP_SYS_RESOURCE(24, "SYS_RESOURCE", "Override resource Limits. Set resource limits (setrlimit(2), prlimit(2)), override quota limits (quota(2), quotactl(2)), override reserved space on ext2 filesystem (ext2_ioctl(2)), override size restrictions on IPC message queues (msg(2)) and system V shared memory segments (shmget(2)), and override the /proc/sys/fs/pipe-size-max limit"), + CAP_SYS_TIME(25, "SYS_TIME", "Set system clock (settimeofday(2), stime(2), adjtimex(2)); set real-time (hardware) clock"), + CAP_SYS_TTY_CONFIG(26, "SYS_TTY_CONFIG", "Use vhangup(2); employ various privileged ioctl(2) operations on virtual terminals"), + CAP_MKNOD(27, "MKNOD", "Create special files using mknod(2)"), + CAP_LEASE(28, "LEASE", "Establish leases on arbitrary files (see fcntl(2))"), + CAP_AUDIT_WRITE(29, "AUDIT_WRITE", "Write records to kernel auditing log"), + CAP_AUDIT_CONTROL(30, "AUDIT_CONTROL", "Enable and disable kernel auditing; change auditing filter rules; retrieve auditing status and filtering rules"), + CAP_SETFCAP(31, "SETFCAP", "If file capabilities are supported: grant or remove any capability in any capability set to any file"), + CAP_MAC_OVERRIDE(32, "MAC_OVERRIDE", "Override Mandatory Access Control (MAC). Implemented for the Smack Linux Security Module (LSM)"), + CAP_MAC_ADMIN(33, "MAC_ADMIN", "Allow MAC configuration or state changes. Implemented for the Smack LSM"), + CAP_SYSLOG(34, "SYSLOG", "Perform privileged syslog(2) operations. See syslog(2) for information on which operations require privilege"), + CAP_WAKE_ALARM(35, "WAKE_ALARM", "Trigger something that will wake up the system"), + CAP_BLOCK_SUSPEND(36, "BLOCK_SUSPEND", "Employ features that can block system suspend"), + CAP_AUDIT_READ(37, "AUDIT_READ", "Allow reading the audit log via a multicast netlink socket"), + CAP_PERFMON(38, "PERFMON", "Allow performance monitoring via perf_event_open(2)"), + CAP_BPF(39, "BPF", "Allow BPF operations via bpf(2)"), + CAP_CHECKPOINT_RESTORE(40, "CHECKPOINT_RESTORE", "Allow processes to be checkpointed via checkpoint/restore in user namespace(2)"), +} \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/profile/Groups.kt b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/profile/Groups.kt new file mode 100644 index 000000000000..2ddb94dc91a1 --- /dev/null +++ b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/profile/Groups.kt @@ -0,0 +1,130 @@ +package me.weishu.kernelsu.profile + +/** + * https://cs.android.com/android/platform/superproject/main/+/main:system/core/libcutils/include/private/android_filesystem_config.h + * @author weishu + * @date 2023/6/3. + */ +enum class Groups(val gid: Int, val display: String, val desc: String) { + ROOT(0, "root", "traditional unix root user"), + DAEMON(1, "daemon", "Traditional unix daemon owner."), + BIN(2, "bin", "Traditional unix binaries owner."), + SYS(3, "sys", "A group with the same gid on Linux/macOS/Android."), + SYSTEM(1000, "system", "system server"), + RADIO(1001, "radio", "telephony subsystem, RIL"), + BLUETOOTH(1002, "bluetooth", "bluetooth subsystem"), + GRAPHICS(1003, "graphics", "graphics devices"), + INPUT(1004, "input", "input devices"), + AUDIO(1005, "audio", "audio devices"), + CAMERA(1006, "camera", "camera devices"), + LOG(1007, "log", "log devices"), + COMPASS(1008, "compass", "compass device"), + MOUNT(1009, "mount", "mountd socket"), + WIFI(1010, "wifi", "wifi subsystem"), + ADB(1011, "adb", "android debug bridge (adbd)"), + INSTALL(1012, "install", "group for installing packages"), + MEDIA(1013, "media", "mediaserver process"), + DHCP(1014, "dhcp", "dhcp client"), + SDCARD_RW(1015, "sdcard_rw", "external storage write access"), + VPN(1016, "vpn", "vpn system"), + KEYSTORE(1017, "keystore", "keystore subsystem"), + USB(1018, "usb", "USB devices"), + DRM(1019, "drm", "DRM server"), + MDNSR(1020, "mdnsr", "MulticastDNSResponder (service discovery)"), + GPS(1021, "gps", "GPS daemon"), + UNUSED1(1022, "unused1", "deprecated, DO NOT USE"), + MEDIA_RW(1023, "media_rw", "internal media storage write access"), + MTP(1024, "mtp", "MTP USB driver access"), + UNUSED2(1025, "unused2", "deprecated, DO NOT USE"), + DRMRPC(1026, "drmrpc", "group for drm rpc"), + NFC(1027, "nfc", "nfc subsystem"), + SDCARD_R(1028, "sdcard_r", "external storage read access"), + CLAT(1029, "clat", "clat part of nat464"), + LOOP_RADIO(1030, "loop_radio", "loop radio devices"), + MEDIA_DRM(1031, "media_drm", "MediaDrm plugins"), + PACKAGE_INFO(1032, "package_info", "access to installed package details"), + SDCARD_PICS(1033, "sdcard_pics", "external storage photos access"), + SDCARD_AV(1034, "sdcard_av", "external storage audio/video access"), + SDCARD_ALL(1035, "sdcard_all", "access all users external storage"), + LOGD(1036, "logd", "log daemon"), + SHARED_RELRO(1037, "shared_relro", "creator of shared GNU RELRO files"), + DBUS(1038, "dbus", "dbus-daemon IPC broker process"), + TLSDATE(1039, "tlsdate", "tlsdate unprivileged user"), + MEDIA_EX(1040, "media_ex", "mediaextractor process"), + AUDIOSERVER(1041, "audioserver", "audioserver process"), + METRICS_COLL(1042, "metrics_coll", "metrics_collector process"), + METRICSD(1043, "metricsd", "metricsd process"), + WEBSERV(1044, "webserv", "webservd process"), + DEBUGGERD(1045, "debuggerd", "debuggerd unprivileged user"), + MEDIA_CODEC(1046, "media_codec", "media_codec process"), + CAMERASERVER(1047, "cameraserver", "cameraserver process"), + FIREWALL(1048, "firewall", "firewall process"), + TRUNKS(1049, "trunks", "trunksd process"), + NVRAM(1050, "nvram", "nvram daemon"), + DNS(1051, "dns", "DNS resolution daemon (system: netd)"), + DNS_TETHER(1052, "dns_tether", "DNS resolution daemon (tether: dnsmasq)"), + WEBVIEW_ZYGOTE(1053, "webview_zygote", "WebView zygote process"), + VEHICLE_NETWORK(1054, "vehicle_network", "Vehicle network service"), + MEDIA_AUDIO(1055, "media_audio", "GID for audio files on internal media storage"), + MEDIA_VIDEO(1056, "media_video", "GID for video files on internal media storage"), + MEDIA_IMAGE(1057, "media_image", "GID for image files on internal media storage"), + TOMBSTONED(1058, "tombstoned", "tombstoned user"), + MEDIA_OBB(1059, "media_obb", "GID for OBB files on internal media storage"), + ESE(1060, "ese", "embedded secure element (eSE) subsystem"), + OTA_UPDATE(1061, "ota_update", "resource tracking UID for OTA updates"), + AUTOMOTIVE_EVS(1062, "automotive_evs", "Automotive rear and surround view system"), + LOWPAN(1063, "lowpan", "LoWPAN subsystem"), + HSM(1064, "lowpan", "hardware security module subsystem"), + RESERVED_DISK(1065, "reserved_disk", "GID that has access to reserved disk space"), + STATSD(1066, "statsd", "statsd daemon"), + INCIDENTD(1067, "incidentd", "incidentd daemon"), + SECURE_ELEMENT(1068, "secure_element", "secure element subsystem"), + LMKD(1069, "lmkd", "low memory killer daemon"), + LLKD(1070, "llkd", "live lock daemon"), + IORAPD(1071, "iorapd", "input/output readahead and pin daemon"), + GPU_SERVICE(1072, "gpu_service", "GPU service daemon"), + NETWORK_STACK(1073, "network_stack", "network stack service"), + GSID(1074, "GSID", "GSI service daemon"), + FSVERITY_CERT(1075, "fsverity_cert", "fs-verity key ownership in keystore"), + CREDSTORE(1076, "credstore", "identity credential manager service"), + EXTERNAL_STORAGE(1077, "external_storage", "Full external storage access including USB OTG volumes"), + EXT_DATA_RW(1078, "ext_data_rw", "GID for app-private data directories on external storage"), + EXT_OBB_RW(1079, "ext_obb_rw", "GID for OBB directories on external storage"), + CONTEXT_HUB(1080, "context_hub", "GID for access to the Context Hub"), + VIRTUALIZATIONSERVICE(1081, "virtualizationservice", "VirtualizationService daemon"), + ARTD(1082, "artd", "ART Service daemon"), + UWB(1083, "uwb", "UWB subsystem"), + THREAD_NETWORK(1084, "thread_network", "Thread Network subsystem"), + DICED(1085, "diced", "Android's DICE daemon"), + DMESGD(1086, "dmesgd", "dmesg parsing daemon for kernel report collection"), + JC_WEAVER(1087, "jc_weaver", "Javacard Weaver HAL - to manage omapi ARA rules"), + JC_STRONGBOX(1088, "jc_strongbox", "Javacard Strongbox HAL - to manage omapi ARA rules"), + JC_IDENTITYCRED(1089, "jc_identitycred", "Javacard Identity Cred HAL - to manage omapi ARA rules"), + SDK_SANDBOX(1090, "sdk_sandbox", "SDK sandbox virtual UID"), + SECURITY_LOG_WRITER(1091, "security_log_writer", "write to security log"), + PRNG_SEEDER(1092, "prng_seeder", "PRNG seeder daemon"), + + SHELL(2000, "shell", "adb and debug shell user"), + CACHE(2001, "cache", "cache access"), + DIAG(2002, "diag", "access to diagnostic resources"), + + /* The 3000 series are intended for use as supplemental group id's only. + * They indicate special Android capabilities that the kernel is aware of. */ + NET_BT_ADMIN(3001, "net_bt_admin", "bluetooth: create any socket"), + NET_BT(3002, "net_bt", "bluetooth: create sco, rfcomm or l2cap sockets"), + INET(3003, "inet", "can create AF_INET and AF_INET6 sockets"), + NET_RAW(3004, "net_raw", "can create raw INET sockets"), + NET_ADMIN(3005, "net_admin", "can configure interfaces and routing tables."), + NET_BW_STATS(3006, "net_bw_stats", "read bandwidth statistics"), + NET_BW_ACCT(3007, "net_bw_acct", "change bandwidth statistics accounting"), + NET_BT_STACK(3008, "net_bt_stack", "access to various bluetooth management functions"), + READPROC(3009, "readproc", "Allow /proc read access"), + WAKELOCK(3010, "wakelock", "Allow system wakelock read/write access"), + UHID(3011, "uhid", "Allow read/write to /dev/uhid node"), + READTRACEFS(3012, "readtracefs", "Allow tracefs read"), + + EVERYBODY(9997, "everybody", "Shared external storage read/write"), + MISC(9998, "misc", "Access to misc storage"), + NOBODY(9999, "nobody", "Reserved"), + APP(10000, "app", "Access to app data"), +} \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/KsuService.java b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/KsuService.java new file mode 100644 index 000000000000..2ebcc786391d --- /dev/null +++ b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/KsuService.java @@ -0,0 +1,77 @@ +package me.weishu.kernelsu.ui; + +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.os.IBinder; +import android.os.UserHandle; +import android.os.UserManager; +import android.util.Log; + +import androidx.annotation.NonNull; + +import com.topjohnwu.superuser.ipc.RootService; + +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; + +import me.weishu.kernelsu.IKsuInterface; +import rikka.parcelablelist.ParcelableListSlice; + +/** + * @author weishu + * @date 2023/4/18. + */ + +public class KsuService extends RootService { + + private static final String TAG = "KsuService"; + + class Stub extends IKsuInterface.Stub { + @Override + public ParcelableListSlice getPackages(int flags) { + List list = getInstalledPackagesAll(flags); + Log.i(TAG, "getPackages: " + list.size()); + return new ParcelableListSlice<>(list); + } + } + + @Override + public IBinder onBind(@NonNull Intent intent) { + return new Stub(); + } + + List getUserIds() { + List result = new ArrayList<>(); + UserManager um = (UserManager) getSystemService(Context.USER_SERVICE); + List userProfiles = um.getUserProfiles(); + for (UserHandle userProfile : userProfiles) { + int userId = userProfile.hashCode(); + result.add(userProfile.hashCode()); + } + return result; + } + + ArrayList getInstalledPackagesAll(int flags) { + ArrayList packages = new ArrayList<>(); + for (Integer userId : getUserIds()) { + Log.i(TAG, "getInstalledPackagesAll: " + userId); + packages.addAll(getInstalledPackagesAsUser(flags, userId)); + } + return packages; + } + + List getInstalledPackagesAsUser(int flags, int userId) { + try { + PackageManager pm = getPackageManager(); + Method getInstalledPackagesAsUser = pm.getClass().getDeclaredMethod("getInstalledPackagesAsUser", int.class, int.class); + return (List) getInstalledPackagesAsUser.invoke(pm, flags, userId); + } catch (Throwable e) { + Log.e(TAG, "err", e); + } + + return new ArrayList<>(); + } +} diff --git a/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/MainActivity.kt b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/MainActivity.kt new file mode 100644 index 000000000000..042155fbee62 --- /dev/null +++ b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/MainActivity.kt @@ -0,0 +1,97 @@ +package me.weishu.kernelsu.ui + +import android.os.Bundle +import androidx.activity.ComponentActivity +import androidx.activity.compose.setContent +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Icon +import androidx.compose.material3.NavigationBar +import androidx.compose.material3.NavigationBarItem +import androidx.compose.material3.Scaffold +import androidx.compose.material3.SnackbarHost +import androidx.compose.material3.SnackbarHostState +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.navigation.NavHostController +import androidx.navigation.compose.rememberNavController +import com.ramcosta.composedestinations.DestinationsNavHost +import com.ramcosta.composedestinations.navigation.popBackStack +import com.ramcosta.composedestinations.utils.isRouteOnBackStackAsState +import me.weishu.kernelsu.Natives +import me.weishu.kernelsu.ksuApp +import me.weishu.kernelsu.ui.screen.BottomBarDestination +import me.weishu.kernelsu.ui.screen.NavGraphs +import me.weishu.kernelsu.ui.theme.KernelSUTheme +import me.weishu.kernelsu.ui.util.LocalSnackbarHost +import me.weishu.kernelsu.ui.util.rootAvailable + +class MainActivity : ComponentActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + setContent { + KernelSUTheme { + val navController = rememberNavController() + val snackbarHostState = remember { SnackbarHostState() } + Scaffold( + bottomBar = { BottomBar(navController) }, + snackbarHost = { SnackbarHost(snackbarHostState) } + ) { innerPadding -> + CompositionLocalProvider( + LocalSnackbarHost provides snackbarHostState, + ) { + DestinationsNavHost( + modifier = Modifier.padding(innerPadding), + navGraph = NavGraphs.root, + navController = navController + ) + } + } + } + } + } +} + +@Composable +private fun BottomBar(navController: NavHostController) { + val isManager = Natives.becomeManager(ksuApp.packageName) + val fullFeatured = isManager && !Natives.requireNewKernel() && rootAvailable() + NavigationBar(tonalElevation = 8.dp) { + BottomBarDestination.entries.forEach { destination -> + if (!fullFeatured && destination.rootRequired) return@forEach + val isCurrentDestOnBackStack by navController.isRouteOnBackStackAsState(destination.direction) + NavigationBarItem( + selected = isCurrentDestOnBackStack, + onClick = { + if (isCurrentDestOnBackStack) { + navController.popBackStack(destination.direction, false) + } + + navController.navigate(destination.direction.route) { + popUpTo(NavGraphs.root.route) { + saveState = true + } + launchSingleTop = true + restoreState = true + } + }, + icon = { + if (isCurrentDestOnBackStack) { + Icon(destination.iconSelected, stringResource(destination.label)) + } else { + Icon(destination.iconNotSelected, stringResource(destination.label)) + } + }, + label = { Text(stringResource(destination.label)) }, + alwaysShowLabel = false + ) + } + } +} diff --git a/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/component/AboutCard.kt b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/component/AboutCard.kt new file mode 100644 index 000000000000..0807d0521dfe --- /dev/null +++ b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/component/AboutCard.kt @@ -0,0 +1,123 @@ +package me.weishu.kernelsu.ui.component + +import android.text.method.LinkMovementMethod +import android.widget.TextView +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.ElevatedCard +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.toArgb +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import androidx.compose.ui.viewinterop.AndroidView +import androidx.compose.ui.window.Dialog +import androidx.core.content.res.ResourcesCompat +import androidx.core.text.HtmlCompat +import com.google.accompanist.drawablepainter.rememberDrawablePainter +import me.weishu.kernelsu.BuildConfig +import me.weishu.kernelsu.R + +@Preview +@Composable +fun AboutCard() { + ElevatedCard( + modifier = Modifier + .fillMaxWidth(), + shape = RoundedCornerShape(8.dp), + ) { + Row( + modifier = Modifier + .fillMaxWidth() + .padding(24.dp) + ) { + AboutCardContent() + } + } +} + +@Composable +fun AboutDialog(dismiss: () -> Unit) { + Dialog(onDismissRequest = { dismiss() }) { + AboutCard() + } +} + +@Composable +private fun AboutCardContent() { + Column( + modifier = Modifier + .fillMaxWidth() + ) { + val drawable = ResourcesCompat.getDrawable( + LocalContext.current.resources, + R.mipmap.ic_launcher, + LocalContext.current.theme + ) + + Row { + Image( + painter = rememberDrawablePainter(drawable), + contentDescription = "icon", + modifier = Modifier.size(40.dp) + ) + + Spacer(modifier = Modifier.width(12.dp)) + + Column { + + Text( + stringResource(id = R.string.app_name), + style = MaterialTheme.typography.titleSmall, + fontSize = 18.sp + ) + Text( + BuildConfig.VERSION_NAME, + style = MaterialTheme.typography.bodySmall, + fontSize = 14.sp + ) + + Spacer(modifier = Modifier.height(8.dp)) + + HtmlText( + html = stringResource( + id = R.string.about_source_code, + "GitHub", + "Telegram" + ) + ) + } + } + } +} + +@Composable +fun HtmlText(html: String, modifier: Modifier = Modifier) { + val contentColor = LocalContentColor.current + AndroidView( + modifier = modifier, + factory = { context -> + TextView(context).also { + it.movementMethod = LinkMovementMethod.getInstance() + } + }, + update = { + it.text = HtmlCompat.fromHtml(html, HtmlCompat.FROM_HTML_MODE_COMPACT) + it.setTextColor(contentColor.toArgb()) + } + ) +} \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/component/Dialog.kt b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/component/Dialog.kt new file mode 100644 index 000000000000..e2c3fa453e0d --- /dev/null +++ b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/component/Dialog.kt @@ -0,0 +1,450 @@ +package me.weishu.kernelsu.ui.component + +import android.graphics.text.LineBreaker +import android.os.Parcelable +import android.text.Layout +import android.text.method.LinkMovementMethod +import android.util.Log +import android.view.ViewGroup +import android.widget.TextView +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.wrapContentHeight +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.* +import androidx.compose.runtime.* +import androidx.compose.runtime.saveable.Saver +import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.toArgb +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.compose.ui.viewinterop.AndroidView +import androidx.compose.ui.window.Dialog +import androidx.compose.ui.window.DialogProperties +import io.noties.markwon.Markwon +import io.noties.markwon.utils.NoCopySpannableFactory +import kotlinx.coroutines.* +import kotlinx.coroutines.channels.Channel +import kotlinx.coroutines.channels.ReceiveChannel +import kotlinx.coroutines.flow.FlowCollector +import kotlinx.coroutines.flow.consumeAsFlow +import kotlinx.coroutines.flow.onEach +import kotlinx.parcelize.Parcelize +import kotlin.coroutines.resume + +private const val TAG = "DialogComponent" + +interface ConfirmDialogVisuals : Parcelable { + val title: String + val content: String + val isMarkdown: Boolean + val confirm: String? + val dismiss: String? +} + +@Parcelize +private data class ConfirmDialogVisualsImpl( + override val title: String, + override val content: String, + override val isMarkdown: Boolean, + override val confirm: String?, + override val dismiss: String?, +) : ConfirmDialogVisuals { + companion object { + val Empty: ConfirmDialogVisuals = ConfirmDialogVisualsImpl("", "", false, null, null) + } +} + +interface DialogHandle { + val isShown: Boolean + val dialogType: String + fun show() + fun hide() +} + +interface LoadingDialogHandle : DialogHandle { + suspend fun withLoading(block: suspend () -> R): R + fun showLoading() +} + +sealed interface ConfirmResult { + object Confirmed : ConfirmResult + object Canceled : ConfirmResult +} + +interface ConfirmDialogHandle : DialogHandle { + val visuals: ConfirmDialogVisuals + + fun showConfirm( + title: String, + content: String, + markdown: Boolean = false, + confirm: String? = null, + dismiss: String? = null + ) + + suspend fun awaitConfirm( + title: String, + content: String, + markdown: Boolean = false, + confirm: String? = null, + dismiss: String? = null + ): ConfirmResult +} + +private abstract class DialogHandleBase( + protected val visible: MutableState, + protected val coroutineScope: CoroutineScope +) : DialogHandle { + override val isShown: Boolean + get() = visible.value + + override fun show() { + coroutineScope.launch { + visible.value = true + } + } + + final override fun hide() { + coroutineScope.launch { + visible.value = false + } + } + + override fun toString(): String { + return dialogType + } +} + +private class LoadingDialogHandleImpl( + visible: MutableState, + coroutineScope: CoroutineScope +) : LoadingDialogHandle, DialogHandleBase(visible, coroutineScope) { + override suspend fun withLoading(block: suspend () -> R): R { + return coroutineScope.async { + try { + visible.value = true + block() + } finally { + visible.value = false + } + }.await() + } + + override fun showLoading() { + show() + } + + override val dialogType: String get() = "LoadingDialog" +} + +typealias NullableCallback = (() -> Unit)? + +interface ConfirmCallback { + + val onConfirm: NullableCallback + + val onDismiss: NullableCallback + + val isEmpty: Boolean get() = onConfirm == null && onDismiss == null + + companion object { + operator fun invoke(onConfirmProvider: () -> NullableCallback, onDismissProvider: () -> NullableCallback): ConfirmCallback { + return object : ConfirmCallback { + override val onConfirm: NullableCallback + get() = onConfirmProvider() + override val onDismiss: NullableCallback + get() = onDismissProvider() + } + } + } +} + +private class ConfirmDialogHandleImpl( + visible: MutableState, + coroutineScope: CoroutineScope, + callback: ConfirmCallback, + override var visuals: ConfirmDialogVisuals = ConfirmDialogVisualsImpl.Empty, + private val resultFlow: ReceiveChannel +) : ConfirmDialogHandle, DialogHandleBase(visible, coroutineScope) { + private class ResultCollector( + private val callback: ConfirmCallback + ) : FlowCollector { + fun handleResult(result: ConfirmResult) { + Log.d(TAG, "handleResult: ${result.javaClass.simpleName}") + when (result) { + ConfirmResult.Confirmed -> onConfirm() + ConfirmResult.Canceled -> onDismiss() + } + } + + fun onConfirm() { + callback.onConfirm?.invoke() + } + + fun onDismiss() { + callback.onDismiss?.invoke() + } + + override suspend fun emit(value: ConfirmResult) { + handleResult(value) + } + } + + private val resultCollector = ResultCollector(callback) + + private var awaitContinuation: CancellableContinuation? = null + + private val isCallbackEmpty = callback.isEmpty + + init { + coroutineScope.launch { + resultFlow + .consumeAsFlow() + .onEach { result -> + awaitContinuation?.let { + awaitContinuation = null + if (it.isActive) { + it.resume(result) + } + } + } + .onEach { hide() } + .collect(resultCollector) + } + } + + private suspend fun awaitResult(): ConfirmResult { + return suspendCancellableCoroutine { + awaitContinuation = it.apply { + if (isCallbackEmpty) { + invokeOnCancellation { + visible.value = false + } + } + } + } + } + + fun updateVisuals(visuals: ConfirmDialogVisuals) { + this.visuals = visuals + } + + override fun show() { + if (visuals !== ConfirmDialogVisualsImpl.Empty) { + super.show() + } else { + throw UnsupportedOperationException("can't show confirm dialog with the Empty visuals") + } + } + + override fun showConfirm( + title: String, + content: String, + markdown: Boolean, + confirm: String?, + dismiss: String? + ) { + coroutineScope.launch { + updateVisuals(ConfirmDialogVisualsImpl(title, content, markdown, confirm, dismiss)) + show() + } + } + + override suspend fun awaitConfirm( + title: String, + content: String, + markdown: Boolean, + confirm: String?, + dismiss: String? + ): ConfirmResult { + coroutineScope.launch { + updateVisuals(ConfirmDialogVisualsImpl(title, content, markdown, confirm, dismiss)) + show() + } + return awaitResult() + } + + override val dialogType: String get() = "ConfirmDialog" + + override fun toString(): String { + return "${super.toString()}(visuals: $visuals)" + } + + companion object { + fun Saver( + visible: MutableState, + coroutineScope: CoroutineScope, + callback: ConfirmCallback, + resultChannel: ReceiveChannel + ) = Saver( + save = { + it.visuals + }, + restore = { + Log.d(TAG, "ConfirmDialog restore, visuals: $it") + ConfirmDialogHandleImpl(visible, coroutineScope, callback, it, resultChannel) + } + ) + } +} + +private class CustomDialogHandleImpl( + visible: MutableState, + coroutineScope: CoroutineScope +) : DialogHandleBase(visible, coroutineScope) { + override val dialogType: String get() = "CustomDialog" +} + +@Composable +fun rememberLoadingDialog(): LoadingDialogHandle { + val visible = remember { + mutableStateOf(false) + } + val coroutineScope = rememberCoroutineScope() + + if (visible.value) { + LoadingDialog() + } + + return remember { + LoadingDialogHandleImpl(visible, coroutineScope) + } +} + +@Composable +private fun rememberConfirmDialog(visuals: ConfirmDialogVisuals, callback: ConfirmCallback): ConfirmDialogHandle { + val visible = rememberSaveable { + mutableStateOf(false) + } + val coroutineScope = rememberCoroutineScope() + val resultChannel = remember { + Channel() + } + + val handle = rememberSaveable( + saver = ConfirmDialogHandleImpl.Saver(visible, coroutineScope, callback, resultChannel), + init = { + ConfirmDialogHandleImpl(visible, coroutineScope, callback, visuals, resultChannel) + } + ) + + if (visible.value) { + ConfirmDialog( + handle.visuals, + confirm = { coroutineScope.launch { resultChannel.send(ConfirmResult.Confirmed) } }, + dismiss = { coroutineScope.launch { resultChannel.send(ConfirmResult.Canceled) } } + ) + } + + return handle +} + +@Composable +fun rememberConfirmCallback(onConfirm: NullableCallback, onDismiss: NullableCallback): ConfirmCallback { + val currentOnConfirm by rememberUpdatedState(newValue = onConfirm) + val currentOnDismiss by rememberUpdatedState(newValue = onDismiss) + return remember { + ConfirmCallback({ currentOnConfirm }, { currentOnDismiss }) + } +} + +@Composable +fun rememberConfirmDialog(onConfirm: NullableCallback = null, onDismiss: NullableCallback = null): ConfirmDialogHandle { + return rememberConfirmDialog(rememberConfirmCallback(onConfirm, onDismiss)) +} + +@Composable +fun rememberConfirmDialog(callback: ConfirmCallback): ConfirmDialogHandle { + return rememberConfirmDialog(ConfirmDialogVisualsImpl.Empty, callback) +} + +@Composable +fun rememberCustomDialog(composable: @Composable (dismiss: () -> Unit) -> Unit): DialogHandle { + val visible = rememberSaveable { + mutableStateOf(false) + } + val coroutineScope = rememberCoroutineScope() + if (visible.value) { + composable { visible.value = false } + } + return remember { + CustomDialogHandleImpl(visible, coroutineScope) + } +} + +@Composable +private fun LoadingDialog() { + Dialog( + onDismissRequest = {}, + properties = DialogProperties(dismissOnClickOutside = false, dismissOnBackPress = false) + ) { + Surface( + modifier = Modifier.size(100.dp), shape = RoundedCornerShape(8.dp) + ) { + Box( + contentAlignment = Alignment.Center, + ) { + CircularProgressIndicator() + } + } + } +} + +@Composable +private fun ConfirmDialog(visuals: ConfirmDialogVisuals, confirm: () -> Unit, dismiss: () -> Unit) { + AlertDialog( + onDismissRequest = { + dismiss() + }, + title = { + Text(text = visuals.title) + }, + text = { + if (visuals.isMarkdown) { + MarkdownContent(content = visuals.content) + } else { + Text(text = visuals.content) + } + }, + confirmButton = { + TextButton(onClick = confirm) { + Text(text = visuals.confirm ?: stringResource(id = android.R.string.ok)) + } + }, + dismissButton = { + TextButton(onClick = dismiss) { + Text(text = visuals.dismiss ?: stringResource(id = android.R.string.cancel)) + } + }, + ) +} + +@Composable +private fun MarkdownContent(content: String) { + val contentColor = LocalContentColor.current + + AndroidView( + factory = { context -> + TextView(context).apply { + movementMethod = LinkMovementMethod.getInstance() + setSpannableFactory(NoCopySpannableFactory.getInstance()) + breakStrategy = LineBreaker.BREAK_STRATEGY_SIMPLE + hyphenationFrequency = Layout.HYPHENATION_FREQUENCY_NONE + layoutParams = ViewGroup.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT + ) + } + }, + modifier = Modifier + .fillMaxWidth() + .wrapContentHeight(), + update = { + Markwon.create(it.context).setMarkdown(it, content) + it.setTextColor(contentColor.toArgb()) + } + ) +} \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/component/KeyEventBlocker.kt b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/component/KeyEventBlocker.kt new file mode 100644 index 000000000000..b3268131268a --- /dev/null +++ b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/component/KeyEventBlocker.kt @@ -0,0 +1,28 @@ +package me.weishu.kernelsu.ui.component + +import androidx.compose.foundation.focusable +import androidx.compose.foundation.layout.Box +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.focus.FocusRequester +import androidx.compose.ui.focus.focusRequester +import androidx.compose.ui.input.key.KeyEvent +import androidx.compose.ui.input.key.onKeyEvent + +@Composable +fun KeyEventBlocker(predicate: (KeyEvent) -> Boolean) { + val requester = remember { FocusRequester() } + Box( + Modifier + .onKeyEvent { + predicate(it) + } + .focusRequester(requester) + .focusable() + ) + LaunchedEffect(Unit) { + requester.requestFocus() + } +} \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/component/SearchBar.kt b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/component/SearchBar.kt new file mode 100644 index 000000000000..8195cdddd40b --- /dev/null +++ b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/component/SearchBar.kt @@ -0,0 +1,149 @@ +package me.weishu.kernelsu.ui.component + +import android.util.Log +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.fadeIn +import androidx.compose.animation.fadeOut +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.text.KeyboardActions +import androidx.compose.foundation.text.KeyboardOptions +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.automirrored.outlined.ArrowBack +import androidx.compose.material.icons.filled.Close +import androidx.compose.material.icons.filled.Search +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.OutlinedTextField +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBar +import androidx.compose.runtime.Composable +import androidx.compose.runtime.DisposableEffect +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.focus.FocusRequester +import androidx.compose.ui.focus.focusRequester +import androidx.compose.ui.focus.onFocusChanged +import androidx.compose.ui.platform.LocalSoftwareKeyboardController +import androidx.compose.ui.text.input.ImeAction +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp + +private const val TAG = "SearchBar" + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun SearchAppBar( + title: @Composable () -> Unit, + searchText: String, + onSearchTextChange: (String) -> Unit, + onClearClick: () -> Unit, + onBackClick: (() -> Unit)? = null, + onConfirm: (() -> Unit)? = null, + dropdownContent: @Composable (() -> Unit)? = null, +) { + val keyboardController = LocalSoftwareKeyboardController.current + val focusRequester = remember { FocusRequester() } + var onSearch by remember { mutableStateOf(false) } + + if (onSearch) { + LaunchedEffect(Unit) { focusRequester.requestFocus() } + } + DisposableEffect(Unit) { + onDispose { + keyboardController?.hide() + } + } + + TopAppBar( + title = { + Box { + AnimatedVisibility( + modifier = Modifier.align(Alignment.CenterStart), + visible = !onSearch, + enter = fadeIn(), + exit = fadeOut(), + content = { title() } + ) + + AnimatedVisibility( + visible = onSearch, + enter = fadeIn(), + exit = fadeOut() + ) { + OutlinedTextField( + modifier = Modifier + .fillMaxWidth() + .padding(top = 2.dp, bottom = 2.dp, end = if (onBackClick != null) 0.dp else 14.dp) + .focusRequester(focusRequester) + .onFocusChanged { focusState -> + if (focusState.isFocused) onSearch = true + Log.d(TAG, "onFocusChanged: $focusState") + }, + value = searchText, + onValueChange = onSearchTextChange, + trailingIcon = { + IconButton( + onClick = { + onSearch = false + keyboardController?.hide() + onClearClick() + }, + content = { Icon(Icons.Filled.Close, null) } + ) + }, + maxLines = 1, + singleLine = true, + keyboardOptions = KeyboardOptions.Default.copy(imeAction = ImeAction.Done), + keyboardActions = KeyboardActions(onDone = { + keyboardController?.hide() + onConfirm?.invoke() + }) + ) + } + } + }, + navigationIcon = { + if (onBackClick != null) { + IconButton( + onClick = onBackClick, + content = { Icon(Icons.AutoMirrored.Outlined.ArrowBack, null) } + ) + } + }, + actions = { + AnimatedVisibility( + visible = !onSearch + ) { + IconButton( + onClick = { onSearch = true }, + content = { Icon(Icons.Filled.Search, null) } + ) + } + + if (dropdownContent != null) { + dropdownContent() + } + + } + ) +} + +@Preview +@Composable +private fun SearchAppBarPreview() { + var searchText by remember { mutableStateOf("") } + SearchAppBar( + title = { Text("Search text") }, + searchText = searchText, + onSearchTextChange = { searchText = it }, + onClearClick = { searchText = "" } + ) +} diff --git a/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/component/SettingsItem.kt b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/component/SettingsItem.kt new file mode 100644 index 000000000000..6db20b163cde --- /dev/null +++ b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/component/SettingsItem.kt @@ -0,0 +1,57 @@ +package me.weishu.kernelsu.ui.component + +import androidx.compose.foundation.clickable +import androidx.compose.material3.Icon +import androidx.compose.material3.ListItem +import androidx.compose.material3.RadioButton +import androidx.compose.material3.Switch +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.vector.ImageVector + +@Composable +fun SwitchItem( + icon: ImageVector? = null, + title: String, + summary: String? = null, + checked: Boolean, + enabled: Boolean = true, + onCheckedChange: (Boolean) -> Unit +) { + ListItem( + modifier = Modifier.clickable { + onCheckedChange.invoke(!checked) + }, + headlineContent = { + Text(title) + }, + leadingContent = icon?.let { + { Icon(icon, title) } + }, + trailingContent = { + Switch(checked = checked, enabled = enabled, onCheckedChange = onCheckedChange) + }, + supportingContent = { + if (summary != null) { + Text(summary) + } + } + ) +} + +@Composable +fun RadioItem( + title: String, + selected: Boolean, + onClick: () -> Unit, +) { + ListItem( + headlineContent = { + Text(title) + }, + leadingContent = { + RadioButton(selected = selected, onClick = onClick) + }, + ) +} diff --git a/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/component/profile/AppProfileConfig.kt b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/component/profile/AppProfileConfig.kt new file mode 100644 index 000000000000..065ff6d0cf02 --- /dev/null +++ b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/component/profile/AppProfileConfig.kt @@ -0,0 +1,63 @@ +package me.weishu.kernelsu.ui.component.profile + +import androidx.compose.foundation.layout.Column +import androidx.compose.material3.OutlinedTextField +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import me.weishu.kernelsu.Natives +import me.weishu.kernelsu.R +import me.weishu.kernelsu.ui.component.SwitchItem + +@Composable +fun AppProfileConfig( + modifier: Modifier = Modifier, + fixedName: Boolean, + enabled: Boolean, + profile: Natives.Profile, + onProfileChange: (Natives.Profile) -> Unit, +) { + Column(modifier = modifier) { + if (!fixedName) { + OutlinedTextField( + label = { Text(stringResource(R.string.profile_name)) }, + value = profile.name, + onValueChange = { onProfileChange(profile.copy(name = it)) } + ) + } + + SwitchItem( + title = stringResource(R.string.profile_umount_modules), + summary = stringResource(R.string.profile_umount_modules_summary), + checked = if (enabled) { + profile.umountModules + } else { + Natives.isDefaultUmountModules() + }, + enabled = enabled, + onCheckedChange = { + onProfileChange( + profile.copy( + umountModules = it, + nonRootUseDefault = false + ) + ) + } + ) + } +} + +@Preview +@Composable +private fun AppProfileConfigPreview() { + var profile by remember { mutableStateOf(Natives.Profile("")) } + AppProfileConfig(fixedName = true, enabled = false, profile = profile) { + profile = it + } +} diff --git a/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/component/profile/RootProfileConfig.kt b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/component/profile/RootProfileConfig.kt new file mode 100644 index 000000000000..d2cb3f342e51 --- /dev/null +++ b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/component/profile/RootProfileConfig.kt @@ -0,0 +1,471 @@ +@file:OptIn(ExperimentalMaterial3Api::class) + +package me.weishu.kernelsu.ui.component.profile + +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ExperimentalLayoutApi +import androidx.compose.foundation.layout.FlowRow +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.text.KeyboardActions +import androidx.compose.foundation.text.KeyboardOptions +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.ArrowDropDown +import androidx.compose.material.icons.filled.ArrowDropUp +import androidx.compose.material3.AssistChip +import androidx.compose.material3.DropdownMenuItem +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.ExposedDropdownMenuBox +import androidx.compose.material3.Icon +import androidx.compose.material3.ListItem +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.OutlinedCard +import androidx.compose.material3.OutlinedTextField +import androidx.compose.material3.OutlinedTextFieldDefaults +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalSoftwareKeyboardController +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.input.ImeAction +import androidx.compose.ui.text.input.KeyboardType +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.core.text.isDigitsOnly +import com.maxkeppeker.sheets.core.models.base.Header +import com.maxkeppeker.sheets.core.models.base.rememberUseCaseState +import com.maxkeppeler.sheets.input.InputDialog +import com.maxkeppeler.sheets.input.models.InputHeader +import com.maxkeppeler.sheets.input.models.InputSelection +import com.maxkeppeler.sheets.input.models.InputTextField +import com.maxkeppeler.sheets.input.models.InputTextFieldType +import com.maxkeppeler.sheets.input.models.ValidationResult +import com.maxkeppeler.sheets.list.ListDialog +import com.maxkeppeler.sheets.list.models.ListOption +import com.maxkeppeler.sheets.list.models.ListSelection +import me.weishu.kernelsu.Natives +import me.weishu.kernelsu.R +import me.weishu.kernelsu.profile.Capabilities +import me.weishu.kernelsu.profile.Groups +import me.weishu.kernelsu.ui.component.rememberCustomDialog +import me.weishu.kernelsu.ui.util.isSepolicyValid + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun RootProfileConfig( + modifier: Modifier = Modifier, + fixedName: Boolean, + profile: Natives.Profile, + onProfileChange: (Natives.Profile) -> Unit, +) { + Column(modifier = modifier) { + if (!fixedName) { + OutlinedTextField( + label = { Text(stringResource(R.string.profile_name)) }, + value = profile.name, + onValueChange = { onProfileChange(profile.copy(name = it)) } + ) + } + + var expanded by remember { mutableStateOf(false) } + val currentNamespace = when (profile.namespace) { + Natives.Profile.Namespace.INHERITED.ordinal -> stringResource(R.string.profile_namespace_inherited) + Natives.Profile.Namespace.GLOBAL.ordinal -> stringResource(R.string.profile_namespace_global) + Natives.Profile.Namespace.INDIVIDUAL.ordinal -> stringResource(R.string.profile_namespace_individual) + else -> stringResource(R.string.profile_namespace_inherited) + } + ListItem(headlineContent = { + ExposedDropdownMenuBox( + expanded = expanded, + onExpandedChange = { expanded = !expanded } + ) { + OutlinedTextField( + modifier = Modifier + .menuAnchor() + .fillMaxWidth(), + readOnly = true, + label = { Text(stringResource(R.string.profile_namespace)) }, + value = currentNamespace, + onValueChange = {}, + trailingIcon = { + if (expanded) Icon(Icons.Filled.ArrowDropUp, null) + else Icon(Icons.Filled.ArrowDropDown, null) + }, + ) + ExposedDropdownMenu( + expanded = expanded, + onDismissRequest = { expanded = false } + ) { + DropdownMenuItem( + text = { Text(stringResource(R.string.profile_namespace_inherited)) }, + onClick = { + onProfileChange(profile.copy(namespace = Natives.Profile.Namespace.INHERITED.ordinal)) + expanded = false + }, + ) + DropdownMenuItem( + text = { Text(stringResource(R.string.profile_namespace_global)) }, + onClick = { + onProfileChange(profile.copy(namespace = Natives.Profile.Namespace.GLOBAL.ordinal)) + expanded = false + }, + ) + DropdownMenuItem( + text = { Text(stringResource(R.string.profile_namespace_individual)) }, + onClick = { + onProfileChange(profile.copy(namespace = Natives.Profile.Namespace.INDIVIDUAL.ordinal)) + expanded = false + }, + ) + } + } + }) + + UidPanel(uid = profile.uid, label = "uid", onUidChange = { + onProfileChange( + profile.copy( + uid = it, + rootUseDefault = false + ) + ) + }) + + UidPanel(uid = profile.gid, label = "gid", onUidChange = { + onProfileChange( + profile.copy( + gid = it, + rootUseDefault = false + ) + ) + }) + + val selectedGroups = profile.groups.ifEmpty { listOf(0) }.let { e -> + e.mapNotNull { g -> + Groups.entries.find { it.gid == g } + } + } + GroupsPanel(selectedGroups) { + onProfileChange( + profile.copy( + groups = it.map { group -> group.gid }.ifEmpty { listOf(0) }, + rootUseDefault = false + ) + ) + } + + val selectedCaps = profile.capabilities.mapNotNull { e -> + Capabilities.entries.find { it.cap == e } + } + + CapsPanel(selectedCaps) { + onProfileChange( + profile.copy( + capabilities = it.map { cap -> cap.cap }, + rootUseDefault = false + ) + ) + } + + SELinuxPanel(profile = profile, onSELinuxChange = { domain, rules -> + onProfileChange( + profile.copy( + context = domain, + rules = rules, + rootUseDefault = false + ) + ) + }) + + } +} + +@OptIn(ExperimentalLayoutApi::class) +@Composable +fun GroupsPanel(selected: List, closeSelection: (selection: Set) -> Unit) { + val selectGroupsDialog = rememberCustomDialog { dismiss: () -> Unit -> + val groups = Groups.entries.toTypedArray().sortedWith( + compareBy { if (selected.contains(it)) 0 else 1 } + .then(compareBy { + when (it) { + Groups.ROOT -> 0 + Groups.SYSTEM -> 1 + Groups.SHELL -> 2 + else -> Int.MAX_VALUE + } + }) + .then(compareBy { it.name }) + + ) + val options = groups.map { value -> + ListOption( + titleText = value.display, + subtitleText = value.desc, + selected = selected.contains(value), + ) + } + + val selection = HashSet(selected) + ListDialog( + state = rememberUseCaseState(visible = true, onFinishedRequest = { + closeSelection(selection) + }, onCloseRequest = { + dismiss() + }), + header = Header.Default( + title = stringResource(R.string.profile_groups), + ), + selection = ListSelection.Multiple( + showCheckBoxes = true, + options = options, + maxChoices = 32, // Kernel only supports 32 groups at most + ) { indecies, _ -> + // Handle selection + selection.clear() + indecies.forEach { index -> + val group = groups[index] + selection.add(group) + } + } + ) + } + + OutlinedCard(modifier = Modifier + .fillMaxWidth() + .padding(16.dp) + .clickable { + selectGroupsDialog.show() + }) { + + Column(modifier = Modifier.padding(16.dp)) { + Text(stringResource(R.string.profile_groups)) + FlowRow { + selected.forEach { group -> + AssistChip( + modifier = Modifier.padding(3.dp), + onClick = { /*TODO*/ }, + label = { Text(group.display) }) + } + } + } + + } +} + +@OptIn(ExperimentalLayoutApi::class) +@Composable +fun CapsPanel( + selected: Collection, + closeSelection: (selection: Set) -> Unit +) { + val selectCapabilitiesDialog = rememberCustomDialog { dismiss -> + val caps = Capabilities.entries.toTypedArray().sortedWith( + compareBy { if (selected.contains(it)) 0 else 1 } + .then(compareBy { it.name }) + ) + val options = caps.map { value -> + ListOption( + titleText = value.display, + subtitleText = value.desc, + selected = selected.contains(value), + ) + } + + val selection = HashSet(selected) + ListDialog( + state = rememberUseCaseState(visible = true, onFinishedRequest = { + closeSelection(selection) + }, onCloseRequest = { + dismiss() + }), + header = Header.Default( + title = stringResource(R.string.profile_capabilities), + ), + selection = ListSelection.Multiple( + showCheckBoxes = true, + options = options + ) { indecies, _ -> + // Handle selection + selection.clear() + indecies.forEach { index -> + val group = caps[index] + selection.add(group) + } + } + ) + } + + OutlinedCard(modifier = Modifier + .fillMaxWidth() + .padding(16.dp) + .clickable { + selectCapabilitiesDialog.show() + }) { + + Column(modifier = Modifier.padding(16.dp)) { + Text(stringResource(R.string.profile_capabilities)) + FlowRow { + selected.forEach { group -> + AssistChip( + modifier = Modifier.padding(3.dp), + onClick = { /*TODO*/ }, + label = { Text(group.display) }) + } + } + } + + } +} + +@Composable +private fun UidPanel(uid: Int, label: String, onUidChange: (Int) -> Unit) { + + ListItem(headlineContent = { + var isError by remember { + mutableStateOf(false) + } + var lastValidUid by remember { + mutableStateOf(uid) + } + + val keyboardController = LocalSoftwareKeyboardController.current + OutlinedTextField( + modifier = Modifier.fillMaxWidth(), + label = { Text(label) }, + value = uid.toString(), + isError = isError, + keyboardOptions = KeyboardOptions( + keyboardType = KeyboardType.Number, + imeAction = ImeAction.Done + ), + keyboardActions = KeyboardActions(onDone = { + keyboardController?.hide() + }), + onValueChange = { + if (it.isEmpty()) { + onUidChange(0) + return@OutlinedTextField + } + val valid = isTextValidUid(it) + + val targetUid = if (valid) it.toInt() else lastValidUid + if (valid) { + lastValidUid = it.toInt() + } + + onUidChange(targetUid) + + isError = !valid + } + ) + }) +} + +@Composable +private fun SELinuxPanel( + profile: Natives.Profile, + onSELinuxChange: (domain: String, rules: String) -> Unit +) { + val editSELinuxDialog = rememberCustomDialog { dismiss -> + var domain by remember { mutableStateOf(profile.context) } + var rules by remember { mutableStateOf(profile.rules) } + + val inputOptions = listOf( + InputTextField( + text = domain, + header = InputHeader( + title = stringResource(id = R.string.profile_selinux_domain), + ), + type = InputTextFieldType.OUTLINED, + required = true, + keyboardOptions = KeyboardOptions( + keyboardType = KeyboardType.Ascii, + imeAction = ImeAction.Next + ), + resultListener = { + domain = it ?: "" + }, + validationListener = { value -> + // value can be a-zA-Z0-9_ + val regex = Regex("^[a-z_]+:[a-z0-9_]+:[a-z0-9_]+(:[a-z0-9_]+)?$") + if (value?.matches(regex) == true) ValidationResult.Valid + else ValidationResult.Invalid("Domain must be in the format of \"user:role:type:level\"") + } + ), + InputTextField( + text = rules, + header = InputHeader( + title = stringResource(id = R.string.profile_selinux_rules), + ), + type = InputTextFieldType.OUTLINED, + keyboardOptions = KeyboardOptions( + keyboardType = KeyboardType.Ascii, + ), + singleLine = false, + resultListener = { + rules = it ?: "" + }, + validationListener = { value -> + if (isSepolicyValid(value)) ValidationResult.Valid + else ValidationResult.Invalid("SELinux rules is invalid!") + } + ) + ) + + InputDialog( + state = rememberUseCaseState(visible = true, + onFinishedRequest = { + onSELinuxChange(domain, rules) + }, + onCloseRequest = { + dismiss() + }), + header = Header.Default( + title = stringResource(R.string.profile_selinux_context), + ), + selection = InputSelection( + input = inputOptions, + onPositiveClick = { result -> + // Handle selection + }, + ) + ) + } + + ListItem(headlineContent = { + OutlinedTextField( + modifier = Modifier + .fillMaxWidth() + .clickable { + editSELinuxDialog.show() + }, + enabled = false, + colors = OutlinedTextFieldDefaults.colors( + disabledTextColor = MaterialTheme.colorScheme.onSurface, + disabledBorderColor = MaterialTheme.colorScheme.outline, + disabledPlaceholderColor = MaterialTheme.colorScheme.onSurfaceVariant, + disabledLabelColor = MaterialTheme.colorScheme.onSurfaceVariant + ), + label = { Text(text = stringResource(R.string.profile_selinux_context)) }, + value = profile.context, + onValueChange = { }, + ) + }) +} + +@Preview +@Composable +private fun RootProfileConfigPreview() { + var profile by remember { mutableStateOf(Natives.Profile("")) } + RootProfileConfig(fixedName = true, profile = profile) { + profile = it + } +} + +private fun isTextValidUid(text: String): Boolean { + return text.isNotEmpty() && text.isDigitsOnly() && text.toInt() >= 0 && text.toInt() <= Int.MAX_VALUE +} diff --git a/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/component/profile/TemplateConfig.kt b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/component/profile/TemplateConfig.kt new file mode 100644 index 000000000000..d09a23434f85 --- /dev/null +++ b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/component/profile/TemplateConfig.kt @@ -0,0 +1,116 @@ +package me.weishu.kernelsu.ui.component.profile + +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.automirrored.filled.ReadMore +import androidx.compose.material.icons.filled.ArrowDropDown +import androidx.compose.material.icons.filled.ArrowDropUp +import androidx.compose.material.icons.filled.Create +import androidx.compose.material3.DropdownMenuItem +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.ExposedDropdownMenuBox +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.ListItem +import androidx.compose.material3.OutlinedTextField +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import me.weishu.kernelsu.Natives +import me.weishu.kernelsu.R +import me.weishu.kernelsu.ui.util.listAppProfileTemplates +import me.weishu.kernelsu.ui.util.setSepolicy +import me.weishu.kernelsu.ui.viewmodel.getTemplateInfoById + +/** + * @author weishu + * @date 2023/10/21. + */ +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun TemplateConfig( + profile: Natives.Profile, + onViewTemplate: (id: String) -> Unit = {}, + onManageTemplate: () -> Unit = {}, + onProfileChange: (Natives.Profile) -> Unit +) { + var expanded by remember { mutableStateOf(false) } + var template by rememberSaveable { + mutableStateOf(profile.rootTemplate ?: "") + } + val profileTemplates = listAppProfileTemplates() + val noTemplates = profileTemplates.isEmpty() + + ListItem(headlineContent = { + ExposedDropdownMenuBox( + expanded = expanded, + onExpandedChange = { expanded = it }, + ) { + OutlinedTextField( + modifier = Modifier + .menuAnchor() + .fillMaxWidth(), + readOnly = true, + label = { Text(stringResource(R.string.profile_template)) }, + value = template.ifEmpty { "None" }, + onValueChange = {}, + trailingIcon = { + if (noTemplates) { + IconButton( + onClick = onManageTemplate + ) { + Icon(Icons.Filled.Create, null) + } + } else if (expanded) Icon(Icons.Filled.ArrowDropUp, null) + else Icon(Icons.Filled.ArrowDropDown, null) + }, + ) + if (profileTemplates.isEmpty()) { + return@ExposedDropdownMenuBox + } + ExposedDropdownMenu( + expanded = expanded, + onDismissRequest = { expanded = false } + ) { + profileTemplates.forEach { tid -> + val templateInfo = + getTemplateInfoById(tid) ?: return@forEach + DropdownMenuItem( + text = { Text(tid) }, + onClick = { + template = tid + if (setSepolicy(tid, templateInfo.rules.joinToString("\n"))) { + onProfileChange( + profile.copy( + rootTemplate = tid, + rootUseDefault = false, + uid = templateInfo.uid, + gid = templateInfo.gid, + groups = templateInfo.groups, + capabilities = templateInfo.capabilities, + context = templateInfo.context, + namespace = templateInfo.namespace, + ) + ) + } + expanded = false + }, + trailingIcon = { + IconButton(onClick = { + onViewTemplate(tid) + }) { + Icon(Icons.AutoMirrored.Filled.ReadMore, null) + } + } + ) + } + } + } + }) +} \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/AppProfile.kt b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/AppProfile.kt new file mode 100644 index 000000000000..ca53388f8ea4 --- /dev/null +++ b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/AppProfile.kt @@ -0,0 +1,362 @@ +package me.weishu.kernelsu.ui.screen + +import androidx.annotation.StringRes +import androidx.compose.animation.Crossfade +import androidx.compose.foundation.gestures.detectTapGestures +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.BoxWithConstraints +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.automirrored.filled.ArrowBack +import androidx.compose.material.icons.filled.AccountCircle +import androidx.compose.material.icons.filled.Android +import androidx.compose.material.icons.filled.Security +import androidx.compose.material3.DropdownMenu +import androidx.compose.material3.DropdownMenuItem +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.FilterChip +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.ListItem +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBar +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.input.pointer.pointerInput +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.DpOffset +import androidx.compose.ui.unit.dp +import coil.compose.AsyncImage +import coil.request.ImageRequest +import com.ramcosta.composedestinations.annotation.Destination +import com.ramcosta.composedestinations.navigation.DestinationsNavigator +import kotlinx.coroutines.launch +import me.weishu.kernelsu.Natives +import me.weishu.kernelsu.R +import me.weishu.kernelsu.ui.component.SwitchItem +import me.weishu.kernelsu.ui.component.profile.AppProfileConfig +import me.weishu.kernelsu.ui.component.profile.RootProfileConfig +import me.weishu.kernelsu.ui.component.profile.TemplateConfig +import me.weishu.kernelsu.ui.screen.destinations.AppProfileTemplateScreenDestination +import me.weishu.kernelsu.ui.screen.destinations.TemplateEditorScreenDestination +import me.weishu.kernelsu.ui.util.LocalSnackbarHost +import me.weishu.kernelsu.ui.util.forceStopApp +import me.weishu.kernelsu.ui.util.getSepolicy +import me.weishu.kernelsu.ui.util.launchApp +import me.weishu.kernelsu.ui.util.restartApp +import me.weishu.kernelsu.ui.util.setSepolicy +import me.weishu.kernelsu.ui.viewmodel.SuperUserViewModel +import me.weishu.kernelsu.ui.viewmodel.getTemplateInfoById + +/** + * @author weishu + * @date 2023/5/16. + */ +@Destination +@Composable +fun AppProfileScreen( + navigator: DestinationsNavigator, + appInfo: SuperUserViewModel.AppInfo, +) { + val context = LocalContext.current + val snackbarHost = LocalSnackbarHost.current + val scope = rememberCoroutineScope() + val failToUpdateAppProfile = + stringResource(R.string.failed_to_update_app_profile).format(appInfo.label) + val failToUpdateSepolicy = + stringResource(R.string.failed_to_update_sepolicy).format(appInfo.label) + + val packageName = appInfo.packageName + val initialProfile = Natives.getAppProfile(packageName, appInfo.uid) + if (initialProfile.allowSu) { + initialProfile.rules = getSepolicy(packageName) + } + var profile by rememberSaveable { + mutableStateOf(initialProfile) + } + + Scaffold( + topBar = { TopBar { navigator.popBackStack() } }, + ) { paddingValues -> + AppProfileInner( + modifier = Modifier + .padding(paddingValues) + .verticalScroll(rememberScrollState()), + packageName = appInfo.packageName, + appLabel = appInfo.label, + appIcon = { + AsyncImage( + model = ImageRequest.Builder(context).data(appInfo.packageInfo).crossfade(true) + .build(), + contentDescription = appInfo.label, + modifier = Modifier + .padding(4.dp) + .width(48.dp) + .height(48.dp) + ) + }, + profile = profile, + onViewTemplate = { + getTemplateInfoById(it)?.let { info -> + navigator.navigate(TemplateEditorScreenDestination(info)) + } + }, + onManageTemplate = { + navigator.navigate(AppProfileTemplateScreenDestination()) + }, + onProfileChange = { + scope.launch { + if (it.allowSu && !it.rootUseDefault && it.rules.isNotEmpty()) { + if (!setSepolicy(profile.name, it.rules)) { + snackbarHost.showSnackbar(failToUpdateSepolicy) + return@launch + } + } + if (!Natives.setAppProfile(it)) { + snackbarHost.showSnackbar(failToUpdateAppProfile.format(appInfo.uid)) + } else { + profile = it + } + } + }, + ) + } +} + +@Composable +private fun AppProfileInner( + modifier: Modifier = Modifier, + packageName: String, + appLabel: String, + appIcon: @Composable () -> Unit, + profile: Natives.Profile, + onViewTemplate: (id: String) -> Unit = {}, + onManageTemplate: () -> Unit = {}, + onProfileChange: (Natives.Profile) -> Unit, +) { + val isRootGranted = profile.allowSu + + Column(modifier = modifier) { + AppMenuBox(packageName) { + ListItem( + headlineContent = { Text(appLabel) }, + supportingContent = { Text(packageName) }, + leadingContent = appIcon, + ) + } + + SwitchItem( + icon = Icons.Filled.Security, + title = stringResource(id = R.string.superuser), + checked = isRootGranted, + onCheckedChange = { onProfileChange(profile.copy(allowSu = it)) }, + ) + + Crossfade(targetState = isRootGranted, label = "") { current -> + Column { + if (current) { + val initialMode = if (profile.rootUseDefault) { + Mode.Default + } else if (profile.rootTemplate != null) { + Mode.Template + } else { + Mode.Custom + } + var mode by rememberSaveable { + mutableStateOf(initialMode) + } + ProfileBox(mode, true) { + // template mode shouldn't change profile here! + if (it == Mode.Default || it == Mode.Custom) { + onProfileChange(profile.copy(rootUseDefault = it == Mode.Default)) + } + mode = it + } + Crossfade(targetState = mode, label = "") { currentMode -> + if (currentMode == Mode.Template) { + TemplateConfig( + profile = profile, + onViewTemplate = onViewTemplate, + onManageTemplate = onManageTemplate, + onProfileChange = onProfileChange + ) + } else if (mode == Mode.Custom) { + RootProfileConfig( + fixedName = true, + profile = profile, + onProfileChange = onProfileChange + ) + } + } + } else { + val mode = if (profile.nonRootUseDefault) Mode.Default else Mode.Custom + ProfileBox(mode, false) { + onProfileChange(profile.copy(nonRootUseDefault = (it == Mode.Default))) + } + Crossfade(targetState = mode, label = "") { currentMode -> + val modifyEnabled = currentMode == Mode.Custom + AppProfileConfig( + fixedName = true, + profile = profile, + enabled = modifyEnabled, + onProfileChange = onProfileChange + ) + } + } + } + } + } +} + +private enum class Mode(@StringRes private val res: Int) { + Default(R.string.profile_default), Template(R.string.profile_template), Custom(R.string.profile_custom); + + val text: String + @Composable get() = stringResource(res) +} + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +private fun TopBar(onBack: () -> Unit) { + TopAppBar( + title = { + Text(stringResource(R.string.profile)) + }, + navigationIcon = { + IconButton( + onClick = onBack + ) { Icon(Icons.AutoMirrored.Filled.ArrowBack, contentDescription = null) } + }, + ) +} + +@Composable +private fun ProfileBox( + mode: Mode, + hasTemplate: Boolean, + onModeChange: (Mode) -> Unit, +) { + ListItem( + headlineContent = { Text(stringResource(R.string.profile)) }, + supportingContent = { Text(mode.text) }, + leadingContent = { Icon(Icons.Filled.AccountCircle, null) }, + ) + HorizontalDivider(thickness = Dp.Hairline) + ListItem(headlineContent = { + Row( + modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceEvenly + ) { + FilterChip( + selected = mode == Mode.Default, + label = { Text(stringResource(R.string.profile_default)) }, + onClick = { onModeChange(Mode.Default) }, + ) + if (hasTemplate) { + FilterChip( + selected = mode == Mode.Template, + label = { Text(stringResource(R.string.profile_template)) }, + onClick = { onModeChange(Mode.Template) }, + ) + } + FilterChip( + selected = mode == Mode.Custom, + label = { Text(stringResource(R.string.profile_custom)) }, + onClick = { onModeChange(Mode.Custom) }, + ) + } + }) +} + +@Composable +private fun AppMenuBox(packageName: String, content: @Composable () -> Unit) { + + var expanded by remember { mutableStateOf(false) } + var touchPoint: Offset by remember { mutableStateOf(Offset.Zero) } + val density = LocalDensity.current + + BoxWithConstraints( + Modifier + .fillMaxSize() + .pointerInput(Unit) { + detectTapGestures { + touchPoint = it + expanded = true + } + }) { + + content() + + val (offsetX, offsetY) = with(density) { + (touchPoint.x.toDp()) to (touchPoint.y.toDp()) + } + + DropdownMenu( + expanded = expanded, + offset = DpOffset(offsetX, -offsetY), + onDismissRequest = { + expanded = false + }, + ) { + DropdownMenuItem( + text = { Text(stringResource(id = R.string.launch_app)) }, + onClick = { + expanded = false + launchApp(packageName) + }, + ) + DropdownMenuItem( + text = { Text(stringResource(id = R.string.force_stop_app)) }, + onClick = { + expanded = false + forceStopApp(packageName) + }, + ) + DropdownMenuItem( + text = { Text(stringResource(id = R.string.restart_app)) }, + onClick = { + expanded = false + restartApp(packageName) + }, + ) + } + } + + +} + +@Preview +@Composable +private fun AppProfilePreview() { + var profile by remember { mutableStateOf(Natives.Profile("")) } + AppProfileInner( + packageName = "icu.nullptr.test", + appLabel = "Test", + appIcon = { Icon(Icons.Filled.Android, null) }, + profile = profile, + onProfileChange = { + profile = it + }, + ) +} + diff --git a/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/BottomBarDestination.kt b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/BottomBarDestination.kt new file mode 100644 index 000000000000..9345ced52ff0 --- /dev/null +++ b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/BottomBarDestination.kt @@ -0,0 +1,24 @@ +package me.weishu.kernelsu.ui.screen + +import androidx.annotation.StringRes +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.* +import androidx.compose.material.icons.outlined.* +import androidx.compose.ui.graphics.vector.ImageVector +import com.ramcosta.composedestinations.spec.DirectionDestinationSpec +import me.weishu.kernelsu.R +import me.weishu.kernelsu.ui.screen.destinations.HomeScreenDestination +import me.weishu.kernelsu.ui.screen.destinations.SuperUserScreenDestination +import me.weishu.kernelsu.ui.screen.destinations.ModuleScreenDestination + +enum class BottomBarDestination( + val direction: DirectionDestinationSpec, + @StringRes val label: Int, + val iconSelected: ImageVector, + val iconNotSelected: ImageVector, + val rootRequired: Boolean, +) { + Home(HomeScreenDestination, R.string.home, Icons.Filled.Home, Icons.Outlined.Home, false), + SuperUser(SuperUserScreenDestination, R.string.superuser, Icons.Filled.Security, Icons.Outlined.Security, true), + Module(ModuleScreenDestination, R.string.module, Icons.Filled.Apps, Icons.Outlined.Apps, true) +} diff --git a/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Flash.kt b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Flash.kt new file mode 100644 index 000000000000..1e3d48fdae05 --- /dev/null +++ b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Flash.kt @@ -0,0 +1,238 @@ +package me.weishu.kernelsu.ui.screen + +import android.net.Uri +import android.os.Environment +import android.os.Parcelable +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.automirrored.filled.ArrowBack +import androidx.compose.material.icons.filled.Refresh +import androidx.compose.material.icons.filled.Save +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.ExtendedFloatingActionButton +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBar +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.input.key.Key +import androidx.compose.ui.input.key.key +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.ramcosta.composedestinations.annotation.Destination +import com.ramcosta.composedestinations.navigation.DestinationsNavigator +import com.ramcosta.composedestinations.navigation.EmptyDestinationsNavigator +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import kotlinx.parcelize.Parcelize +import me.weishu.kernelsu.R +import me.weishu.kernelsu.ui.component.KeyEventBlocker +import me.weishu.kernelsu.ui.util.LkmSelection +import me.weishu.kernelsu.ui.util.LocalSnackbarHost +import me.weishu.kernelsu.ui.util.flashModule +import me.weishu.kernelsu.ui.util.installBoot +import me.weishu.kernelsu.ui.util.reboot +import me.weishu.kernelsu.ui.util.restoreBoot +import me.weishu.kernelsu.ui.util.uninstallPermanently +import java.io.File +import java.text.SimpleDateFormat +import java.util.Date +import java.util.Locale + +enum class FlashingStatus { + FLASHING, + SUCCESS, + FAILED +} + +/** + * @author weishu + * @date 2023/1/1. + */ +@Composable +@Destination +fun FlashScreen(navigator: DestinationsNavigator, flashIt: FlashIt) { + + var text by rememberSaveable { mutableStateOf("") } + val logContent = rememberSaveable { StringBuilder() } + var showFloatAction by rememberSaveable { mutableStateOf(false) } + + val snackBarHost = LocalSnackbarHost.current + val scope = rememberCoroutineScope() + val scrollState = rememberScrollState() + var flashing by rememberSaveable { + mutableStateOf(FlashingStatus.FLASHING) + } + + LaunchedEffect(Unit) { + if (text.isNotEmpty()) { + return@LaunchedEffect + } + withContext(Dispatchers.IO) { + flashIt(flashIt, onFinish = { showReboot, code -> + if (code != 0) { + text += "Error: exit code = $code.\nPlease save and check the log.\n" + } + if (showReboot) { + text += "\n\n\n" + showFloatAction = true + } + flashing = if (code == 0) FlashingStatus.SUCCESS else FlashingStatus.FAILED + }, onStdout = { + text += "$it\n" + logContent.append(it).append("\n") + }, onStderr = { + logContent.append(it).append("\n") + }) + } + } + + Scaffold( + topBar = { + TopBar( + flashing, + onBack = { + navigator.popBackStack() + }, + onSave = { + scope.launch { + val format = SimpleDateFormat("yyyy-MM-dd-HH-mm-ss", Locale.getDefault()) + val date = format.format(Date()) + val file = File( + Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), + "KernelSU_install_log_${date}.log" + ) + file.writeText(logContent.toString()) + snackBarHost.showSnackbar("Log saved to ${file.absolutePath}") + } + } + ) + }, + floatingActionButton = { + if (showFloatAction) { + val reboot = stringResource(id = R.string.reboot) + ExtendedFloatingActionButton( + onClick = { + scope.launch { + withContext(Dispatchers.IO) { + reboot() + } + } + }, + icon = { Icon(Icons.Filled.Refresh, reboot) }, + text = { Text(text = reboot) }, + ) + } + + } + ) { innerPadding -> + KeyEventBlocker { + it.key == Key.VolumeDown || it.key == Key.VolumeUp + } + Column( + modifier = Modifier + .fillMaxSize(1f) + .padding(innerPadding) + .verticalScroll(scrollState), + ) { + LaunchedEffect(text) { + scrollState.animateScrollTo(scrollState.maxValue) + } + Text( + modifier = Modifier.padding(8.dp), + text = text, + fontSize = MaterialTheme.typography.bodySmall.fontSize, + fontFamily = FontFamily.Monospace, + lineHeight = MaterialTheme.typography.bodySmall.lineHeight, + ) + } + } +} + +@Parcelize +sealed class FlashIt : Parcelable { + data class FlashBoot(val boot: Uri? = null, val lkm: LkmSelection, val ota: Boolean) : + FlashIt() + + data class FlashModule(val uri: Uri) : FlashIt() + + data object FlashRestore : FlashIt() + + data object FlashUninstall : FlashIt() +} + +fun flashIt( + flashIt: FlashIt, onFinish: (Boolean, Int) -> Unit, + onStdout: (String) -> Unit, + onStderr: (String) -> Unit +) { + when (flashIt) { + is FlashIt.FlashBoot -> installBoot( + flashIt.boot, + flashIt.lkm, + flashIt.ota, + onFinish, + onStdout, + onStderr + ) + + is FlashIt.FlashModule -> flashModule(flashIt.uri, onFinish, onStdout, onStderr) + + FlashIt.FlashRestore -> restoreBoot(onFinish, onStdout, onStderr) + + FlashIt.FlashUninstall -> uninstallPermanently(onFinish, onStdout, onStderr) + } +} + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +private fun TopBar(status: FlashingStatus, onBack: () -> Unit = {}, onSave: () -> Unit = {}) { + TopAppBar( + title = { + Text( + stringResource( + when (status) { + FlashingStatus.FLASHING -> R.string.flashing + FlashingStatus.SUCCESS -> R.string.flash_success + FlashingStatus.FAILED -> R.string.flash_failed + } + ) + ) + }, + navigationIcon = { + IconButton( + onClick = onBack + ) { Icon(Icons.AutoMirrored.Filled.ArrowBack, contentDescription = null) } + }, + actions = { + IconButton(onClick = onSave) { + Icon( + imageVector = Icons.Filled.Save, + contentDescription = "Localized description" + ) + } + } + ) +} + +@Preview +@Composable +fun InstallPreview() { + InstallScreen(EmptyDestinationsNavigator) +} \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Home.kt b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Home.kt new file mode 100644 index 000000000000..7f1d483f14bf --- /dev/null +++ b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Home.kt @@ -0,0 +1,442 @@ +package me.weishu.kernelsu.ui.screen + +import android.content.Context +import android.os.Build +import android.os.PowerManager +import android.system.Os +import androidx.annotation.StringRes +import androidx.compose.animation.* +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.* +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Archive +import androidx.compose.material.icons.filled.Refresh +import androidx.compose.material.icons.filled.Settings +import androidx.compose.material.icons.outlined.Block +import androidx.compose.material.icons.outlined.CheckCircle +import androidx.compose.material.icons.outlined.Warning +import androidx.compose.material3.* +import androidx.compose.runtime.* +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.LocalUriHandler +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.ramcosta.composedestinations.annotation.Destination +import com.ramcosta.composedestinations.annotation.RootNavGraph +import com.ramcosta.composedestinations.navigation.DestinationsNavigator +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext +import me.weishu.kernelsu.* +import me.weishu.kernelsu.R +import me.weishu.kernelsu.ui.component.rememberConfirmDialog +import me.weishu.kernelsu.ui.screen.destinations.InstallScreenDestination +import me.weishu.kernelsu.ui.screen.destinations.SettingScreenDestination +import me.weishu.kernelsu.ui.util.* +import me.weishu.kernelsu.ui.util.module.LatestVersionInfo + +@RootNavGraph(start = true) +@Destination +@Composable +fun HomeScreen(navigator: DestinationsNavigator) { + val kernelVersion = getKernelVersion() + + Scaffold(topBar = { + TopBar(kernelVersion, onSettingsClick = { + navigator.navigate(SettingScreenDestination) + }, onInstallClick = { + navigator.navigate(InstallScreenDestination) + }) + }) { innerPadding -> + Column( + modifier = Modifier + .padding(innerPadding) + .padding(horizontal = 16.dp) + .verticalScroll(rememberScrollState()), + verticalArrangement = Arrangement.spacedBy(16.dp) + ) { + val isManager = Natives.becomeManager(ksuApp.packageName) + SideEffect { + if (isManager) install() + } + val ksuVersion = if (isManager) Natives.version else null + val lkmMode = ksuVersion?.let { + if (it >= Natives.MINIMAL_SUPPORTED_KERNEL_LKM && kernelVersion.isGKI()) Natives.isLkmMode else null + } + + StatusCard(kernelVersion, ksuVersion, lkmMode) { + navigator.navigate(InstallScreenDestination) + } + if (isManager && Natives.requireNewKernel()) { + WarningCard( + stringResource(id = R.string.require_kernel_version).format( + ksuVersion, Natives.MINIMAL_SUPPORTED_KERNEL + ) + ) + } + if (ksuVersion != null && !rootAvailable()) { + WarningCard( + stringResource(id = R.string.grant_root_failed) + ) + } + val checkUpdate = + LocalContext.current.getSharedPreferences("settings", Context.MODE_PRIVATE) + .getBoolean("check_update", true) + if (checkUpdate) { + UpdateCard() + } + InfoCard() + DonateCard() + LearnMoreCard() + Spacer(Modifier) + } + } +} + +@Composable +fun UpdateCard() { + val context = LocalContext.current + val latestVersionInfo = LatestVersionInfo() + val newVersion by produceState(initialValue = latestVersionInfo) { + value = withContext(Dispatchers.IO){ + checkNewVersion() + } + } + + + val currentVersionCode = getManagerVersion(context).second + val newVersionCode = newVersion.versionCode + val newVersionUrl = newVersion.downloadUrl + val changelog = newVersion.changelog + + val uriHandler = LocalUriHandler.current + val title = stringResource(id = R.string.module_changelog) + val updateText = stringResource(id = R.string.module_update) + + AnimatedVisibility( + visible = newVersionCode > currentVersionCode, + enter = fadeIn() + expandVertically(), + exit = shrinkVertically() + fadeOut() + ) { + val updateDialog = rememberConfirmDialog(onConfirm = { uriHandler.openUri(newVersionUrl) }) + WarningCard( + message = stringResource(id = R.string.new_version_available).format(newVersionCode), + MaterialTheme.colorScheme.outlineVariant + ) { + if (changelog.isNotEmpty()) { + updateDialog.showConfirm( + title = title, + content = changelog, + markdown = true, + confirm = updateText + ) + } + } + } +} + +@Composable +fun RebootDropdownItem(@StringRes id: Int, reason: String = "") { + DropdownMenuItem(text = { + Text(stringResource(id)) + }, onClick = { + reboot(reason) + }) +} + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +private fun TopBar( + kernelVersion: KernelVersion, + onInstallClick: () -> Unit, + onSettingsClick: () -> Unit +) { + TopAppBar(title = { Text(stringResource(R.string.app_name)) }, actions = { + if (kernelVersion.isGKI()) { + IconButton(onClick = onInstallClick) { + Icon( + imageVector = Icons.Filled.Archive, + contentDescription = stringResource(id = R.string.install) + ) + } + } + + var showDropdown by remember { mutableStateOf(false) } + IconButton(onClick = { + showDropdown = true + }) { + Icon( + imageVector = Icons.Filled.Refresh, + contentDescription = stringResource(id = R.string.reboot) + ) + + DropdownMenu(expanded = showDropdown, onDismissRequest = { + showDropdown = false + }) { + + RebootDropdownItem(id = R.string.reboot) + + val pm = + LocalContext.current.getSystemService(Context.POWER_SERVICE) as PowerManager? + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R && pm?.isRebootingUserspaceSupported == true) { + RebootDropdownItem(id = R.string.reboot_userspace, reason = "userspace") + } + RebootDropdownItem(id = R.string.reboot_recovery, reason = "recovery") + RebootDropdownItem(id = R.string.reboot_bootloader, reason = "bootloader") + RebootDropdownItem(id = R.string.reboot_download, reason = "download") + RebootDropdownItem(id = R.string.reboot_edl, reason = "edl") + } + } + + IconButton(onClick = onSettingsClick) { + Icon( + imageVector = Icons.Filled.Settings, + contentDescription = stringResource(id = R.string.settings) + ) + } + }) +} + +@Composable +private fun StatusCard( + kernelVersion: KernelVersion, + ksuVersion: Int?, + lkmMode: Boolean?, + onClickInstall: () -> Unit = {} +) { + ElevatedCard( + colors = CardDefaults.elevatedCardColors(containerColor = run { + if (ksuVersion != null) MaterialTheme.colorScheme.secondaryContainer + else MaterialTheme.colorScheme.errorContainer + }) + ) { + Row(modifier = Modifier + .fillMaxWidth() + .clickable { + if (kernelVersion.isGKI()) { + onClickInstall() + } + } + .padding(24.dp), verticalAlignment = Alignment.CenterVertically) { + when { + ksuVersion != null -> { + val safeMode = when { + Natives.isSafeMode -> " [${stringResource(id = R.string.safe_mode)}]" + else -> "" + } + + val workingMode = when (lkmMode) { + null -> "" + true -> " " + else -> " " + } + + val workingText = + "${stringResource(id = R.string.home_working)}$workingMode$safeMode" + + Icon(Icons.Outlined.CheckCircle, stringResource(R.string.home_working)) + Column(Modifier.padding(start = 20.dp)) { + Text( + text = workingText, + style = MaterialTheme.typography.titleMedium + ) + Spacer(Modifier.height(4.dp)) + Text( + text = stringResource(R.string.home_working_version, ksuVersion), + style = MaterialTheme.typography.bodyMedium + ) + Spacer(Modifier.height(4.dp)) + Text( + text = stringResource( + R.string.home_superuser_count, getSuperuserCount() + ), style = MaterialTheme.typography.bodyMedium + ) + Spacer(Modifier.height(4.dp)) + Text( + text = stringResource(R.string.home_module_count, getModuleCount()), + style = MaterialTheme.typography.bodyMedium + ) + } + } + + kernelVersion.isGKI() -> { + Icon(Icons.Outlined.Warning, stringResource(R.string.home_not_installed)) + Column(Modifier.padding(start = 20.dp)) { + Text( + text = stringResource(R.string.home_not_installed), + style = MaterialTheme.typography.titleMedium + ) + Spacer(Modifier.height(4.dp)) + Text( + text = stringResource(R.string.home_click_to_install), + style = MaterialTheme.typography.bodyMedium + ) + } + } + + else -> { + Icon(Icons.Outlined.Block, stringResource(R.string.home_unsupported)) + Column(Modifier.padding(start = 20.dp)) { + Text( + text = stringResource(R.string.home_unsupported), + style = MaterialTheme.typography.titleMedium + ) + Spacer(Modifier.height(4.dp)) + Text( + text = stringResource(R.string.home_unsupported_reason), + style = MaterialTheme.typography.bodyMedium + ) + } + } + } + } + } +} + +@Composable +fun WarningCard( + message: String, color: Color = MaterialTheme.colorScheme.error, onClick: (() -> Unit)? = null +) { + ElevatedCard( + colors = CardDefaults.elevatedCardColors( + containerColor = color + ) + ) { + Row( + modifier = Modifier + .fillMaxWidth() + .then(onClick?.let { Modifier.clickable { it() } } ?: Modifier) + .padding(24.dp) + ) { + Text( + text = message, style = MaterialTheme.typography.bodyMedium + ) + } + } +} + +@Composable +fun LearnMoreCard() { + val uriHandler = LocalUriHandler.current + val url = stringResource(R.string.home_learn_kernelsu_url) + + ElevatedCard { + + Row(modifier = Modifier + .fillMaxWidth() + .clickable { + uriHandler.openUri(url) + } + .padding(24.dp), verticalAlignment = Alignment.CenterVertically) { + Column { + Text( + text = stringResource(R.string.home_learn_kernelsu), + style = MaterialTheme.typography.titleSmall + ) + Spacer(Modifier.height(4.dp)) + Text( + text = stringResource(R.string.home_click_to_learn_kernelsu), + style = MaterialTheme.typography.bodyMedium + ) + } + } + } +} + +@Composable +fun DonateCard() { + val uriHandler = LocalUriHandler.current + + ElevatedCard { + + Row(modifier = Modifier + .fillMaxWidth() + .clickable { + uriHandler.openUri("https://patreon.com/weishu") + } + .padding(24.dp), verticalAlignment = Alignment.CenterVertically) { + Column { + Text( + text = stringResource(R.string.home_support_title), + style = MaterialTheme.typography.titleSmall + ) + Spacer(Modifier.height(4.dp)) + Text( + text = stringResource(R.string.home_support_content), + style = MaterialTheme.typography.bodyMedium + ) + } + } + } +} + +@Composable +private fun InfoCard() { + val context = LocalContext.current + + ElevatedCard { + Column( + modifier = Modifier + .fillMaxWidth() + .padding(start = 24.dp, top = 24.dp, end = 24.dp, bottom = 16.dp) + ) { + val contents = StringBuilder() + val uname = Os.uname() + + @Composable + fun InfoCardItem(label: String, content: String) { + contents.appendLine(label).appendLine(content).appendLine() + Text(text = label, style = MaterialTheme.typography.bodyLarge) + Text(text = content, style = MaterialTheme.typography.bodyMedium) + } + + InfoCardItem(stringResource(R.string.home_kernel), uname.release) + + Spacer(Modifier.height(16.dp)) + val managerVersion = getManagerVersion(context) + InfoCardItem( + stringResource(R.string.home_manager_version), + "${managerVersion.first} (${managerVersion.second})" + ) + + Spacer(Modifier.height(16.dp)) + InfoCardItem(stringResource(R.string.home_fingerprint), Build.FINGERPRINT) + + Spacer(Modifier.height(16.dp)) + InfoCardItem(stringResource(R.string.home_selinux_status), getSELinuxStatus()) + } + } +} + +fun getManagerVersion(context: Context): Pair { + val packageInfo = context.packageManager.getPackageInfo(context.packageName, 0) + return Pair(packageInfo.versionName, packageInfo.versionCode) +} + +@Preview +@Composable +private fun StatusCardPreview() { + Column { + StatusCard(KernelVersion(5, 10, 101), 1, null) + StatusCard(KernelVersion(5, 10, 101), 20000, true) + StatusCard(KernelVersion(5, 10, 101), null, true) + StatusCard(KernelVersion(4, 10, 101), null, false) + } +} + +@Preview +@Composable +private fun WarningCardPreview() { + Column { + WarningCard(message = "Warning message") + WarningCard( + message = "Warning message ", + MaterialTheme.colorScheme.outlineVariant, + onClick = {}) + } +} \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Install.kt b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Install.kt new file mode 100644 index 000000000000..71b5c9756909 --- /dev/null +++ b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Install.kt @@ -0,0 +1,311 @@ +package me.weishu.kernelsu.ui.screen + +import android.app.Activity +import android.content.Intent +import android.net.Uri +import androidx.activity.compose.rememberLauncherForActivityResult +import androidx.activity.result.contract.ActivityResultContracts +import androidx.annotation.StringRes +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.automirrored.filled.ArrowBack +import androidx.compose.material.icons.filled.FileUpload +import androidx.compose.material3.Button +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.RadioButton +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBar +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.produceState +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.maxkeppeker.sheets.core.models.base.Header +import com.maxkeppeker.sheets.core.models.base.rememberUseCaseState +import com.maxkeppeler.sheets.list.ListDialog +import com.maxkeppeler.sheets.list.models.ListOption +import com.maxkeppeler.sheets.list.models.ListSelection +import com.ramcosta.composedestinations.annotation.Destination +import com.ramcosta.composedestinations.navigation.DestinationsNavigator +import com.ramcosta.composedestinations.navigation.EmptyDestinationsNavigator +import me.weishu.kernelsu.R +import me.weishu.kernelsu.ui.component.DialogHandle +import me.weishu.kernelsu.ui.component.rememberConfirmDialog +import me.weishu.kernelsu.ui.component.rememberCustomDialog +import me.weishu.kernelsu.ui.screen.destinations.FlashScreenDestination +import me.weishu.kernelsu.ui.util.LkmSelection +import me.weishu.kernelsu.ui.util.getCurrentKmi +import me.weishu.kernelsu.ui.util.getSupportedKmis +import me.weishu.kernelsu.ui.util.isAbDevice +import me.weishu.kernelsu.ui.util.isInitBoot +import me.weishu.kernelsu.ui.util.rootAvailable + +/** + * @author weishu + * @date 2024/3/12. + */ +@Destination +@Composable +fun InstallScreen(navigator: DestinationsNavigator) { + var installMethod by remember { + mutableStateOf(null) + } + + var lkmSelection by remember { + mutableStateOf(LkmSelection.KmiNone) + } + + val onInstall = { + installMethod?.let { method -> + val flashIt = FlashIt.FlashBoot( + boot = if (method is InstallMethod.SelectFile) method.uri else null, + lkm = lkmSelection, + ota = method is InstallMethod.DirectInstallToInactiveSlot + ) + navigator.navigate(FlashScreenDestination(flashIt)) + } + } + + val currentKmi by produceState(initialValue = "") { value = getCurrentKmi() } + + val selectKmiDialog = rememberSelectKmiDialog { kmi -> + kmi?.let { + lkmSelection = LkmSelection.KmiString(it) + onInstall() + } + } + + val onClickNext = { + if (lkmSelection == LkmSelection.KmiNone && currentKmi.isBlank()) { + // no lkm file selected and cannot get current kmi + selectKmiDialog.show() + } else { + onInstall() + } + } + + val selectLkmLauncher = + rememberLauncherForActivityResult(contract = ActivityResultContracts.StartActivityForResult()) { + if (it.resultCode == Activity.RESULT_OK) { + it.data?.data?.let { uri -> + lkmSelection = LkmSelection.LkmUri(uri) + } + } + } + + val onLkmUpload = { + selectLkmLauncher.launch(Intent(Intent.ACTION_GET_CONTENT).apply { + type = "application/octet-stream" + }) + } + + Scaffold(topBar = { + TopBar( + onBack = { navigator.popBackStack() }, onLkmUpload = onLkmUpload + ) + }) { + Column(modifier = Modifier.padding(it)) { + SelectInstallMethod { method -> + installMethod = method + } + + Column( + modifier = Modifier + .fillMaxWidth() + .padding(16.dp) + ) { + (lkmSelection as? LkmSelection.LkmUri)?.let { + Text( + stringResource( + id = R.string.selected_lkm, + it.uri.lastPathSegment ?: "(file)" + ) + ) + } + Button(modifier = Modifier.fillMaxWidth(), + enabled = installMethod != null, + onClick = { + onClickNext() + }) { + Text( + stringResource(id = R.string.install_next), + fontSize = MaterialTheme.typography.bodyMedium.fontSize + ) + } + } + } + } +} + +sealed class InstallMethod { + data class SelectFile( + val uri: Uri? = null, + @StringRes override val label: Int = R.string.select_file, + override val summary: String? + ) : InstallMethod() + + data object DirectInstall : InstallMethod() { + override val label: Int + get() = R.string.direct_install + } + + data object DirectInstallToInactiveSlot : InstallMethod() { + override val label: Int + get() = R.string.install_inactive_slot + } + + abstract val label: Int + open val summary: String? = null +} + +@Composable +private fun SelectInstallMethod(onSelected: (InstallMethod) -> Unit = {}) { + val rootAvailable = rootAvailable() + val isAbDevice = isAbDevice() + val selectFileTip = stringResource( + id = R.string.select_file_tip, if (isInitBoot()) "init_boot" else "boot" + ) + val radioOptions = + mutableListOf(InstallMethod.SelectFile(summary = selectFileTip)) + if (rootAvailable) { + radioOptions.add(InstallMethod.DirectInstall) + + if (isAbDevice) { + radioOptions.add(InstallMethod.DirectInstallToInactiveSlot) + } + } + + var selectedOption by remember { mutableStateOf(null) } + val selectImageLauncher = rememberLauncherForActivityResult( + contract = ActivityResultContracts.StartActivityForResult() + ) { + if (it.resultCode == Activity.RESULT_OK) { + it.data?.data?.let { uri -> + val option = InstallMethod.SelectFile(uri, summary = selectFileTip) + selectedOption = option + onSelected(option) + } + } + } + + val confirmDialog = rememberConfirmDialog(onConfirm = { + selectedOption = InstallMethod.DirectInstallToInactiveSlot + onSelected(InstallMethod.DirectInstallToInactiveSlot) + }, onDismiss = null) + val dialogTitle = stringResource(id = android.R.string.dialog_alert_title) + val dialogContent = stringResource(id = R.string.install_inactive_slot_warning) + + val onClick = { option: InstallMethod -> + + when (option) { + is InstallMethod.SelectFile -> { + selectImageLauncher.launch(Intent(Intent.ACTION_GET_CONTENT).apply { + type = "application/octet-stream" + }) + } + + is InstallMethod.DirectInstall -> { + selectedOption = option + onSelected(option) + } + + is InstallMethod.DirectInstallToInactiveSlot -> { + confirmDialog.showConfirm(dialogTitle, dialogContent) + } + } + } + + Column { + radioOptions.forEach { option -> + Row(verticalAlignment = Alignment.CenterVertically, + modifier = Modifier + .fillMaxWidth() + .clickable { + onClick(option) + }) { + RadioButton(selected = option.javaClass == selectedOption?.javaClass, onClick = { + onClick(option) + }) + Column { + Text( + text = stringResource(id = option.label), + fontSize = MaterialTheme.typography.titleMedium.fontSize, + fontFamily = MaterialTheme.typography.titleMedium.fontFamily, + fontStyle = MaterialTheme.typography.titleMedium.fontStyle + ) + option.summary?.let { + Text( + text = it, + fontSize = MaterialTheme.typography.bodySmall.fontSize, + fontFamily = MaterialTheme.typography.bodySmall.fontFamily, + fontStyle = MaterialTheme.typography.bodySmall.fontStyle + ) + } + } + } + } + } +} + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun rememberSelectKmiDialog(onSelected: (String?) -> Unit): DialogHandle { + return rememberCustomDialog { dismiss -> + val supportedKmi by produceState(initialValue = emptyList()) { + value = getSupportedKmis() + } + val options = supportedKmi.map { value -> + ListOption( + titleText = value + ) + } + + var selection by remember { mutableStateOf(null) } + ListDialog(state = rememberUseCaseState(visible = true, onFinishedRequest = { + onSelected(selection) + }, onCloseRequest = { + dismiss() + }), header = Header.Default( + title = stringResource(R.string.select_kmi), + ), selection = ListSelection.Single( + showRadioButtons = true, + options = options, + ) { _, option -> + selection = option.titleText + }) + } +} + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +private fun TopBar(onBack: () -> Unit = {}, onLkmUpload: () -> Unit = {}) { + TopAppBar(title = { Text(stringResource(R.string.install)) }, navigationIcon = { + IconButton( + onClick = onBack + ) { Icon(Icons.AutoMirrored.Filled.ArrowBack, contentDescription = null) } + }, actions = { + IconButton(onClick = onLkmUpload) { + Icon(Icons.Filled.FileUpload, contentDescription = null) + } + }) +} + +@Composable +@Preview +fun SelectInstall_Preview() { + InstallScreen(EmptyDestinationsNavigator) +} \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Module.kt b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Module.kt new file mode 100644 index 000000000000..9812e87ebba6 --- /dev/null +++ b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Module.kt @@ -0,0 +1,576 @@ +package me.weishu.kernelsu.ui.screen + +import android.app.Activity.RESULT_OK +import android.content.Intent +import android.net.Uri +import android.util.Log +import android.widget.Toast +import androidx.activity.compose.rememberLauncherForActivityResult +import androidx.activity.result.contract.ActivityResultContracts +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.defaultMinSize +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.items +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.ExperimentalMaterialApi +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Add +import androidx.compose.material.pullrefresh.PullRefreshIndicator +import androidx.compose.material.pullrefresh.pullRefresh +import androidx.compose.material.pullrefresh.rememberPullRefreshState +import androidx.compose.material3.Button +import androidx.compose.material3.CardDefaults +import androidx.compose.material3.ElevatedCard +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.ExtendedFloatingActionButton +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Scaffold +import androidx.compose.material3.SnackbarResult +import androidx.compose.material3.Switch +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.material3.TopAppBar +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.produceState +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.text.style.TextDecoration +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp +import androidx.lifecycle.viewmodel.compose.viewModel +import com.ramcosta.composedestinations.annotation.Destination +import com.ramcosta.composedestinations.navigation.DestinationsNavigator +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import me.weishu.kernelsu.Natives +import me.weishu.kernelsu.R +import me.weishu.kernelsu.ui.component.ConfirmResult +import me.weishu.kernelsu.ui.component.rememberConfirmDialog +import me.weishu.kernelsu.ui.component.rememberLoadingDialog +import me.weishu.kernelsu.ui.screen.destinations.FlashScreenDestination +import me.weishu.kernelsu.ui.util.DownloadListener +import me.weishu.kernelsu.ui.util.LocalSnackbarHost +import me.weishu.kernelsu.ui.util.download +import me.weishu.kernelsu.ui.util.hasMagisk +import me.weishu.kernelsu.ui.util.reboot +import me.weishu.kernelsu.ui.util.toggleModule +import me.weishu.kernelsu.ui.util.uninstallModule +import me.weishu.kernelsu.ui.viewmodel.ModuleViewModel +import me.weishu.kernelsu.ui.webui.WebUIActivity +import okhttp3.OkHttpClient + +@Destination +@Composable +fun ModuleScreen(navigator: DestinationsNavigator) { + val viewModel = viewModel() + val context = LocalContext.current + + LaunchedEffect(Unit) { + if (viewModel.moduleList.isEmpty() || viewModel.isNeedRefresh) { + viewModel.fetchModuleList() + } + } + + val isSafeMode = Natives.isSafeMode + val hasMagisk = hasMagisk() + + val hideInstallButton = isSafeMode || hasMagisk + + Scaffold(topBar = { + TopBar() + }, floatingActionButton = if (hideInstallButton) { + { /* Empty */ } + } else { + { + val moduleInstall = stringResource(id = R.string.module_install) + val selectZipLauncher = rememberLauncherForActivityResult( + contract = ActivityResultContracts.StartActivityForResult() + ) { + if (it.resultCode != RESULT_OK) { + return@rememberLauncherForActivityResult + } + val data = it.data ?: return@rememberLauncherForActivityResult + val uri = data.data ?: return@rememberLauncherForActivityResult + + navigator.navigate(FlashScreenDestination(FlashIt.FlashModule(uri))) + + viewModel.markNeedRefresh() + + Log.i("ModuleScreen", "select zip result: ${it.data}") + } + + ExtendedFloatingActionButton( + onClick = { + // select the zip file to install + val intent = Intent(Intent.ACTION_GET_CONTENT) + intent.type = "application/zip" + selectZipLauncher.launch(intent) + }, + icon = { Icon(Icons.Filled.Add, moduleInstall) }, + text = { Text(text = moduleInstall) }, + ) + } + }) { innerPadding -> + + when { + hasMagisk -> { + Box( + modifier = Modifier + .fillMaxSize() + .padding(24.dp), + contentAlignment = Alignment.Center + ) { + Text( + stringResource(R.string.module_magisk_conflict), + textAlign = TextAlign.Center, + ) + } + } + + else -> { + ModuleList( + viewModel = viewModel, modifier = Modifier + .padding(innerPadding) + .fillMaxSize(), + onInstallModule = + { + navigator.navigate(FlashScreenDestination(FlashIt.FlashModule(it))) + }, onClickModule = { id, name, hasWebUi -> + if (hasWebUi) { + context.startActivity(Intent(context, WebUIActivity::class.java) + .setData(Uri.parse("kernelsu://webui/$id")) + .putExtra("id", id) + .putExtra("name", name) + ) + } + }) + } + } + } +} + +@OptIn(ExperimentalMaterialApi::class) +@Composable +private fun ModuleList( + viewModel: ModuleViewModel, + modifier: Modifier = Modifier, + onInstallModule: (Uri) -> Unit, + onClickModule: (id: String, name: String, hasWebUi: Boolean) -> Unit +) { + val failedEnable = stringResource(R.string.module_failed_to_enable) + val failedDisable = stringResource(R.string.module_failed_to_disable) + val failedUninstall = stringResource(R.string.module_uninstall_failed) + val successUninstall = stringResource(R.string.module_uninstall_success) + val reboot = stringResource(id = R.string.reboot) + val rebootToApply = stringResource(id = R.string.reboot_to_apply) + val moduleStr = stringResource(id = R.string.module) + val uninstall = stringResource(id = R.string.uninstall) + val cancel = stringResource(id = android.R.string.cancel) + val moduleUninstallConfirm = stringResource(id = R.string.module_uninstall_confirm) + val updateText = stringResource(R.string.module_update) + val changelogText = stringResource(R.string.module_changelog) + val downloadingText = stringResource(R.string.module_downloading) + val startDownloadingText = stringResource(R.string.module_start_downloading) + val fetchChangeLogFailed = stringResource(R.string.module_changelog_failed) + + val snackBarHost = LocalSnackbarHost.current + val context = LocalContext.current + + val loadingDialog = rememberLoadingDialog() + val confirmDialog = rememberConfirmDialog() + + suspend fun onModuleUpdate( + module: ModuleViewModel.ModuleInfo, + changelogUrl: String, + downloadUrl: String, + fileName: String + ) { + val changelogResult = loadingDialog.withLoading { + withContext(Dispatchers.IO) { + runCatching { + OkHttpClient().newCall( + okhttp3.Request.Builder().url(changelogUrl).build() + ).execute().body!!.string() + } + } + } + + val showToast: suspend (String) -> Unit = { msg -> + withContext(Dispatchers.Main) { + Toast.makeText( + context, + msg, + Toast.LENGTH_SHORT + ).show() + } + } + + val changelog = changelogResult.getOrElse { + showToast(fetchChangeLogFailed.format(it.message)) + return + }.ifBlank { + showToast(fetchChangeLogFailed.format(module.name)) + return + } + + // changelog is not empty, show it and wait for confirm + val confirmResult = confirmDialog.awaitConfirm( + changelogText, + content = changelog, + markdown = true, + confirm = updateText, + ) + + if (confirmResult != ConfirmResult.Confirmed) { + return + } + + showToast(startDownloadingText.format(module.name)) + + val downloading = downloadingText.format(module.name) + withContext(Dispatchers.IO) { + download( + context, + downloadUrl, + fileName, + downloading, + onDownloaded = onInstallModule, + onDownloading = { + launch(Dispatchers.Main) { + Toast.makeText(context, downloading, Toast.LENGTH_SHORT).show() + } + } + ) + } + } + + suspend fun onModuleUninstall(module: ModuleViewModel.ModuleInfo) { + val confirmResult = confirmDialog.awaitConfirm( + moduleStr, + content = moduleUninstallConfirm.format(module.name), + confirm = uninstall, + dismiss = cancel + ) + if (confirmResult != ConfirmResult.Confirmed) { + return + } + + val success = loadingDialog.withLoading { + withContext(Dispatchers.IO) { + uninstallModule(module.id) + } + } + + if (success) { + viewModel.fetchModuleList() + } + val message = if (success) { + successUninstall.format(module.name) + } else { + failedUninstall.format(module.name) + } + val actionLabel = if (success) { + reboot + } else { + null + } + val result = snackBarHost.showSnackbar(message, actionLabel = actionLabel) + if (result == SnackbarResult.ActionPerformed) { + reboot() + } + } + + val refreshState = rememberPullRefreshState(refreshing = viewModel.isRefreshing, + onRefresh = { viewModel.fetchModuleList() }) + Box(modifier.pullRefresh(refreshState)) { + val context = LocalContext.current + + LazyColumn( + modifier = Modifier.fillMaxSize(), + verticalArrangement = Arrangement.spacedBy(16.dp), + contentPadding = remember { + PaddingValues( + start = 16.dp, + top = 16.dp, + end = 16.dp, + bottom = 16.dp + 16.dp + 56.dp /* Scaffold Fab Spacing + Fab container height */ + ) + }, + ) { + when { + !viewModel.isOverlayAvailable -> { + item { + Box( + modifier = Modifier.fillParentMaxSize(), + contentAlignment = Alignment.Center + ) { + Text( + stringResource(R.string.module_overlay_fs_not_available), + textAlign = TextAlign.Center + ) + } + } + } + + viewModel.moduleList.isEmpty() -> { + item { + Box( + modifier = Modifier.fillParentMaxSize(), + contentAlignment = Alignment.Center + ) { + Text( + stringResource(R.string.module_empty), + textAlign = TextAlign.Center + ) + } + } + } + + else -> { + items(viewModel.moduleList) { module -> + var isChecked by rememberSaveable(module) { mutableStateOf(module.enabled) } + val scope = rememberCoroutineScope() + val updatedModule by produceState(initialValue = Triple("", "", "")) { + scope.launch(Dispatchers.IO) { + value = viewModel.checkUpdate(module) + } + } + + ModuleItem(module, isChecked, updatedModule.first, onUninstall = { + scope.launch { onModuleUninstall(module) } + }, onCheckChanged = { + scope.launch { + val success = loadingDialog.withLoading { + withContext(Dispatchers.IO) { + toggleModule(module.id, !isChecked) + } + } + if (success) { + isChecked = it + viewModel.fetchModuleList() + + val result = snackBarHost.showSnackbar( + rebootToApply, actionLabel = reboot + ) + if (result == SnackbarResult.ActionPerformed) { + reboot() + } + } else { + val message = if (isChecked) failedDisable else failedEnable + snackBarHost.showSnackbar(message.format(module.name)) + } + } + }, onUpdate = { + scope.launch { + onModuleUpdate( + module, + updatedModule.third, + updatedModule.first, + "${module.name}-${updatedModule.second}.zip" + ) + } + }, onClick = { + onClickModule(it.id, it.name, it.hasWebUi) + }) + + // fix last item shadow incomplete in LazyColumn + Spacer(Modifier.height(1.dp)) + } + } + } + } + + DownloadListener(context, onInstallModule) + + PullRefreshIndicator( + refreshing = viewModel.isRefreshing, state = refreshState, modifier = Modifier.align( + Alignment.TopCenter + ) + ) + } +} + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +private fun TopBar() { + TopAppBar(title = { Text(stringResource(R.string.module)) }) +} + +@Composable +private fun ModuleItem( + module: ModuleViewModel.ModuleInfo, + isChecked: Boolean, + updateUrl: String, + onUninstall: (ModuleViewModel.ModuleInfo) -> Unit, + onCheckChanged: (Boolean) -> Unit, + onUpdate: (ModuleViewModel.ModuleInfo) -> Unit, + onClick: (ModuleViewModel.ModuleInfo) -> Unit +) { + ElevatedCard( + modifier = Modifier.fillMaxWidth(), + colors = CardDefaults.elevatedCardColors(containerColor = MaterialTheme.colorScheme.surface) + ) { + + val textDecoration = if (!module.remove) null else TextDecoration.LineThrough + + Column(modifier = Modifier.clickable { onClick(module) }.padding(24.dp, 16.dp, 24.dp, 0.dp)) { + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.SpaceBetween, + ) { + val moduleVersion = stringResource(id = R.string.module_version) + val moduleAuthor = stringResource(id = R.string.module_author) + + Column(modifier = Modifier.fillMaxWidth(0.8f)) { + Text( + text = module.name, + fontSize = MaterialTheme.typography.titleMedium.fontSize, + fontWeight = FontWeight.SemiBold, + lineHeight = MaterialTheme.typography.bodySmall.lineHeight, + fontFamily = MaterialTheme.typography.titleMedium.fontFamily, + textDecoration = textDecoration, + ) + + Text( + text = "$moduleVersion: ${module.version}", + fontSize = MaterialTheme.typography.bodySmall.fontSize, + lineHeight = MaterialTheme.typography.bodySmall.lineHeight, + fontFamily = MaterialTheme.typography.bodySmall.fontFamily, + textDecoration = textDecoration + ) + + Text( + text = "$moduleAuthor: ${module.author}", + fontSize = MaterialTheme.typography.bodySmall.fontSize, + lineHeight = MaterialTheme.typography.bodySmall.lineHeight, + fontFamily = MaterialTheme.typography.bodySmall.fontFamily, + textDecoration = textDecoration + ) + } + + Spacer(modifier = Modifier.weight(1f)) + + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.End, + ) { + Switch( + enabled = !module.update, + checked = isChecked, + onCheckedChange = onCheckChanged + ) + } + } + + Spacer(modifier = Modifier.height(12.dp)) + + Text( + text = module.description, + fontSize = MaterialTheme.typography.bodySmall.fontSize, + fontFamily = MaterialTheme.typography.bodySmall.fontFamily, + lineHeight = MaterialTheme.typography.bodySmall.lineHeight, + fontWeight = MaterialTheme.typography.bodySmall.fontWeight, + overflow = TextOverflow.Ellipsis, + maxLines = 4, + textDecoration = textDecoration + ) + + + Spacer(modifier = Modifier.height(16.dp)) + + HorizontalDivider(thickness = Dp.Hairline) + + Row( + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically + ) { + Spacer(modifier = Modifier.weight(1f, true)) + + if (updateUrl.isNotEmpty()) { + Button( + modifier = Modifier + .padding(0.dp) + .defaultMinSize(52.dp, 32.dp), + onClick = { onUpdate(module) }, + shape = RoundedCornerShape(6.dp), + contentPadding = PaddingValues(0.dp) + ) { + Text( + fontFamily = MaterialTheme.typography.labelMedium.fontFamily, + fontSize = MaterialTheme.typography.labelMedium.fontSize, + text = stringResource(R.string.module_update), + ) + } + } + + TextButton( + enabled = !module.remove, + onClick = { onUninstall(module) }, + ) { + Text( + fontFamily = MaterialTheme.typography.labelMedium.fontFamily, + fontSize = MaterialTheme.typography.labelMedium.fontSize, + text = stringResource(R.string.uninstall), + ) + } + + if (module.hasWebUi) { + TextButton( + onClick = { onClick(module) }, + ) { + Text( + fontFamily = MaterialTheme.typography.labelMedium.fontFamily, + fontSize = MaterialTheme.typography.labelMedium.fontSize, + text = stringResource(R.string.open), + ) + } + } + } + } + } +} + +@Preview +@Composable +fun ModuleItemPreview() { + val module = ModuleViewModel.ModuleInfo( + id = "id", + name = "name", + version = "version", + versionCode = 1, + author = "author", + description = "I am a test module and i do nothing but show a very long description", + enabled = true, + update = true, + remove = true, + updateJson = "", + hasWebUi = false, + ) + ModuleItem(module, true, "", {}, {}, {}, {}) +} \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Settings.kt b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Settings.kt new file mode 100644 index 000000000000..4f970f7ee331 --- /dev/null +++ b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Settings.kt @@ -0,0 +1,474 @@ +package me.weishu.kernelsu.ui.screen + +import android.content.ContentResolver +import android.content.Context +import android.content.Intent +import android.database.Cursor +import android.net.Uri +import android.provider.OpenableColumns +import android.util.Log +import android.widget.Toast +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.automirrored.filled.ArrowBack +import androidx.compose.material.icons.automirrored.filled.Undo +import androidx.compose.material.icons.filled.BugReport +import androidx.compose.material.icons.filled.Compress +import androidx.compose.material.icons.filled.ContactPage +import androidx.compose.material.icons.filled.Delete +import androidx.compose.material.icons.filled.DeleteForever +import androidx.compose.material.icons.filled.DeveloperMode +import androidx.compose.material.icons.filled.Fence +import androidx.compose.material.icons.filled.RemoveModerator +import androidx.compose.material.icons.filled.Save +import androidx.compose.material.icons.filled.Share +import androidx.compose.material.icons.filled.Update +import androidx.compose.material3.BottomSheetScaffold +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.ListItem +import androidx.compose.material3.ModalBottomSheet +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBar +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.LineHeightStyle +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.core.content.FileProvider +import com.maxkeppeker.sheets.core.models.base.Header +import com.maxkeppeker.sheets.core.models.base.IconSource +import com.maxkeppeker.sheets.core.models.base.rememberUseCaseState +import com.maxkeppeler.sheets.list.ListDialog +import com.maxkeppeler.sheets.list.models.ListOption +import com.maxkeppeler.sheets.list.models.ListSelection +import com.ramcosta.composedestinations.annotation.Destination +import com.ramcosta.composedestinations.navigation.DestinationsNavigator +import com.ramcosta.composedestinations.navigation.EmptyDestinationsNavigator +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import me.weishu.kernelsu.BuildConfig +import me.weishu.kernelsu.Natives +import me.weishu.kernelsu.R +import me.weishu.kernelsu.ui.component.AboutDialog +import me.weishu.kernelsu.ui.component.ConfirmResult +import me.weishu.kernelsu.ui.component.DialogHandle +import me.weishu.kernelsu.ui.component.SwitchItem +import me.weishu.kernelsu.ui.component.rememberConfirmDialog +import me.weishu.kernelsu.ui.component.rememberCustomDialog +import me.weishu.kernelsu.ui.component.rememberLoadingDialog +import me.weishu.kernelsu.ui.screen.destinations.AppProfileTemplateScreenDestination +import me.weishu.kernelsu.ui.screen.destinations.FlashScreenDestination +import me.weishu.kernelsu.ui.util.getBugreportFile +import me.weishu.kernelsu.ui.util.getFileNameFromUri +import me.weishu.kernelsu.ui.util.shrinkModules +import java.time.LocalDateTime +import java.time.format.DateTimeFormatter + +/** + * @author weishu + * @date 2023/1/1. + */ +@OptIn(ExperimentalMaterial3Api::class) +@Destination +@Composable +fun SettingScreen(navigator: DestinationsNavigator) { + Scaffold( + topBar = { + TopBar(onBack = { + navigator.popBackStack() + }) + } + ) { paddingValues -> + val aboutDialog = rememberCustomDialog { + AboutDialog(it) + } + val loadingDialog = rememberLoadingDialog() + val shrinkDialog = rememberConfirmDialog() + + Column( + modifier = Modifier + .padding(paddingValues) + .verticalScroll(rememberScrollState()) + ) { + + val context = LocalContext.current + val scope = rememberCoroutineScope() + + val profileTemplate = stringResource(id = R.string.settings_profile_template) + ListItem( + leadingContent = { Icon(Icons.Filled.Fence, profileTemplate) }, + headlineContent = { Text(profileTemplate) }, + supportingContent = { Text(stringResource(id = R.string.settings_profile_template_summary)) }, + modifier = Modifier.clickable { + navigator.navigate(AppProfileTemplateScreenDestination) + } + ) + + var umountChecked by rememberSaveable { + mutableStateOf(Natives.isDefaultUmountModules()) + } + SwitchItem( + icon = Icons.Filled.RemoveModerator, + title = stringResource(id = R.string.settings_umount_modules_default), + summary = stringResource(id = R.string.settings_umount_modules_default_summary), + checked = umountChecked + ) { + if (Natives.setDefaultUmountModules(it)) { + umountChecked = it + } + } + + val prefs = context.getSharedPreferences("settings", Context.MODE_PRIVATE) + var checkUpdate by rememberSaveable { + mutableStateOf( + prefs.getBoolean("check_update", true) + ) + } + SwitchItem( + icon = Icons.Filled.Update, + title = stringResource(id = R.string.settings_check_update), + summary = stringResource(id = R.string.settings_check_update_summary), + checked = checkUpdate + ) { + prefs.edit().putBoolean("check_update", it).apply() + checkUpdate = it + } + + var enableWebDebugging by rememberSaveable { + mutableStateOf( + prefs.getBoolean("enable_web_debugging", false) + ) + } + SwitchItem( + icon = Icons.Filled.DeveloperMode, + title = stringResource(id = R.string.enable_web_debugging), + summary = stringResource(id = R.string.enable_web_debugging_summary), + checked = enableWebDebugging + ) { + prefs.edit().putBoolean("enable_web_debugging", it).apply() + enableWebDebugging = it + } + + var showBottomsheet by remember { mutableStateOf(false) } + + ListItem( + leadingContent = { + Icon( + Icons.Filled.BugReport, + stringResource(id = R.string.send_log) + ) + }, + headlineContent = { Text(stringResource(id = R.string.send_log)) }, + modifier = Modifier.clickable { + showBottomsheet = true + } + ) + if (showBottomsheet){ + ModalBottomSheet( + onDismissRequest = { showBottomsheet = false }, + content = { + Row(modifier = Modifier.padding(10.dp) + .align(Alignment.CenterHorizontally) + + ) { + Box{ + Column( + modifier = Modifier.padding(16.dp) + .clickable { + scope.launch { + val bugreport = loadingDialog.withLoading { + withContext(Dispatchers.IO) { + getBugreportFile(context) + } + } + + val uri: Uri = + FileProvider.getUriForFile( + context, + "${BuildConfig.APPLICATION_ID}.fileprovider", + bugreport + ) + val filename = getFileNameFromUri(context , uri) + val savefile = Intent(Intent.ACTION_CREATE_DOCUMENT).apply { + addCategory(Intent.CATEGORY_OPENABLE) + type = "application/zip" + putExtra(Intent.EXTRA_STREAM, uri) + putExtra(Intent.EXTRA_TITLE, filename) + flags = Intent.FLAG_GRANT_READ_URI_PERMISSION + } + context.startActivity( + Intent.createChooser( + savefile, + context.getString(R.string.save_log) + ) + ) + } + } + ) { + Icon( + Icons.Filled.Save, + contentDescription = null, + modifier = Modifier.align(Alignment.CenterHorizontally) + ) + Text( + text = stringResource(id = R.string.save_log), + modifier = Modifier.padding(top = 16.dp), + textAlign = TextAlign.Center.also { + LineHeightStyle( + alignment = LineHeightStyle.Alignment.Center, + trim = LineHeightStyle.Trim.None + ) + } + + ) + } + + } + Box{ + Column( + modifier = Modifier.padding(16.dp) + .clickable { + scope.launch { + val bugreport = loadingDialog.withLoading { + withContext(Dispatchers.IO) { + getBugreportFile(context) + } + } + + val uri: Uri = + FileProvider.getUriForFile( + context, + "${BuildConfig.APPLICATION_ID}.fileprovider", + bugreport + ) + + val shareIntent = Intent(Intent.ACTION_SEND) + shareIntent.putExtra(Intent.EXTRA_STREAM, uri) + shareIntent.setDataAndType(uri, "application/zip") + shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) + + context.startActivity( + Intent.createChooser( + shareIntent, + context.getString(R.string.send_log) + ) + ) + } + } + ) { + Icon( + Icons.Filled.Share, + contentDescription = null, + modifier = Modifier.align(Alignment.CenterHorizontally) + ) + Text( + text = stringResource(id = R.string.send_log), + modifier = Modifier.padding(top = 16.dp), + textAlign = TextAlign.Center.also { + LineHeightStyle( + alignment = LineHeightStyle.Alignment.Center, + trim = LineHeightStyle.Trim.None + ) + } + + ) + } + + } + } + } + ) + + + } + + val shrink = stringResource(id = R.string.shrink_sparse_image) + val shrinkMessage = stringResource(id = R.string.shrink_sparse_image_message) + ListItem( + leadingContent = { + Icon( + Icons.Filled.Compress, + shrink + ) + }, + headlineContent = { Text(shrink) }, + modifier = Modifier.clickable { + scope.launch { + val result = + shrinkDialog.awaitConfirm(title = shrink, content = shrinkMessage) + if (result == ConfirmResult.Confirmed) { + loadingDialog.withLoading { + shrinkModules() + } + } + } + } + ) + + val lkmMode = + Natives.version >= Natives.MINIMAL_SUPPORTED_KERNEL_LKM && Natives.isLkmMode + if (lkmMode) { + UninstallItem(navigator) { + loadingDialog.withLoading(it) + } + } + + val about = stringResource(id = R.string.about) + ListItem( + leadingContent = { + Icon( + Icons.Filled.ContactPage, + stringResource(id = R.string.about) + ) + }, + headlineContent = { Text(about) }, + modifier = Modifier.clickable { + aboutDialog.show() + } + ) + } + } +} +@Composable +fun UninstallItem( + navigator: DestinationsNavigator, + withLoading: suspend (suspend () -> Unit) -> Unit +) { + val context = LocalContext.current + val scope = rememberCoroutineScope() + val uninstallConfirmDialog = rememberConfirmDialog() + val showTodo = { + Toast.makeText(context, "TODO", Toast.LENGTH_SHORT).show() + } + val uninstallDialog = rememberUninstallDialog { uninstallType -> + scope.launch { + val result = uninstallConfirmDialog.awaitConfirm( + title = context.getString(uninstallType.title), + content = context.getString(uninstallType.message) + ) + if (result == ConfirmResult.Confirmed) { + withLoading { + when (uninstallType) { + UninstallType.TEMPORARY -> showTodo() + UninstallType.PERMANENT -> navigator.navigate( + FlashScreenDestination(FlashIt.FlashUninstall) + ) + + UninstallType.RESTORE_STOCK_IMAGE -> navigator.navigate( + FlashScreenDestination(FlashIt.FlashRestore) + ) + + UninstallType.NONE -> Unit + } + } + } + } + } + val uninstall = stringResource(id = R.string.settings_uninstall) + ListItem( + leadingContent = { + Icon( + Icons.Filled.Delete, + uninstall + ) + }, + headlineContent = { Text(uninstall) }, + modifier = Modifier.clickable { + uninstallDialog.show() + } + ) +} + +enum class UninstallType(val title: Int, val message: Int, val icon: ImageVector) { + TEMPORARY( + R.string.settings_uninstall_temporary, + R.string.settings_uninstall_temporary_message, + Icons.Filled.Delete + ), + PERMANENT( + R.string.settings_uninstall_permanent, + R.string.settings_uninstall_permanent_message, + Icons.Filled.DeleteForever + ), + RESTORE_STOCK_IMAGE( + R.string.settings_restore_stock_image, + R.string.settings_restore_stock_image_message, + Icons.AutoMirrored.Filled.Undo + ), + NONE(0, 0, Icons.Filled.Delete) +} + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun rememberUninstallDialog(onSelected: (UninstallType) -> Unit): DialogHandle { + return rememberCustomDialog { dismiss -> + val options = listOf( + // UninstallType.TEMPORARY, + UninstallType.PERMANENT, + UninstallType.RESTORE_STOCK_IMAGE + ) + val listOptions = options.map { + ListOption( + titleText = stringResource(it.title), + subtitleText = if (it.message != 0) stringResource(it.message) else null, + icon = IconSource(it.icon) + ) + } + + var selection = UninstallType.NONE + ListDialog(state = rememberUseCaseState(visible = true, onFinishedRequest = { + if (selection != UninstallType.NONE) { + onSelected(selection) + } + }, onCloseRequest = { + dismiss() + }), header = Header.Default( + title = stringResource(R.string.settings_uninstall), + ), selection = ListSelection.Single( + showRadioButtons = false, + options = listOptions, + ) { index, _ -> + selection = options[index] + }) + } +} + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +private fun TopBar(onBack: () -> Unit = {}) { + TopAppBar( + title = { Text(stringResource(R.string.settings)) }, + navigationIcon = { + IconButton( + onClick = onBack + ) { Icon(Icons.AutoMirrored.Filled.ArrowBack, contentDescription = null) } + }, + ) +} + +@Preview +@Composable +private fun SettingsPreview() { + SettingScreen(EmptyDestinationsNavigator) +} \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/SuperUser.kt b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/SuperUser.kt new file mode 100644 index 000000000000..2eb2e770bb9d --- /dev/null +++ b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/SuperUser.kt @@ -0,0 +1,185 @@ +package me.weishu.kernelsu.ui.screen + +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.* +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.items +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.ExperimentalMaterialApi +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.MoreVert +import androidx.compose.material.pullrefresh.PullRefreshIndicator +import androidx.compose.material.pullrefresh.pullRefresh +import androidx.compose.material.pullrefresh.rememberPullRefreshState +import androidx.compose.material3.* +import androidx.compose.runtime.* +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import androidx.lifecycle.viewmodel.compose.viewModel +import coil.compose.AsyncImage +import coil.request.ImageRequest +import com.ramcosta.composedestinations.annotation.Destination +import com.ramcosta.composedestinations.navigation.DestinationsNavigator +import kotlinx.coroutines.launch +import me.weishu.kernelsu.Natives +import me.weishu.kernelsu.R +import me.weishu.kernelsu.ui.component.SearchAppBar +import me.weishu.kernelsu.ui.screen.destinations.AppProfileScreenDestination +import me.weishu.kernelsu.ui.viewmodel.SuperUserViewModel + +@OptIn(ExperimentalMaterialApi::class) +@Destination +@Composable +fun SuperUserScreen(navigator: DestinationsNavigator) { + val viewModel = viewModel() + val scope = rememberCoroutineScope() + + LaunchedEffect(Unit) { + if (viewModel.appList.isEmpty()) { + viewModel.fetchAppList() + } + } + + Scaffold( + topBar = { + SearchAppBar( + title = { Text(stringResource(R.string.superuser)) }, + searchText = viewModel.search, + onSearchTextChange = { viewModel.search = it }, + onClearClick = { viewModel.search = "" }, + dropdownContent = { + var showDropdown by remember { mutableStateOf(false) } + + IconButton( + onClick = { showDropdown = true }, + ) { + Icon( + imageVector = Icons.Filled.MoreVert, + contentDescription = stringResource(id = R.string.settings) + ) + + DropdownMenu(expanded = showDropdown, onDismissRequest = { + showDropdown = false + }) { + DropdownMenuItem(text = { + Text(stringResource(R.string.refresh)) + }, onClick = { + scope.launch { + viewModel.fetchAppList() + } + showDropdown = false + }) + DropdownMenuItem(text = { + Text( + if (viewModel.showSystemApps) { + stringResource(R.string.hide_system_apps) + } else { + stringResource(R.string.show_system_apps) + } + ) + }, onClick = { + viewModel.showSystemApps = !viewModel.showSystemApps + showDropdown = false + }) + } + } + }, + ) + } + ) { innerPadding -> + val refreshState = rememberPullRefreshState( + refreshing = viewModel.isRefreshing, + onRefresh = { scope.launch { viewModel.fetchAppList() } }, + ) + Box( + modifier = Modifier + .padding(innerPadding) + .pullRefresh(refreshState) + ) { + LazyColumn(Modifier.fillMaxSize()) { + items(viewModel.appList, key = { it.packageName + it.uid }) { app -> + AppItem(app) { + navigator.navigate(AppProfileScreenDestination(app)) + } + + } + } + + PullRefreshIndicator( + refreshing = viewModel.isRefreshing, + state = refreshState, + modifier = Modifier.align(Alignment.TopCenter) + ) + } + } +} + +@OptIn(ExperimentalLayoutApi::class) +@Composable +private fun AppItem( + app: SuperUserViewModel.AppInfo, + onClickListener: () -> Unit, +) { + ListItem( + modifier = Modifier.clickable(onClick = onClickListener), + headlineContent = { Text(app.label) }, + supportingContent = { + Column { + Text(app.packageName) + FlowRow { + if (app.allowSu) { + LabelText(label = "ROOT") + } else { + if (Natives.uidShouldUmount(app.uid)) { + LabelText(label = "UMOUNT") + } + } + if (app.hasCustomProfile) { + LabelText(label = "CUSTOM") + } + } + } + }, + leadingContent = { + AsyncImage( + model = ImageRequest.Builder(LocalContext.current) + .data(app.packageInfo) + .crossfade(true) + .build(), + contentDescription = app.label, + modifier = Modifier + .padding(4.dp) + .width(48.dp) + .height(48.dp) + ) + }, + ) +} + +@Composable +fun LabelText(label: String) { + Box( + modifier = Modifier + .padding(top = 4.dp, end = 4.dp) + .background( + Color.Black, + shape = RoundedCornerShape(4.dp) + ) + ) { + Text( + text = label, + modifier = Modifier.padding(vertical = 2.dp, horizontal = 5.dp), + style = TextStyle( + fontSize = 8.sp, + color = Color.White, + ) + ) + } +} \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Template.kt b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Template.kt new file mode 100644 index 000000000000..bf353b0afa84 --- /dev/null +++ b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/Template.kt @@ -0,0 +1,259 @@ +package me.weishu.kernelsu.ui.screen + +import android.widget.Toast +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ExperimentalLayoutApi +import androidx.compose.foundation.layout.FlowRow +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.items +import androidx.compose.material.ExperimentalMaterialApi +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.automirrored.filled.ArrowBack +import androidx.compose.material.icons.filled.Add +import androidx.compose.material.icons.filled.ImportExport +import androidx.compose.material.icons.filled.Sync +import androidx.compose.material.pullrefresh.PullRefreshIndicator +import androidx.compose.material.pullrefresh.pullRefresh +import androidx.compose.material.pullrefresh.rememberPullRefreshState +import androidx.compose.material3.DropdownMenu +import androidx.compose.material3.DropdownMenuItem +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.ExtendedFloatingActionButton +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.ListItem +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBar +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalClipboardManager +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.AnnotatedString +import androidx.compose.ui.unit.dp +import androidx.lifecycle.viewmodel.compose.viewModel +import com.ramcosta.composedestinations.annotation.Destination +import com.ramcosta.composedestinations.navigation.DestinationsNavigator +import com.ramcosta.composedestinations.result.ResultRecipient +import com.ramcosta.composedestinations.result.getOr +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import me.weishu.kernelsu.R +import me.weishu.kernelsu.ui.screen.destinations.TemplateEditorScreenDestination +import me.weishu.kernelsu.ui.viewmodel.TemplateViewModel + +/** + * @author weishu + * @date 2023/10/20. + */ + +@OptIn(ExperimentalMaterialApi::class) +@Destination +@Composable +fun AppProfileTemplateScreen( + navigator: DestinationsNavigator, + resultRecipient: ResultRecipient +) { + val viewModel = viewModel() + val scope = rememberCoroutineScope() + + LaunchedEffect(Unit) { + if (viewModel.templateList.isEmpty()) { + viewModel.fetchTemplates() + } + } + + // handle result from TemplateEditorScreen, refresh if needed + resultRecipient.onNavResult { result -> + if (result.getOr { false }) { + scope.launch { viewModel.fetchTemplates() } + } + } + + Scaffold( + topBar = { + val clipboardManager = LocalClipboardManager.current + val context = LocalContext.current + val showToast = fun(msg: String) { + scope.launch(Dispatchers.Main) { + Toast.makeText(context, msg, Toast.LENGTH_SHORT).show() + } + } + TopBar(onBack = { navigator.popBackStack() }, + onSync = { + scope.launch { viewModel.fetchTemplates(true) } + }, + onImport = { + clipboardManager.getText()?.text?.let { + if (it.isEmpty()) { + showToast(context.getString(R.string.app_profile_template_import_empty)) + return@let + } + scope.launch { + viewModel.importTemplates( + it, { + showToast(context.getString(R.string.app_profile_template_import_success)) + viewModel.fetchTemplates(false) + }, + showToast + ) + } + } + }, + onExport = { + scope.launch { + viewModel.exportTemplates( + { + showToast(context.getString(R.string.app_profile_template_export_empty)) + } + ) { + clipboardManager.setText(AnnotatedString(it)) + } + } + } + ) + }, + floatingActionButton = { + ExtendedFloatingActionButton( + onClick = { + navigator.navigate( + TemplateEditorScreenDestination( + TemplateViewModel.TemplateInfo(), + false + ) + ) + }, + icon = { Icon(Icons.Filled.Add, null) }, + text = { Text(stringResource(id = R.string.app_profile_template_create)) }, + ) + }, + ) { innerPadding -> + val refreshState = rememberPullRefreshState( + refreshing = viewModel.isRefreshing, + onRefresh = { scope.launch { viewModel.fetchTemplates() } }, + ) + Box( + modifier = Modifier + .padding(innerPadding) + .pullRefresh(refreshState) + ) { + LazyColumn(Modifier.fillMaxSize(), contentPadding = remember { + PaddingValues(bottom = 16.dp + 16.dp + 56.dp /* Scaffold Fab Spacing + Fab container height */) + }) { + items(viewModel.templateList, key = { it.id }) { app -> + TemplateItem(navigator, app) + } + } + + PullRefreshIndicator( + refreshing = viewModel.isRefreshing, + state = refreshState, + modifier = Modifier.align(Alignment.TopCenter) + ) + } + } +} + +@OptIn(ExperimentalLayoutApi::class) +@Composable +private fun TemplateItem( + navigator: DestinationsNavigator, + template: TemplateViewModel.TemplateInfo +) { + ListItem( + modifier = Modifier + .clickable { + navigator.navigate(TemplateEditorScreenDestination(template, !template.local)) + }, + headlineContent = { Text(template.name) }, + supportingContent = { + Column { + Text( + text = "${template.id}${if (template.author.isEmpty()) "" else "@${template.author}"}", + style = MaterialTheme.typography.bodySmall, + fontSize = MaterialTheme.typography.bodySmall.fontSize, + ) + Text(template.description) + FlowRow { + LabelText(label = "UID: ${template.uid}") + LabelText(label = "GID: ${template.gid}") + LabelText(label = template.context) + if (template.local) { + LabelText(label = "local") + } else { + LabelText(label = "remote") + } + } + } + }, + ) +} + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +private fun TopBar( + onBack: () -> Unit, + onSync: () -> Unit = {}, + onImport: () -> Unit = {}, + onExport: () -> Unit = {} +) { + TopAppBar( + title = { + Text(stringResource(R.string.settings_profile_template)) + }, + navigationIcon = { + IconButton( + onClick = onBack + ) { Icon(Icons.AutoMirrored.Filled.ArrowBack, contentDescription = null) } + }, + actions = { + IconButton(onClick = onSync) { + Icon( + Icons.Filled.Sync, + contentDescription = stringResource(id = R.string.app_profile_template_sync) + ) + } + + var showDropdown by remember { mutableStateOf(false) } + IconButton(onClick = { + showDropdown = true + }) { + Icon( + imageVector = Icons.Filled.ImportExport, + contentDescription = stringResource(id = R.string.app_profile_import_export) + ) + + DropdownMenu(expanded = showDropdown, onDismissRequest = { + showDropdown = false + }) { + DropdownMenuItem(text = { + Text(stringResource(id = R.string.app_profile_import_from_clipboard)) + }, onClick = { + onImport() + showDropdown = false + }) + DropdownMenuItem(text = { + Text(stringResource(id = R.string.app_profile_export_to_clipboard)) + }, onClick = { + onExport() + showDropdown = false + }) + } + } + } + ) +} \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/TemplateEditor.kt b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/TemplateEditor.kt new file mode 100644 index 000000000000..b6b7cc8028ec --- /dev/null +++ b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/screen/TemplateEditor.kt @@ -0,0 +1,322 @@ +package me.weishu.kernelsu.ui.screen + +import android.widget.Toast +import androidx.activity.compose.BackHandler +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.text.KeyboardActions +import androidx.compose.foundation.text.KeyboardOptions +import androidx.compose.foundation.verticalScroll +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.automirrored.filled.ArrowBack +import androidx.compose.material.icons.filled.DeleteForever +import androidx.compose.material.icons.filled.Save +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.ListItem +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.OutlinedTextField +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBar +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.setValue +import androidx.compose.ui.ExperimentalComposeUiApi +import androidx.compose.ui.Modifier +import androidx.compose.ui.input.pointer.pointerInteropFilter +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.LocalSoftwareKeyboardController +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.input.ImeAction +import androidx.compose.ui.text.input.KeyboardType +import com.ramcosta.composedestinations.annotation.Destination +import com.ramcosta.composedestinations.result.ResultBackNavigator +import me.weishu.kernelsu.Natives +import me.weishu.kernelsu.R +import me.weishu.kernelsu.ui.component.profile.RootProfileConfig +import me.weishu.kernelsu.ui.util.deleteAppProfileTemplate +import me.weishu.kernelsu.ui.util.getAppProfileTemplate +import me.weishu.kernelsu.ui.util.setAppProfileTemplate +import me.weishu.kernelsu.ui.viewmodel.TemplateViewModel +import me.weishu.kernelsu.ui.viewmodel.toJSON + +/** + * @author weishu + * @date 2023/10/20. + */ +@OptIn(ExperimentalComposeUiApi::class) +@Destination +@Composable +fun TemplateEditorScreen( + navigator: ResultBackNavigator, + initialTemplate: TemplateViewModel.TemplateInfo, + readOnly: Boolean = true, +) { + + val isCreation = initialTemplate.id.isBlank() + val autoSave = !isCreation + + var template by rememberSaveable { + mutableStateOf(initialTemplate) + } + + BackHandler { + navigator.navigateBack(result = !readOnly) + } + + Scaffold( + topBar = { + val author = + if (initialTemplate.author.isNotEmpty()) "@${initialTemplate.author}" else "" + val readOnlyHint = if (readOnly) { + " - ${stringResource(id = R.string.app_profile_template_readonly)}" + } else { + "" + } + val titleSummary = "${initialTemplate.id}$author$readOnlyHint" + val saveTemplateFailed = stringResource(id = R.string.app_profile_template_save_failed) + val context = LocalContext.current + + TopBar( + title = if (isCreation) { + stringResource(R.string.app_profile_template_create) + } else if (readOnly) { + stringResource(R.string.app_profile_template_view) + } else { + stringResource(R.string.app_profile_template_edit) + }, + readOnly = readOnly, + summary = titleSummary, + onBack = { navigator.navigateBack(result = !readOnly) }, + onDelete = { + if (deleteAppProfileTemplate(template.id)) { + navigator.navigateBack(result = true) + } + }, + onSave = { + if (saveTemplate(template, isCreation)) { + navigator.navigateBack(result = true) + } else { + Toast.makeText(context, saveTemplateFailed, Toast.LENGTH_SHORT).show() + } + }) + }, + ) { innerPadding -> + Column( + modifier = Modifier + .padding(innerPadding) + .verticalScroll(rememberScrollState()) + .pointerInteropFilter { + // disable click and ripple if readOnly + readOnly + } + ) { + if (isCreation) { + var errorHint by remember { + mutableStateOf("") + } + val idConflictError = stringResource(id = R.string.app_profile_template_id_exist) + val idInvalidError = stringResource(id = R.string.app_profile_template_id_invalid) + TextEdit( + label = stringResource(id = R.string.app_profile_template_id), + text = template.id, + errorHint = errorHint, + isError = errorHint.isNotEmpty() + ) { value -> + errorHint = if (isTemplateExist(value)) { + idConflictError + } else if (!isValidTemplateId(value)) { + idInvalidError + } else { + "" + } + template = template.copy(id = value) + } + } + + TextEdit( + label = stringResource(id = R.string.app_profile_template_name), + text = template.name + ) { value -> + template.copy(name = value).run { + if (autoSave) { + if (!saveTemplate(this)) { + // failed + return@run + } + } + template = this + } + } + TextEdit( + label = stringResource(id = R.string.app_profile_template_description), + text = template.description + ) { value -> + template.copy(description = value).run { + if (autoSave) { + if (!saveTemplate(this)) { + // failed + return@run + } + } + template = this + } + } + + RootProfileConfig(fixedName = true, + profile = toNativeProfile(template), + onProfileChange = { + template.copy( + uid = it.uid, + gid = it.gid, + groups = it.groups, + capabilities = it.capabilities, + context = it.context, + namespace = it.namespace, + rules = it.rules.split("\n") + ).run { + if (autoSave) { + if (!saveTemplate(this)) { + // failed + return@run + } + } + template = this + } + }) + } + } +} + +fun toNativeProfile(templateInfo: TemplateViewModel.TemplateInfo): Natives.Profile { + return Natives.Profile().copy(rootTemplate = templateInfo.id, + uid = templateInfo.uid, + gid = templateInfo.gid, + groups = templateInfo.groups, + capabilities = templateInfo.capabilities, + context = templateInfo.context, + namespace = templateInfo.namespace, + rules = templateInfo.rules.joinToString("\n").ifBlank { "" }) +} + +fun isTemplateValid(template: TemplateViewModel.TemplateInfo): Boolean { + if (template.id.isBlank()) { + return false + } + + if (!isValidTemplateId(template.id)) { + return false + } + + return true +} + +fun saveTemplate(template: TemplateViewModel.TemplateInfo, isCreation: Boolean = false): Boolean { + if (!isTemplateValid(template)) { + return false + } + + if (isCreation && isTemplateExist(template.id)) { + return false + } + + val json = template.toJSON() + json.put("local", true) + return setAppProfileTemplate(template.id, json.toString()) +} + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +private fun TopBar( + title: String, + readOnly: Boolean, + summary: String = "", + onBack: () -> Unit, + onDelete: () -> Unit = {}, + onSave: () -> Unit = {} +) { + TopAppBar(title = { + Column { + Text(title) + if (summary.isNotBlank()) { + Text( + text = summary, + style = MaterialTheme.typography.bodyMedium, + ) + } + } + }, navigationIcon = { + IconButton( + onClick = onBack + ) { Icon(Icons.AutoMirrored.Filled.ArrowBack, contentDescription = null) } + }, actions = { + if (readOnly) { + return@TopAppBar + } + IconButton(onClick = onDelete) { + Icon( + Icons.Filled.DeleteForever, + contentDescription = stringResource(id = R.string.app_profile_template_delete) + ) + } + IconButton(onClick = onSave) { + Icon( + imageVector = Icons.Filled.Save, + contentDescription = stringResource(id = R.string.app_profile_template_save) + ) + } + }) +} + +@Composable +private fun TextEdit( + label: String, + text: String, + errorHint: String = "", + isError: Boolean = false, + onValueChange: (String) -> Unit = {} +) { + ListItem(headlineContent = { + val keyboardController = LocalSoftwareKeyboardController.current + OutlinedTextField( + value = text, + modifier = Modifier.fillMaxWidth(), + label = { Text(label) }, + suffix = + if (errorHint.isNotBlank()) { + { + Text( + text = if (isError) errorHint else "", + style = MaterialTheme.typography.bodySmall, + color = MaterialTheme.colorScheme.error + ) + } + } else { + null + }, + isError = isError, + keyboardOptions = KeyboardOptions( + keyboardType = KeyboardType.Ascii, imeAction = ImeAction.Next + ), + keyboardActions = KeyboardActions(onDone = { + keyboardController?.hide() + }), + onValueChange = onValueChange + ) + }) +} + +private fun isValidTemplateId(id: String): Boolean { + return Regex("""^([A-Za-z]{1}[A-Za-z\d_]*\.)*[A-Za-z][A-Za-z\d_]*$""").matches(id) +} + +private fun isTemplateExist(id: String): Boolean { + return getAppProfileTemplate(id).isNotBlank() +} \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/theme/Color.kt b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/theme/Color.kt new file mode 100644 index 000000000000..155cf4e248bc --- /dev/null +++ b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/theme/Color.kt @@ -0,0 +1,10 @@ +package me.weishu.kernelsu.ui.theme + +import androidx.compose.ui.graphics.Color + +val YELLOW = Color(0xFFeed502) +val YELLOW_LIGHT = Color(0xFFffff52) +val SECONDARY_LIGHT = Color(0xffa9817f) + +val YELLOW_DARK = Color(0xFFb7a400) +val SECONDARY_DARK = Color(0xFF4c2b2b) \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/theme/Theme.kt b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/theme/Theme.kt new file mode 100644 index 000000000000..3b3945d0cdc5 --- /dev/null +++ b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/theme/Theme.kt @@ -0,0 +1,64 @@ +package me.weishu.kernelsu.ui.theme + +import android.os.Build +import androidx.compose.foundation.isSystemInDarkTheme +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.darkColorScheme +import androidx.compose.material3.dynamicDarkColorScheme +import androidx.compose.material3.dynamicLightColorScheme +import androidx.compose.material3.lightColorScheme +import androidx.compose.material3.surfaceColorAtElevation +import androidx.compose.runtime.Composable +import androidx.compose.runtime.SideEffect +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.unit.dp +import com.google.accompanist.systemuicontroller.rememberSystemUiController + +private val DarkColorScheme = darkColorScheme( + primary = YELLOW, + secondary = YELLOW_DARK, + tertiary = SECONDARY_DARK +) + +private val LightColorScheme = lightColorScheme( + primary = YELLOW, + secondary = YELLOW_LIGHT, + tertiary = SECONDARY_LIGHT +) + +@Composable +fun KernelSUTheme( + darkTheme: Boolean = isSystemInDarkTheme(), + // Dynamic color is available on Android 12+ + dynamicColor: Boolean = true, + content: @Composable () -> Unit +) { + val colorScheme = when { + dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> { + val context = LocalContext.current + if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context) + } + darkTheme -> DarkColorScheme + else -> LightColorScheme + } + + val systemUiController = rememberSystemUiController() + SideEffect { + systemUiController.setStatusBarColor( + color = colorScheme.surface, + darkIcons = !darkTheme + ) + + // To match the App Navbar color + systemUiController.setNavigationBarColor( + color = colorScheme.surfaceColorAtElevation(8.dp), + darkIcons = !darkTheme, + ) + } + + MaterialTheme( + colorScheme = colorScheme, + typography = Typography, + content = content + ) +} diff --git a/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/theme/Type.kt b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/theme/Type.kt new file mode 100644 index 000000000000..e8d73313a330 --- /dev/null +++ b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/theme/Type.kt @@ -0,0 +1,33 @@ +package me.weishu.kernelsu.ui.theme + +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.sp + +// Set of Material typography styles to start with +val Typography = androidx.compose.material3.Typography( + bodyLarge = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Normal, + fontSize = 16.sp, + lineHeight = 24.sp, + letterSpacing = 0.5.sp + ) + /* Other default text styles to override + titleLarge = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Normal, + fontSize = 22.sp, + lineHeight = 28.sp, + letterSpacing = 0.sp + ), + labelSmall = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Medium, + fontSize = 11.sp, + lineHeight = 16.sp, + letterSpacing = 0.5.sp + ) + */ +) \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/util/CompositionProvider.kt b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/util/CompositionProvider.kt new file mode 100644 index 000000000000..c1b57483a02f --- /dev/null +++ b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/util/CompositionProvider.kt @@ -0,0 +1,8 @@ +package me.weishu.kernelsu.ui.util + +import androidx.compose.material3.SnackbarHostState +import androidx.compose.runtime.compositionLocalOf + +val LocalSnackbarHost = compositionLocalOf { + error("CompositionLocal LocalSnackbarController not present") +} \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/util/Downloader.kt b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/util/Downloader.kt new file mode 100644 index 000000000000..954cac50da30 --- /dev/null +++ b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/util/Downloader.kt @@ -0,0 +1,149 @@ +package me.weishu.kernelsu.ui.util + +import android.annotation.SuppressLint +import android.app.DownloadManager +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.content.IntentFilter +import android.net.Uri +import android.os.Build +import android.os.Environment +import androidx.compose.runtime.Composable +import androidx.compose.runtime.DisposableEffect +import me.weishu.kernelsu.ui.util.module.LatestVersionInfo + +/** + * @author weishu + * @date 2023/6/22. + */ +@SuppressLint("Range") +fun download( + context: Context, + url: String, + fileName: String, + description: String, + onDownloaded: (Uri) -> Unit = {}, + onDownloading: () -> Unit = {} +) { + val downloadManager = + context.getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager + + val query = DownloadManager.Query() + query.setFilterByStatus(DownloadManager.STATUS_RUNNING or DownloadManager.STATUS_PAUSED or DownloadManager.STATUS_PENDING) + downloadManager.query(query).use { cursor -> + while (cursor.moveToNext()) { + val uri = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_URI)) + val localUri = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI)) + val status = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS)) + val columnTitle = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_TITLE)) + if (url == uri || fileName == columnTitle) { + if (status == DownloadManager.STATUS_RUNNING || status == DownloadManager.STATUS_PENDING) { + onDownloading() + return + } else if (status == DownloadManager.STATUS_SUCCESSFUL) { + onDownloaded(Uri.parse(localUri)) + return + } + } + } + } + + val request = DownloadManager.Request(Uri.parse(url)) + .setDestinationInExternalPublicDir( + Environment.DIRECTORY_DOWNLOADS, + fileName + ) + .setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED) + .setMimeType("application/zip") + .setTitle(fileName) + .setDescription(description) + + downloadManager.enqueue(request) +} + +fun checkNewVersion(): LatestVersionInfo { + val url = "https://api.github.com/repos/tiann/KernelSU/releases/latest" + // default null value if failed + val defaultValue = LatestVersionInfo() + runCatching { + okhttp3.OkHttpClient().newCall(okhttp3.Request.Builder().url(url).build()).execute() + .use { response -> + if (!response.isSuccessful) { + return defaultValue + } + val body = response.body?.string() ?: return defaultValue + val json = org.json.JSONObject(body) + val changelog = json.optString("body") + + val assets = json.getJSONArray("assets") + for (i in 0 until assets.length()) { + val asset = assets.getJSONObject(i) + val name = asset.getString("name") + if (!name.endsWith(".apk")) { + continue + } + + val regex = Regex("v(.+?)_(\\d+)-") + val matchResult = regex.find(name) ?: continue + val versionName = matchResult.groupValues[1] + val versionCode = matchResult.groupValues[2].toInt() + val downloadUrl = asset.getString("browser_download_url") + + return LatestVersionInfo( + versionCode, + downloadUrl, + changelog + ) + } + + } + } + return defaultValue +} + +@Composable +fun DownloadListener(context: Context, onDownloaded: (Uri) -> Unit) { + DisposableEffect(context) { + val receiver = object : BroadcastReceiver() { + @SuppressLint("Range") + override fun onReceive(context: Context?, intent: Intent?) { + if (intent?.action == DownloadManager.ACTION_DOWNLOAD_COMPLETE) { + val id = intent.getLongExtra( + DownloadManager.EXTRA_DOWNLOAD_ID, -1 + ) + val query = DownloadManager.Query().setFilterById(id) + val downloadManager = + context?.getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager + val cursor = downloadManager.query(query) + if (cursor.moveToFirst()) { + val status = cursor.getInt( + cursor.getColumnIndex(DownloadManager.COLUMN_STATUS) + ) + if (status == DownloadManager.STATUS_SUCCESSFUL) { + val uri = cursor.getString( + cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI) + ) + onDownloaded(Uri.parse(uri)) + } + } + } + } + } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + context.registerReceiver( + receiver, + IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE), + Context.RECEIVER_EXPORTED + ) + } else { + context.registerReceiver( + receiver, + IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE) + ) + } + onDispose { + context.unregisterReceiver(receiver) + } + } +} diff --git a/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/util/HanziToPinyin.java b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/util/HanziToPinyin.java new file mode 100644 index 000000000000..d3d57cefe2ea --- /dev/null +++ b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/util/HanziToPinyin.java @@ -0,0 +1,576 @@ +package me.weishu.kernelsu.ui.util; +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import android.text.TextUtils; +import android.util.Log; + +import java.text.Collator; +import java.util.ArrayList; +import java.util.Locale; + +/** + * An object to convert Chinese character to its corresponding pinyin string. For characters with + * multiple possible pinyin string, only one is selected according to collator. Polyphone is not + * supported in this implementation. This class is implemented to achieve the best runtime + * performance and minimum runtime resources with tolerable sacrifice of accuracy. This + * implementation highly depends on zh_CN ICU collation data and must be always synchronized with + * ICU. + *

+ * Currently this file is aligned to zh.txt in ICU 4.6 + */ +public class HanziToPinyin { + private static final String TAG = "HanziToPinyin"; + + // Turn on this flag when we want to check internal data structure. + private static final boolean DEBUG = false; + + /** + * Unihans array. + *

+ * Each unihans is the first one within same pinyin when collator is zh_CN. + */ + public static final char[] UNIHANS = { + '\u963f', '\u54ce', '\u5b89', '\u80ae', '\u51f9', '\u516b', + '\u6300', '\u6273', '\u90a6', '\u52f9', '\u9642', '\u5954', + '\u4f3b', '\u5c44', '\u8fb9', '\u706c', '\u618b', '\u6c43', + '\u51ab', '\u7676', '\u5cec', '\u5693', '\u5072', '\u53c2', + '\u4ed3', '\u64a1', '\u518a', '\u5d7e', '\u66fd', '\u66fe', + '\u5c64', '\u53c9', '\u8286', '\u8fbf', '\u4f25', '\u6284', + '\u8f66', '\u62bb', '\u6c88', '\u6c89', '\u9637', '\u5403', + '\u5145', '\u62bd', '\u51fa', '\u6b3b', '\u63e3', '\u5ddb', + '\u5205', '\u5439', '\u65fe', '\u9034', '\u5472', '\u5306', + '\u51d1', '\u7c97', '\u6c46', '\u5d14', '\u90a8', '\u6413', + '\u5491', '\u5446', '\u4e39', '\u5f53', '\u5200', '\u561a', + '\u6265', '\u706f', '\u6c10', '\u55f2', '\u7538', '\u5201', + '\u7239', '\u4e01', '\u4e1f', '\u4e1c', '\u543a', '\u53be', + '\u8011', '\u8968', '\u5428', '\u591a', '\u59b8', '\u8bf6', + '\u5940', '\u97a5', '\u513f', '\u53d1', '\u5e06', '\u531a', + '\u98de', '\u5206', '\u4e30', '\u8985', '\u4ecf', '\u7d11', + '\u4f15', '\u65ee', '\u4f85', '\u7518', '\u5188', '\u768b', + '\u6208', '\u7ed9', '\u6839', '\u522f', '\u5de5', '\u52fe', + '\u4f30', '\u74dc', '\u4e56', '\u5173', '\u5149', '\u5f52', + '\u4e28', '\u5459', '\u54c8', '\u548d', '\u4f44', '\u592f', + '\u8320', '\u8bc3', '\u9ed2', '\u62eb', '\u4ea8', '\u5677', + '\u53ff', '\u9f41', '\u4e6f', '\u82b1', '\u6000', '\u72bf', + '\u5ddf', '\u7070', '\u660f', '\u5419', '\u4e0c', '\u52a0', + '\u620b', '\u6c5f', '\u827d', '\u9636', '\u5dfe', '\u5755', + '\u5182', '\u4e29', '\u51e5', '\u59e2', '\u5658', '\u519b', + '\u5494', '\u5f00', '\u520a', '\u5ffc', '\u5c3b', '\u533c', + '\u808e', '\u52a5', '\u7a7a', '\u62a0', '\u625d', '\u5938', + '\u84af', '\u5bbd', '\u5321', '\u4e8f', '\u5764', '\u6269', + '\u5783', '\u6765', '\u5170', '\u5577', '\u635e', '\u808b', + '\u52d2', '\u5d1a', '\u5215', '\u4fe9', '\u5941', '\u826f', + '\u64a9', '\u5217', '\u62ce', '\u5222', '\u6e9c', '\u56d6', + '\u9f99', '\u779c', '\u565c', '\u5a08', '\u7567', '\u62a1', + '\u7f57', '\u5463', '\u5988', '\u57cb', '\u5ada', '\u7264', + '\u732b', '\u4e48', '\u5445', '\u95e8', '\u753f', '\u54aa', + '\u5b80', '\u55b5', '\u4e5c', '\u6c11', '\u540d', '\u8c2c', + '\u6478', '\u54de', '\u6bea', '\u55ef', '\u62cf', '\u8149', + '\u56e1', '\u56d4', '\u5b6c', '\u7592', '\u5a1e', '\u6041', + '\u80fd', '\u59ae', '\u62c8', '\u5b22', '\u9e1f', '\u634f', + '\u56dc', '\u5b81', '\u599e', '\u519c', '\u7fba', '\u5974', + '\u597b', '\u759f', '\u9ec1', '\u90cd', '\u5594', '\u8bb4', + '\u5991', '\u62cd', '\u7705', '\u4e53', '\u629b', '\u5478', + '\u55b7', '\u5309', '\u4e15', '\u56e8', '\u527d', '\u6c15', + '\u59d8', '\u4e52', '\u948b', '\u5256', '\u4ec6', '\u4e03', + '\u6390', '\u5343', '\u545b', '\u6084', '\u767f', '\u4eb2', + '\u72c5', '\u828e', '\u4e18', '\u533a', '\u5cd1', '\u7f3a', + '\u590b', '\u5465', '\u7a63', '\u5a06', '\u60f9', '\u4eba', + '\u6254', '\u65e5', '\u8338', '\u53b9', '\u909a', '\u633c', + '\u5827', '\u5a51', '\u77a4', '\u637c', '\u4ee8', '\u6be2', + '\u4e09', '\u6852', '\u63bb', '\u95aa', '\u68ee', '\u50e7', + '\u6740', '\u7b5b', '\u5c71', '\u4f24', '\u5f30', '\u5962', + '\u7533', '\u8398', '\u6552', '\u5347', '\u5c38', '\u53ce', + '\u4e66', '\u5237', '\u8870', '\u95e9', '\u53cc', '\u8c01', + '\u542e', '\u8bf4', '\u53b6', '\u5fea', '\u635c', '\u82cf', + '\u72fb', '\u590a', '\u5b59', '\u5506', '\u4ed6', '\u56fc', + '\u574d', '\u6c64', '\u5932', '\u5fd1', '\u71a5', '\u5254', + '\u5929', '\u65eb', '\u5e16', '\u5385', '\u56f2', '\u5077', + '\u51f8', '\u6e4d', '\u63a8', '\u541e', '\u4e47', '\u7a75', + '\u6b6a', '\u5f2f', '\u5c23', '\u5371', '\u6637', '\u7fc1', + '\u631d', '\u4e4c', '\u5915', '\u8672', '\u4eda', '\u4e61', + '\u7071', '\u4e9b', '\u5fc3', '\u661f', '\u51f6', '\u4f11', + '\u5401', '\u5405', '\u524a', '\u5743', '\u4e2b', '\u6079', + '\u592e', '\u5e7a', '\u503b', '\u4e00', '\u56d9', '\u5e94', + '\u54df', '\u4f63', '\u4f18', '\u625c', '\u56e6', '\u66f0', + '\u6655', '\u7b60', '\u7b7c', '\u5e00', '\u707d', '\u5142', + '\u5328', '\u50ae', '\u5219', '\u8d3c', '\u600e', '\u5897', + '\u624e', '\u635a', '\u6cbe', '\u5f20', '\u957f', '\u9577', + '\u4f4b', '\u8707', '\u8d1e', '\u4e89', '\u4e4b', '\u5cd9', + '\u5ea2', '\u4e2d', '\u5dde', '\u6731', '\u6293', '\u62fd', + '\u4e13', '\u5986', '\u96b9', '\u5b92', '\u5353', '\u4e72', + '\u5b97', '\u90b9', '\u79df', '\u94bb', '\u539c', '\u5c0a', + '\u6628', '\u5159', '\u9fc3', '\u9fc4',}; + + /** + * Pinyin array. + *

+ * Each pinyin is corresponding to unihans of same + * offset in the unihans array. + */ + public static final byte[][] PINYINS = { + {65, 0, 0, 0, 0, 0}, {65, 73, 0, 0, 0, 0}, + {65, 78, 0, 0, 0, 0}, {65, 78, 71, 0, 0, 0}, + {65, 79, 0, 0, 0, 0}, {66, 65, 0, 0, 0, 0}, + {66, 65, 73, 0, 0, 0}, {66, 65, 78, 0, 0, 0}, + {66, 65, 78, 71, 0, 0}, {66, 65, 79, 0, 0, 0}, + {66, 69, 73, 0, 0, 0}, {66, 69, 78, 0, 0, 0}, + {66, 69, 78, 71, 0, 0}, {66, 73, 0, 0, 0, 0}, + {66, 73, 65, 78, 0, 0}, {66, 73, 65, 79, 0, 0}, + {66, 73, 69, 0, 0, 0}, {66, 73, 78, 0, 0, 0}, + {66, 73, 78, 71, 0, 0}, {66, 79, 0, 0, 0, 0}, + {66, 85, 0, 0, 0, 0}, {67, 65, 0, 0, 0, 0}, + {67, 65, 73, 0, 0, 0}, {67, 65, 78, 0, 0, 0}, + {67, 65, 78, 71, 0, 0}, {67, 65, 79, 0, 0, 0}, + {67, 69, 0, 0, 0, 0}, {67, 69, 78, 0, 0, 0}, + {67, 69, 78, 71, 0, 0}, {90, 69, 78, 71, 0, 0}, + {67, 69, 78, 71, 0, 0}, {67, 72, 65, 0, 0, 0}, + {67, 72, 65, 73, 0, 0}, {67, 72, 65, 78, 0, 0}, + {67, 72, 65, 78, 71, 0}, {67, 72, 65, 79, 0, 0}, + {67, 72, 69, 0, 0, 0}, {67, 72, 69, 78, 0, 0}, + {83, 72, 69, 78, 0, 0}, {67, 72, 69, 78, 0, 0}, + {67, 72, 69, 78, 71, 0}, {67, 72, 73, 0, 0, 0}, + {67, 72, 79, 78, 71, 0}, {67, 72, 79, 85, 0, 0}, + {67, 72, 85, 0, 0, 0}, {67, 72, 85, 65, 0, 0}, + {67, 72, 85, 65, 73, 0}, {67, 72, 85, 65, 78, 0}, + {67, 72, 85, 65, 78, 71}, {67, 72, 85, 73, 0, 0}, + {67, 72, 85, 78, 0, 0}, {67, 72, 85, 79, 0, 0}, + {67, 73, 0, 0, 0, 0}, {67, 79, 78, 71, 0, 0}, + {67, 79, 85, 0, 0, 0}, {67, 85, 0, 0, 0, 0}, + {67, 85, 65, 78, 0, 0}, {67, 85, 73, 0, 0, 0}, + {67, 85, 78, 0, 0, 0}, {67, 85, 79, 0, 0, 0}, + {68, 65, 0, 0, 0, 0}, {68, 65, 73, 0, 0, 0}, + {68, 65, 78, 0, 0, 0}, {68, 65, 78, 71, 0, 0}, + {68, 65, 79, 0, 0, 0}, {68, 69, 0, 0, 0, 0}, + {68, 69, 78, 0, 0, 0}, {68, 69, 78, 71, 0, 0}, + {68, 73, 0, 0, 0, 0}, {68, 73, 65, 0, 0, 0}, + {68, 73, 65, 78, 0, 0}, {68, 73, 65, 79, 0, 0}, + {68, 73, 69, 0, 0, 0}, {68, 73, 78, 71, 0, 0}, + {68, 73, 85, 0, 0, 0}, {68, 79, 78, 71, 0, 0}, + {68, 79, 85, 0, 0, 0}, {68, 85, 0, 0, 0, 0}, + {68, 85, 65, 78, 0, 0}, {68, 85, 73, 0, 0, 0}, + {68, 85, 78, 0, 0, 0}, {68, 85, 79, 0, 0, 0}, + {69, 0, 0, 0, 0, 0}, {69, 73, 0, 0, 0, 0}, + {69, 78, 0, 0, 0, 0}, {69, 78, 71, 0, 0, 0}, + {69, 82, 0, 0, 0, 0}, {70, 65, 0, 0, 0, 0}, + {70, 65, 78, 0, 0, 0}, {70, 65, 78, 71, 0, 0}, + {70, 69, 73, 0, 0, 0}, {70, 69, 78, 0, 0, 0}, + {70, 69, 78, 71, 0, 0}, {70, 73, 65, 79, 0, 0}, + {70, 79, 0, 0, 0, 0}, {70, 79, 85, 0, 0, 0}, + {70, 85, 0, 0, 0, 0}, {71, 65, 0, 0, 0, 0}, + {71, 65, 73, 0, 0, 0}, {71, 65, 78, 0, 0, 0}, + {71, 65, 78, 71, 0, 0}, {71, 65, 79, 0, 0, 0}, + {71, 69, 0, 0, 0, 0}, {71, 69, 73, 0, 0, 0}, + {71, 69, 78, 0, 0, 0}, {71, 69, 78, 71, 0, 0}, + {71, 79, 78, 71, 0, 0}, {71, 79, 85, 0, 0, 0}, + {71, 85, 0, 0, 0, 0}, {71, 85, 65, 0, 0, 0}, + {71, 85, 65, 73, 0, 0}, {71, 85, 65, 78, 0, 0}, + {71, 85, 65, 78, 71, 0}, {71, 85, 73, 0, 0, 0}, + {71, 85, 78, 0, 0, 0}, {71, 85, 79, 0, 0, 0}, + {72, 65, 0, 0, 0, 0}, {72, 65, 73, 0, 0, 0}, + {72, 65, 78, 0, 0, 0}, {72, 65, 78, 71, 0, 0}, + {72, 65, 79, 0, 0, 0}, {72, 69, 0, 0, 0, 0}, + {72, 69, 73, 0, 0, 0}, {72, 69, 78, 0, 0, 0}, + {72, 69, 78, 71, 0, 0}, {72, 77, 0, 0, 0, 0}, + {72, 79, 78, 71, 0, 0}, {72, 79, 85, 0, 0, 0}, + {72, 85, 0, 0, 0, 0}, {72, 85, 65, 0, 0, 0}, + {72, 85, 65, 73, 0, 0}, {72, 85, 65, 78, 0, 0}, + {72, 85, 65, 78, 71, 0}, {72, 85, 73, 0, 0, 0}, + {72, 85, 78, 0, 0, 0}, {72, 85, 79, 0, 0, 0}, + {74, 73, 0, 0, 0, 0}, {74, 73, 65, 0, 0, 0}, + {74, 73, 65, 78, 0, 0}, {74, 73, 65, 78, 71, 0}, + {74, 73, 65, 79, 0, 0}, {74, 73, 69, 0, 0, 0}, + {74, 73, 78, 0, 0, 0}, {74, 73, 78, 71, 0, 0}, + {74, 73, 79, 78, 71, 0}, {74, 73, 85, 0, 0, 0}, + {74, 85, 0, 0, 0, 0}, {74, 85, 65, 78, 0, 0}, + {74, 85, 69, 0, 0, 0}, {74, 85, 78, 0, 0, 0}, + {75, 65, 0, 0, 0, 0}, {75, 65, 73, 0, 0, 0}, + {75, 65, 78, 0, 0, 0}, {75, 65, 78, 71, 0, 0}, + {75, 65, 79, 0, 0, 0}, {75, 69, 0, 0, 0, 0}, + {75, 69, 78, 0, 0, 0}, {75, 69, 78, 71, 0, 0}, + {75, 79, 78, 71, 0, 0}, {75, 79, 85, 0, 0, 0}, + {75, 85, 0, 0, 0, 0}, {75, 85, 65, 0, 0, 0}, + {75, 85, 65, 73, 0, 0}, {75, 85, 65, 78, 0, 0}, + {75, 85, 65, 78, 71, 0}, {75, 85, 73, 0, 0, 0}, + {75, 85, 78, 0, 0, 0}, {75, 85, 79, 0, 0, 0}, + {76, 65, 0, 0, 0, 0}, {76, 65, 73, 0, 0, 0}, + {76, 65, 78, 0, 0, 0}, {76, 65, 78, 71, 0, 0}, + {76, 65, 79, 0, 0, 0}, {76, 69, 0, 0, 0, 0}, + {76, 69, 73, 0, 0, 0}, {76, 69, 78, 71, 0, 0}, + {76, 73, 0, 0, 0, 0}, {76, 73, 65, 0, 0, 0}, + {76, 73, 65, 78, 0, 0}, {76, 73, 65, 78, 71, 0}, + {76, 73, 65, 79, 0, 0}, {76, 73, 69, 0, 0, 0}, + {76, 73, 78, 0, 0, 0}, {76, 73, 78, 71, 0, 0}, + {76, 73, 85, 0, 0, 0}, {76, 79, 0, 0, 0, 0}, + {76, 79, 78, 71, 0, 0}, {76, 79, 85, 0, 0, 0}, + {76, 85, 0, 0, 0, 0}, {76, 85, 65, 78, 0, 0}, + {76, 85, 69, 0, 0, 0}, {76, 85, 78, 0, 0, 0}, + {76, 85, 79, 0, 0, 0}, {77, 0, 0, 0, 0, 0}, + {77, 65, 0, 0, 0, 0}, {77, 65, 73, 0, 0, 0}, + {77, 65, 78, 0, 0, 0}, {77, 65, 78, 71, 0, 0}, + {77, 65, 79, 0, 0, 0}, {77, 69, 0, 0, 0, 0}, + {77, 69, 73, 0, 0, 0}, {77, 69, 78, 0, 0, 0}, + {77, 69, 78, 71, 0, 0}, {77, 73, 0, 0, 0, 0}, + {77, 73, 65, 78, 0, 0}, {77, 73, 65, 79, 0, 0}, + {77, 73, 69, 0, 0, 0}, {77, 73, 78, 0, 0, 0}, + {77, 73, 78, 71, 0, 0}, {77, 73, 85, 0, 0, 0}, + {77, 79, 0, 0, 0, 0}, {77, 79, 85, 0, 0, 0}, + {77, 85, 0, 0, 0, 0}, {78, 0, 0, 0, 0, 0}, + {78, 65, 0, 0, 0, 0}, {78, 65, 73, 0, 0, 0}, + {78, 65, 78, 0, 0, 0}, {78, 65, 78, 71, 0, 0}, + {78, 65, 79, 0, 0, 0}, {78, 69, 0, 0, 0, 0}, + {78, 69, 73, 0, 0, 0}, {78, 69, 78, 0, 0, 0}, + {78, 69, 78, 71, 0, 0}, {78, 73, 0, 0, 0, 0}, + {78, 73, 65, 78, 0, 0}, {78, 73, 65, 78, 71, 0}, + {78, 73, 65, 79, 0, 0}, {78, 73, 69, 0, 0, 0}, + {78, 73, 78, 0, 0, 0}, {78, 73, 78, 71, 0, 0}, + {78, 73, 85, 0, 0, 0}, {78, 79, 78, 71, 0, 0}, + {78, 79, 85, 0, 0, 0}, {78, 85, 0, 0, 0, 0}, + {78, 85, 65, 78, 0, 0}, {78, 85, 69, 0, 0, 0}, + {78, 85, 78, 0, 0, 0}, {78, 85, 79, 0, 0, 0}, + {79, 0, 0, 0, 0, 0}, {79, 85, 0, 0, 0, 0}, + {80, 65, 0, 0, 0, 0}, {80, 65, 73, 0, 0, 0}, + {80, 65, 78, 0, 0, 0}, {80, 65, 78, 71, 0, 0}, + {80, 65, 79, 0, 0, 0}, {80, 69, 73, 0, 0, 0}, + {80, 69, 78, 0, 0, 0}, {80, 69, 78, 71, 0, 0}, + {80, 73, 0, 0, 0, 0}, {80, 73, 65, 78, 0, 0}, + {80, 73, 65, 79, 0, 0}, {80, 73, 69, 0, 0, 0}, + {80, 73, 78, 0, 0, 0}, {80, 73, 78, 71, 0, 0}, + {80, 79, 0, 0, 0, 0}, {80, 79, 85, 0, 0, 0}, + {80, 85, 0, 0, 0, 0}, {81, 73, 0, 0, 0, 0}, + {81, 73, 65, 0, 0, 0}, {81, 73, 65, 78, 0, 0}, + {81, 73, 65, 78, 71, 0}, {81, 73, 65, 79, 0, 0}, + {81, 73, 69, 0, 0, 0}, {81, 73, 78, 0, 0, 0}, + {81, 73, 78, 71, 0, 0}, {81, 73, 79, 78, 71, 0}, + {81, 73, 85, 0, 0, 0}, {81, 85, 0, 0, 0, 0}, + {81, 85, 65, 78, 0, 0}, {81, 85, 69, 0, 0, 0}, + {81, 85, 78, 0, 0, 0}, {82, 65, 78, 0, 0, 0}, + {82, 65, 78, 71, 0, 0}, {82, 65, 79, 0, 0, 0}, + {82, 69, 0, 0, 0, 0}, {82, 69, 78, 0, 0, 0}, + {82, 69, 78, 71, 0, 0}, {82, 73, 0, 0, 0, 0}, + {82, 79, 78, 71, 0, 0}, {82, 79, 85, 0, 0, 0}, + {82, 85, 0, 0, 0, 0}, {82, 85, 65, 0, 0, 0}, + {82, 85, 65, 78, 0, 0}, {82, 85, 73, 0, 0, 0}, + {82, 85, 78, 0, 0, 0}, {82, 85, 79, 0, 0, 0}, + {83, 65, 0, 0, 0, 0}, {83, 65, 73, 0, 0, 0}, + {83, 65, 78, 0, 0, 0}, {83, 65, 78, 71, 0, 0}, + {83, 65, 79, 0, 0, 0}, {83, 69, 0, 0, 0, 0}, + {83, 69, 78, 0, 0, 0}, {83, 69, 78, 71, 0, 0}, + {83, 72, 65, 0, 0, 0}, {83, 72, 65, 73, 0, 0}, + {83, 72, 65, 78, 0, 0}, {83, 72, 65, 78, 71, 0}, + {83, 72, 65, 79, 0, 0}, {83, 72, 69, 0, 0, 0}, + {83, 72, 69, 78, 0, 0}, {88, 73, 78, 0, 0, 0}, + {83, 72, 69, 78, 0, 0}, {83, 72, 69, 78, 71, 0}, + {83, 72, 73, 0, 0, 0}, {83, 72, 79, 85, 0, 0}, + {83, 72, 85, 0, 0, 0}, {83, 72, 85, 65, 0, 0}, + {83, 72, 85, 65, 73, 0}, {83, 72, 85, 65, 78, 0}, + {83, 72, 85, 65, 78, 71}, {83, 72, 85, 73, 0, 0}, + {83, 72, 85, 78, 0, 0}, {83, 72, 85, 79, 0, 0}, + {83, 73, 0, 0, 0, 0}, {83, 79, 78, 71, 0, 0}, + {83, 79, 85, 0, 0, 0}, {83, 85, 0, 0, 0, 0}, + {83, 85, 65, 78, 0, 0}, {83, 85, 73, 0, 0, 0}, + {83, 85, 78, 0, 0, 0}, {83, 85, 79, 0, 0, 0}, + {84, 65, 0, 0, 0, 0}, {84, 65, 73, 0, 0, 0}, + {84, 65, 78, 0, 0, 0}, {84, 65, 78, 71, 0, 0}, + {84, 65, 79, 0, 0, 0}, {84, 69, 0, 0, 0, 0}, + {84, 69, 78, 71, 0, 0}, {84, 73, 0, 0, 0, 0}, + {84, 73, 65, 78, 0, 0}, {84, 73, 65, 79, 0, 0}, + {84, 73, 69, 0, 0, 0}, {84, 73, 78, 71, 0, 0}, + {84, 79, 78, 71, 0, 0}, {84, 79, 85, 0, 0, 0}, + {84, 85, 0, 0, 0, 0}, {84, 85, 65, 78, 0, 0}, + {84, 85, 73, 0, 0, 0}, {84, 85, 78, 0, 0, 0}, + {84, 85, 79, 0, 0, 0}, {87, 65, 0, 0, 0, 0}, + {87, 65, 73, 0, 0, 0}, {87, 65, 78, 0, 0, 0}, + {87, 65, 78, 71, 0, 0}, {87, 69, 73, 0, 0, 0}, + {87, 69, 78, 0, 0, 0}, {87, 69, 78, 71, 0, 0}, + {87, 79, 0, 0, 0, 0}, {87, 85, 0, 0, 0, 0}, + {88, 73, 0, 0, 0, 0}, {88, 73, 65, 0, 0, 0}, + {88, 73, 65, 78, 0, 0}, {88, 73, 65, 78, 71, 0}, + {88, 73, 65, 79, 0, 0}, {88, 73, 69, 0, 0, 0}, + {88, 73, 78, 0, 0, 0}, {88, 73, 78, 71, 0, 0}, + {88, 73, 79, 78, 71, 0}, {88, 73, 85, 0, 0, 0}, + {88, 85, 0, 0, 0, 0}, {88, 85, 65, 78, 0, 0}, + {88, 85, 69, 0, 0, 0}, {88, 85, 78, 0, 0, 0}, + {89, 65, 0, 0, 0, 0}, {89, 65, 78, 0, 0, 0}, + {89, 65, 78, 71, 0, 0}, {89, 65, 79, 0, 0, 0}, + {89, 69, 0, 0, 0, 0}, {89, 73, 0, 0, 0, 0}, + {89, 73, 78, 0, 0, 0}, {89, 73, 78, 71, 0, 0}, + {89, 79, 0, 0, 0, 0}, {89, 79, 78, 71, 0, 0}, + {89, 79, 85, 0, 0, 0}, {89, 85, 0, 0, 0, 0}, + {89, 85, 65, 78, 0, 0}, {89, 85, 69, 0, 0, 0}, + {89, 85, 78, 0, 0, 0}, {74, 85, 78, 0, 0, 0}, + {89, 85, 78, 0, 0, 0}, {90, 65, 0, 0, 0, 0}, + {90, 65, 73, 0, 0, 0}, {90, 65, 78, 0, 0, 0}, + {90, 65, 78, 71, 0, 0}, {90, 65, 79, 0, 0, 0}, + {90, 69, 0, 0, 0, 0}, {90, 69, 73, 0, 0, 0}, + {90, 69, 78, 0, 0, 0}, {90, 69, 78, 71, 0, 0}, + {90, 72, 65, 0, 0, 0}, {90, 72, 65, 73, 0, 0}, + {90, 72, 65, 78, 0, 0}, {90, 72, 65, 78, 71, 0}, + {67, 72, 65, 78, 71, 0}, {90, 72, 65, 78, 71, 0}, + {90, 72, 65, 79, 0, 0}, {90, 72, 69, 0, 0, 0}, + {90, 72, 69, 78, 0, 0}, {90, 72, 69, 78, 71, 0}, + {90, 72, 73, 0, 0, 0}, {83, 72, 73, 0, 0, 0}, + {90, 72, 73, 0, 0, 0}, {90, 72, 79, 78, 71, 0}, + {90, 72, 79, 85, 0, 0}, {90, 72, 85, 0, 0, 0}, + {90, 72, 85, 65, 0, 0}, {90, 72, 85, 65, 73, 0}, + {90, 72, 85, 65, 78, 0}, {90, 72, 85, 65, 78, 71}, + {90, 72, 85, 73, 0, 0}, {90, 72, 85, 78, 0, 0}, + {90, 72, 85, 79, 0, 0}, {90, 73, 0, 0, 0, 0}, + {90, 79, 78, 71, 0, 0}, {90, 79, 85, 0, 0, 0}, + {90, 85, 0, 0, 0, 0}, {90, 85, 65, 78, 0, 0}, + {90, 85, 73, 0, 0, 0}, {90, 85, 78, 0, 0, 0}, + {90, 85, 79, 0, 0, 0}, {0, 0, 0, 0, 0, 0}, + {83, 72, 65, 78, 0, 0}, {0, 0, 0, 0, 0, 0},}; + + /** + * First and last Chinese character with known Pinyin according to zh collation + */ + private static final String FIRST_PINYIN_UNIHAN = "\u963F"; + private static final String LAST_PINYIN_UNIHAN = "\u9FFF"; + + private static final Collator COLLATOR = Collator.getInstance(Locale.CHINA); + + private static HanziToPinyin sInstance; + private final boolean mHasChinaCollator; + + public static class Token { + /** + * Separator between target string for each source char + */ + public static final String SEPARATOR = " "; + + public static final int LATIN = 1; + public static final int PINYIN = 2; + public static final int UNKNOWN = 3; + + public Token() { + } + + public Token(int type, String source, String target) { + this.type = type; + this.source = source; + this.target = target; + } + + /** + * Type of this token, ASCII, PINYIN or UNKNOWN. + */ + public int type; + /** + * Original string before translation. + */ + public String source; + /** + * Translated string of source. For Han, target is corresponding Pinyin. Otherwise target is + * original string in source. + */ + public String target; + } + + protected HanziToPinyin(boolean hasChinaCollator) { + mHasChinaCollator = hasChinaCollator; + } + + public static HanziToPinyin getInstance() { + synchronized (HanziToPinyin.class) { + if (sInstance != null) { + return sInstance; + } + // Check if zh_CN collation data is available + final Locale[] locale = Collator.getAvailableLocales(); + for (Locale value : locale) { + if (value.equals(Locale.CHINA) || value.getLanguage().contains("zh")) { + // Do self validation just once. + if (DEBUG) { + Log.d(TAG, "Self validation. Result: " + doSelfValidation()); + } + sInstance = new HanziToPinyin(true); + return sInstance; + } + } + if (sInstance == null){//这个判断是用于处理国产ROM的兼容性问题 + if (Locale.CHINA.equals(Locale.getDefault())){ + sInstance = new HanziToPinyin(true); + return sInstance; + } + } + Log.w(TAG, "There is no Chinese collator, HanziToPinyin is disabled"); + sInstance = new HanziToPinyin(false); + return sInstance; + } + } + + /** + * Validate if our internal table has some wrong value. + * + * @return true when the table looks correct. + */ + private static boolean doSelfValidation() { + char lastChar = UNIHANS[0]; + String lastString = Character.toString(lastChar); + for (char c : UNIHANS) { + if (lastChar == c) { + continue; + } + final String curString = Character.toString(c); + int cmp = COLLATOR.compare(lastString, curString); + if (cmp >= 0) { + Log.e(TAG, "Internal error in Unihan table. " + "The last string \"" + lastString + + "\" is greater than current string \"" + curString + "\"."); + return false; + } + lastString = curString; + } + return true; + } + + private Token getToken(char character) { + Token token = new Token(); + final String letter = Character.toString(character); + token.source = letter; + int offset = -1; + int cmp; + if (character < 256) { + token.type = Token.LATIN; + token.target = letter; + return token; + } else { + cmp = COLLATOR.compare(letter, FIRST_PINYIN_UNIHAN); + if (cmp < 0) { + token.type = Token.UNKNOWN; + token.target = letter; + return token; + } else if (cmp == 0) { + token.type = Token.PINYIN; + offset = 0; + } else { + cmp = COLLATOR.compare(letter, LAST_PINYIN_UNIHAN); + if (cmp > 0) { + token.type = Token.UNKNOWN; + token.target = letter; + return token; + } else if (cmp == 0) { + token.type = Token.PINYIN; + offset = UNIHANS.length - 1; + } + } + } + + token.type = Token.PINYIN; + if (offset < 0) { + int begin = 0; + int end = UNIHANS.length - 1; + while (begin <= end) { + offset = (begin + end) / 2; + final String unihan = Character.toString(UNIHANS[offset]); + cmp = COLLATOR.compare(letter, unihan); + if (cmp == 0) { + break; + } else if (cmp > 0) { + begin = offset + 1; + } else { + end = offset - 1; + } + } + } + if (cmp < 0) { + offset--; + } + StringBuilder pinyin = new StringBuilder(); + for (int j = 0; j < PINYINS[offset].length && PINYINS[offset][j] != 0; j++) { + pinyin.append((char) PINYINS[offset][j]); + } + token.target = pinyin.toString(); + if (TextUtils.isEmpty(token.target)) { + token.type = Token.UNKNOWN; + token.target = token.source; + } + return token; + } + + /** + * Convert the input to a array of tokens. The sequence of ASCII or Unknown characters without + * space will be put into a Token, One Hanzi character which has pinyin will be treated as a + * Token. If these is no China collator, the empty token array is returned. + */ + public ArrayList get(final String input) { + ArrayList tokens = new ArrayList<>(); + if (!mHasChinaCollator || TextUtils.isEmpty(input)) { + // return empty tokens. + return tokens; + } + final int inputLength = input.length(); + final StringBuilder sb = new StringBuilder(); + int tokenType = Token.LATIN; + // Go through the input, create a new token when + // a. Token type changed + // b. Get the Pinyin of current charater. + // c. current character is space. + for (int i = 0; i < inputLength; i++) { + final char character = input.charAt(i); + if (character == ' ') { + if (sb.length() > 0) { + addToken(sb, tokens, tokenType); + } + } else if (character < 256) { + if (tokenType != Token.LATIN && sb.length() > 0) { + addToken(sb, tokens, tokenType); + } + tokenType = Token.LATIN; + sb.append(character); + } else { + Token t = getToken(character); + if (t.type == Token.PINYIN) { + if (sb.length() > 0) { + addToken(sb, tokens, tokenType); + } + tokens.add(t); + tokenType = Token.PINYIN; + } else { + if (tokenType != t.type && sb.length() > 0) { + addToken(sb, tokens, tokenType); + } + tokenType = t.type; + sb.append(character); + } + } + } + if (sb.length() > 0) { + addToken(sb, tokens, tokenType); + } + return tokens; + } + + private void addToken( + final StringBuilder sb, final ArrayList tokens, final int tokenType) { + String str = sb.toString(); + tokens.add(new Token(tokenType, str, str)); + sb.setLength(0); + } + + public String toPinyinString(String string) { + if (string == null) { + return null; + } + StringBuilder sb = new StringBuilder(); + ArrayList tokens = get(string); + for (Token token : tokens) { + sb.append(token.target); + } + return sb.toString().toLowerCase(); + } +} \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/util/HyperlinkText.kt b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/util/HyperlinkText.kt new file mode 100644 index 000000000000..4473b828aa1a --- /dev/null +++ b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/util/HyperlinkText.kt @@ -0,0 +1,87 @@ +package me.weishu.kernelsu.ui.util + +import androidx.compose.foundation.gestures.detectTapGestures +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.input.pointer.pointerInput +import androidx.compose.ui.platform.LocalUriHandler +import androidx.compose.ui.text.SpanStyle +import androidx.compose.ui.text.TextLayoutResult +import androidx.compose.ui.text.buildAnnotatedString +import androidx.compose.ui.text.style.TextDecoration +import java.util.regex.Pattern + +@Composable +fun LinkifyText( + text: String, + modifier: Modifier = Modifier +) { + val uriHandler = LocalUriHandler.current + val layoutResult = remember { + mutableStateOf(null) + } + val linksList = extractUrls(text) + val annotatedString = buildAnnotatedString { + append(text) + linksList.forEach { + addStyle( + style = SpanStyle( + color = MaterialTheme.colorScheme.primary, + textDecoration = TextDecoration.Underline + ), + start = it.start, + end = it.end + ) + addStringAnnotation( + tag = "URL", + annotation = it.url, + start = it.start, + end = it.end + ) + } + } + Text( + text = annotatedString, + modifier = modifier.pointerInput(Unit) { + detectTapGestures { offsetPosition -> + layoutResult.value?.let { + val position = it.getOffsetForPosition(offsetPosition) + annotatedString.getStringAnnotations(position, position).firstOrNull() + ?.let { result -> + if (result.tag == "URL") { + uriHandler.openUri(result.item) + } + } + } + } + }, + onTextLayout = { layoutResult.value = it } + ) +} + +private val urlPattern: Pattern = Pattern.compile( + "(?:^|[\\W])((ht|f)tp(s?):\\/\\/|www\\.)" + + "(([\\w\\-]+\\.){1,}?([\\w\\-.~]+\\/?)*" + + "[\\p{Alnum}.,%_=?&#\\-+()\\[\\]\\*$~@!:/{};']*)", + Pattern.CASE_INSENSITIVE or Pattern.MULTILINE or Pattern.DOTALL +) + +private data class LinkInfo( + val url: String, + val start: Int, + val end: Int +) + +private fun extractUrls(text: String): List = buildList { + val matcher = urlPattern.matcher(text) + while (matcher.find()) { + val matchStart = matcher.start(1) + val matchEnd = matcher.end() + val url = text.substring(matchStart, matchEnd).replaceFirst("http://", "https://") + add(LinkInfo(url, matchStart, matchEnd)) + } +} diff --git a/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/util/KsuCli.kt b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/util/KsuCli.kt new file mode 100644 index 000000000000..108e08f2a139 --- /dev/null +++ b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/util/KsuCli.kt @@ -0,0 +1,428 @@ +package me.weishu.kernelsu.ui.util + +import android.content.ContentResolver +import android.content.Context +import android.database.Cursor +import android.net.Uri +import android.os.Build +import android.os.Environment +import android.os.Parcelable +import android.os.SystemClock +import android.provider.OpenableColumns +import android.util.Log +import com.topjohnwu.superuser.CallbackList +import com.topjohnwu.superuser.Shell +import com.topjohnwu.superuser.ShellUtils +import com.topjohnwu.superuser.io.SuFile +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext +import kotlinx.parcelize.Parcelize +import me.weishu.kernelsu.BuildConfig +import me.weishu.kernelsu.Natives +import me.weishu.kernelsu.ksuApp +import org.json.JSONArray +import java.io.File + + +/** + * @author weishu + * @date 2023/1/1. + */ +private const val TAG = "KsuCli" + +private fun getKsuDaemonPath(): String { + return ksuApp.applicationInfo.nativeLibraryDir + File.separator + "libksud.so" +} + +object KsuCli { + val SHELL: Shell = createRootShell() + val GLOBAL_MNT_SHELL: Shell = createRootShell(true) +} + +fun getRootShell(globalMnt: Boolean = false): Shell { + return if (globalMnt) KsuCli.GLOBAL_MNT_SHELL else { + KsuCli.SHELL + } +} + +inline fun withNewRootShell( + globalMnt: Boolean = false, + block: Shell.() -> T +): T { + return createRootShell(globalMnt).use(block) +} + +fun getFileNameFromUri(context: Context, uri: Uri): String? { + var fileName: String? = null + val contentResolver: ContentResolver = context.contentResolver + val cursor: Cursor? = contentResolver.query(uri, null, null, null, null) + cursor?.use { + if (it.moveToFirst()) { + fileName = it.getString(it.getColumnIndexOrThrow(OpenableColumns.DISPLAY_NAME)) + } + } + return fileName +} + +fun createRootShell(globalMnt: Boolean = false): Shell { + Shell.enableVerboseLogging = BuildConfig.DEBUG + val builder = Shell.Builder.create() + return try { + if (globalMnt) { + builder.build(getKsuDaemonPath(), "debug", "su", "-g") + } else { + builder.build(getKsuDaemonPath(), "debug", "su") + } + } catch (e: Throwable) { + Log.w(TAG, "ksu failed: ", e) + try { + if (globalMnt) { + builder.build("su") + } else { + builder.build("su", "-mm") + } + } catch (e: Throwable) { + Log.e(TAG, "su failed: ", e) + builder.build("sh") + } + } +} + +fun execKsud(args: String, newShell: Boolean = false): Boolean { + return if (newShell) { + withNewRootShell { + ShellUtils.fastCmdResult(this, "${getKsuDaemonPath()} $args") + } + } else { + ShellUtils.fastCmdResult(getRootShell(), "${getKsuDaemonPath()} $args") + } +} + +fun install() { + val start = SystemClock.elapsedRealtime() + val magiskboot = File(ksuApp.applicationInfo.nativeLibraryDir, "libmagiskboot.so").absolutePath + val result = execKsud("install --magiskboot $magiskboot", true) + Log.w(TAG, "install result: $result, cost: ${SystemClock.elapsedRealtime() - start}ms") +} + +fun listModules(): String { + val shell = getRootShell() + + val out = + shell.newJob().add("${getKsuDaemonPath()} module list").to(ArrayList(), null).exec().out + return out.joinToString("\n").ifBlank { "[]" } +} + +fun getModuleCount(): Int { + val result = listModules() + runCatching { + val array = JSONArray(result) + return array.length() + }.getOrElse { return 0 } +} + +fun getSuperuserCount(): Int { + return Natives.allowList.size +} + +fun toggleModule(id: String, enable: Boolean): Boolean { + val cmd = if (enable) { + "module enable $id" + } else { + "module disable $id" + } + val result = execKsud(cmd, true) + Log.i(TAG, "$cmd result: $result") + return result +} + +fun uninstallModule(id: String): Boolean { + val cmd = "module uninstall $id" + val result = execKsud(cmd, true) + Log.i(TAG, "uninstall module $id result: $result") + return result +} + +private fun flashWithIO( + cmd: String, + onStdout: (String) -> Unit, + onStderr: (String) -> Unit +): Shell.Result { + + val stdoutCallback: CallbackList = object : CallbackList() { + override fun onAddElement(s: String?) { + onStdout(s ?: "") + } + } + + val stderrCallback: CallbackList = object : CallbackList() { + override fun onAddElement(s: String?) { + onStderr(s ?: "") + } + } + + return withNewRootShell { + newJob().add(cmd).to(stdoutCallback, stderrCallback).exec() + } +} + +fun flashModule( + uri: Uri, + onFinish: (Boolean, Int) -> Unit, + onStdout: (String) -> Unit, + onStderr: (String) -> Unit +): Boolean { + val resolver = ksuApp.contentResolver + with(resolver.openInputStream(uri)) { + val file = File(ksuApp.cacheDir, "module.zip") + file.outputStream().use { output -> + this?.copyTo(output) + } + val cmd = "module install ${file.absolutePath}" + val result = flashWithIO("${getKsuDaemonPath()} $cmd", onStdout, onStderr) + Log.i("KernelSU", "install module $uri result: $result") + + file.delete() + + onFinish(result.isSuccess, result.code) + return result.isSuccess + } +} + +fun restoreBoot( + onFinish: (Boolean, Int) -> Unit, onStdout: (String) -> Unit, onStderr: (String) -> Unit +): Boolean { + val magiskboot = File(ksuApp.applicationInfo.nativeLibraryDir, "libmagiskboot.so") + val result = flashWithIO("${getKsuDaemonPath()} boot-restore -f --magiskboot $magiskboot", onStdout, onStderr) + onFinish(result.isSuccess, result.code) + return result.isSuccess +} + +fun uninstallPermanently( + onFinish: (Boolean, Int) -> Unit, onStdout: (String) -> Unit, onStderr: (String) -> Unit +): Boolean { + val magiskboot = File(ksuApp.applicationInfo.nativeLibraryDir, "libmagiskboot.so") + val result = flashWithIO("${getKsuDaemonPath()} uninstall --magiskboot $magiskboot", onStdout, onStderr) + onFinish(result.isSuccess, result.code) + return result.isSuccess +} + +suspend fun shrinkModules(): Boolean = withContext(Dispatchers.IO) { + execKsud("module shrink", true) +} + +@Parcelize +sealed class LkmSelection : Parcelable { + data class LkmUri(val uri: Uri) : LkmSelection() + data class KmiString(val value: String) : LkmSelection() + data object KmiNone : LkmSelection() +} + +fun installBoot( + bootUri: Uri?, + lkm: LkmSelection, + ota: Boolean, + onFinish: (Boolean, Int) -> Unit, + onStdout: (String) -> Unit, + onStderr: (String) -> Unit, +): Boolean { + val resolver = ksuApp.contentResolver + + val bootFile = bootUri?.let { uri -> + with(resolver.openInputStream(uri)) { + val bootFile = File(ksuApp.cacheDir, "boot.img") + bootFile.outputStream().use { output -> + this?.copyTo(output) + } + + bootFile + } + } + + val magiskboot = File(ksuApp.applicationInfo.nativeLibraryDir, "libmagiskboot.so") + var cmd = "boot-patch --magiskboot ${magiskboot.absolutePath}" + + cmd += if (bootFile == null) { + // no boot.img, use -f to force install + " -f" + } else { + " -b ${bootFile.absolutePath}" + } + + if (ota) { + cmd += " -u" + } + + var lkmFile: File? = null + when (lkm) { + is LkmSelection.LkmUri -> { + lkmFile = with(resolver.openInputStream(lkm.uri)) { + val file = File(ksuApp.cacheDir, "kernelsu-tmp-lkm.ko") + file.outputStream().use { output -> + this?.copyTo(output) + } + + file + } + cmd += " -m ${lkmFile.absolutePath}" + } + + is LkmSelection.KmiString -> { + cmd += " --kmi ${lkm.value}" + } + + LkmSelection.KmiNone -> { + // do nothing + } + } + + // output dir + val downloadsDir = + Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) + cmd += " -o $downloadsDir" + + val result = flashWithIO("${getKsuDaemonPath()} $cmd", onStdout, onStderr) + Log.i("KernelSU", "install boot result: ${result.isSuccess}") + + bootFile?.delete() + lkmFile?.delete() + + // if boot uri is empty, it is direct install, when success, we should show reboot button + onFinish(bootUri == null && result.isSuccess, result.code) + return result.isSuccess +} + +fun reboot(reason: String = "") { + val shell = getRootShell() + if (reason == "recovery") { + // KEYCODE_POWER = 26, hide incorrect "Factory data reset" message + ShellUtils.fastCmd(shell, "/system/bin/input keyevent 26") + } + ShellUtils.fastCmd(shell, "/system/bin/svc power reboot $reason || /system/bin/reboot $reason") +} + +fun rootAvailable(): Boolean { + val shell = getRootShell() + return shell.isRoot +} + +fun isAbDevice(): Boolean { + val shell = getRootShell() + return ShellUtils.fastCmd(shell, "getprop ro.build.ab_update").trim().toBoolean() +} + +fun isInitBoot(): Boolean { + val shell = getRootShell() + if (shell.isRoot) { + // if we have root, use /dev/block/by-name/init_boot to check + val abDevice = isAbDevice() + val initBootBlock = "/dev/block/by-name/init_boot${if (abDevice) "_a" else ""}" + val file = SuFile(initBootBlock) + file.shell = shell + return file.exists() + } + // https://source.android.com/docs/core/architecture/partitions/generic-boot + return ShellUtils.fastCmd(shell, "getprop ro.product.first_api_level").trim() + .toInt() >= Build.VERSION_CODES.TIRAMISU +} + +suspend fun getCurrentKmi(): String = withContext(Dispatchers.IO) { + val shell = getRootShell() + val cmd = "boot-info current-kmi" + ShellUtils.fastCmd(shell, "${getKsuDaemonPath()} $cmd") +} + +suspend fun getSupportedKmis(): List = withContext(Dispatchers.IO) { + val shell = getRootShell() + val cmd = "boot-info supported-kmi" + val out = shell.newJob().add("${getKsuDaemonPath()} $cmd").to(ArrayList(), null).exec().out + out.filter { it.isNotBlank() }.map { it.trim() } +} + +fun overlayFsAvailable(): Boolean { + val shell = getRootShell() + // check /proc/filesystems + return ShellUtils.fastCmdResult(shell, "cat /proc/filesystems | grep overlay") +} + +fun hasMagisk(): Boolean { + val shell = getRootShell(true) + val result = shell.newJob().add("which magisk").exec() + Log.i(TAG, "has magisk: ${result.isSuccess}") + return result.isSuccess +} + +fun isSepolicyValid(rules: String?): Boolean { + if (rules == null) { + return true + } + val shell = getRootShell() + val result = + shell.newJob().add("${getKsuDaemonPath()} sepolicy check '$rules'").to(ArrayList(), null) + .exec() + return result.isSuccess +} + +fun getSepolicy(pkg: String): String { + val shell = getRootShell() + val result = + shell.newJob().add("${getKsuDaemonPath()} profile get-sepolicy $pkg").to(ArrayList(), null) + .exec() + Log.i(TAG, "code: ${result.code}, out: ${result.out}, err: ${result.err}") + return result.out.joinToString("\n") +} + +fun setSepolicy(pkg: String, rules: String): Boolean { + val shell = getRootShell() + val result = shell.newJob().add("${getKsuDaemonPath()} profile set-sepolicy $pkg '$rules'") + .to(ArrayList(), null).exec() + Log.i(TAG, "set sepolicy result: ${result.code}") + return result.isSuccess +} + +fun listAppProfileTemplates(): List { + val shell = getRootShell() + return shell.newJob().add("${getKsuDaemonPath()} profile list-templates").to(ArrayList(), null) + .exec().out +} + +fun getAppProfileTemplate(id: String): String { + val shell = getRootShell() + return shell.newJob().add("${getKsuDaemonPath()} profile get-template '${id}'") + .to(ArrayList(), null).exec().out.joinToString("\n") +} + +fun setAppProfileTemplate(id: String, template: String): Boolean { + val shell = getRootShell() + val escapedTemplate = template.replace("\"", "\\\"") + val cmd = """${getKsuDaemonPath()} profile set-template "$id" "$escapedTemplate'"""" + return shell.newJob().add(cmd) + .to(ArrayList(), null).exec().isSuccess +} + +fun deleteAppProfileTemplate(id: String): Boolean { + val shell = getRootShell() + return shell.newJob().add("${getKsuDaemonPath()} profile delete-template '${id}'") + .to(ArrayList(), null).exec().isSuccess +} + +fun forceStopApp(packageName: String) { + val shell = getRootShell() + val result = shell.newJob().add("am force-stop $packageName").exec() + Log.i(TAG, "force stop $packageName result: $result") +} + +fun launchApp(packageName: String) { + + val shell = getRootShell() + val result = + shell.newJob() + .add("cmd package resolve-activity --brief $packageName | tail -n 1 | xargs cmd activity start-activity -n") + .exec() + Log.i(TAG, "launch $packageName result: $result") +} + +fun restartApp(packageName: String) { + forceStopApp(packageName) + launchApp(packageName) +} diff --git a/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/util/LogEvent.kt b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/util/LogEvent.kt new file mode 100644 index 000000000000..19eb1df18991 --- /dev/null +++ b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/util/LogEvent.kt @@ -0,0 +1,115 @@ +package me.weishu.kernelsu.ui.util + +import android.content.ContentResolver +import android.content.Context +import android.net.Uri +import android.os.Build +import android.os.ParcelFileDescriptor +import android.system.Os +import com.topjohnwu.superuser.ShellUtils +import me.weishu.kernelsu.Natives +import me.weishu.kernelsu.ui.screen.getManagerVersion +import java.io.File +import java.io.FileOutputStream +import java.io.FileWriter +import java.io.PrintWriter +import java.time.LocalDateTime +import java.time.format.DateTimeFormatter + +fun getBugreportFile(context: Context): File { + + val bugreportDir = File(context.cacheDir, "bugreport") + bugreportDir.mkdirs() + + val dmesgFile = File(bugreportDir, "dmesg.txt") + val logcatFile = File(bugreportDir, "logcat.txt") + val tombstonesFile = File(bugreportDir, "tombstones.tar.gz") + val dropboxFile = File(bugreportDir, "dropbox.tar.gz") + val pstoreFile = File(bugreportDir, "pstore.tar.gz") + // Xiaomi/Readmi devices have diag in /data/vendor/diag + val diagFile = File(bugreportDir, "diag.tar.gz") + val opulsFile = File(bugreportDir, "opuls.tar.gz") + val bootlogFile = File(bugreportDir, "bootlog.tar.gz") + val mountsFile = File(bugreportDir, "mounts.txt") + val fileSystemsFile = File(bugreportDir, "filesystems.txt") + val adbFileTree = File(bugreportDir, "adb_tree.txt") + val adbFileDetails = File(bugreportDir, "adb_details.txt") + val ksuFileSize = File(bugreportDir, "ksu_size.txt") + val appListFile = File(bugreportDir, "packages.txt") + val propFile = File(bugreportDir, "props.txt") + val allowListFile = File(bugreportDir, "allowlist.bin") + val procModules = File(bugreportDir, "proc_modules.txt") + val bootConfig = File(bugreportDir, "boot_config.txt") + val kernelConfig = File(bugreportDir, "defconfig.gz") + + val shell = getRootShell(true) + + shell.newJob().add("dmesg > ${dmesgFile.absolutePath}").exec() + shell.newJob().add("logcat -d > ${logcatFile.absolutePath}").exec() + shell.newJob().add("tar -czf ${tombstonesFile.absolutePath} -C /data/tombstones .").exec() + shell.newJob().add("tar -czf ${dropboxFile.absolutePath} -C /data/system/dropbox .").exec() + shell.newJob().add("tar -czf ${pstoreFile.absolutePath} -C /sys/fs/pstore .").exec() + shell.newJob().add("tar -czf ${diagFile.absolutePath} -C /data/vendor/diag . --exclude=./minidump.gz").exec() + shell.newJob().add("tar -czf ${opulsFile.absolutePath} -C /mnt/oplus/op2/media/log/boot_log/ .").exec() + shell.newJob().add("tar -czf ${bootlogFile.absolutePath} -C /data/adb/ksu/log .").exec() + + shell.newJob().add("cat /proc/1/mountinfo > ${mountsFile.absolutePath}").exec() + shell.newJob().add("cat /proc/filesystems > ${fileSystemsFile.absolutePath}").exec() + shell.newJob().add("busybox tree /data/adb > ${adbFileTree.absolutePath}").exec() + shell.newJob().add("ls -alRZ /data/adb > ${adbFileDetails.absolutePath}").exec() + shell.newJob().add("du -sh /data/adb/ksu/* > ${ksuFileSize.absolutePath}").exec() + shell.newJob().add("cp /data/system/packages.list ${appListFile.absolutePath}").exec() + shell.newJob().add("getprop > ${propFile.absolutePath}").exec() + shell.newJob().add("cp /data/adb/ksu/.allowlist ${allowListFile.absolutePath}").exec() + shell.newJob().add("cp /proc/modules ${procModules.absolutePath}").exec() + shell.newJob().add("cp /proc/bootconfig ${bootConfig.absolutePath}").exec() + shell.newJob().add("cp /proc/config.gz ${kernelConfig.absolutePath}").exec() + + val selinux = ShellUtils.fastCmd(shell, "getenforce") + + // basic information + val buildInfo = File(bugreportDir, "basic.txt") + PrintWriter(FileWriter(buildInfo)).use { pw -> + pw.println("Kernel: ${System.getProperty("os.version")}") + pw.println("BRAND: " + Build.BRAND) + pw.println("MODEL: " + Build.MODEL) + pw.println("PRODUCT: " + Build.PRODUCT) + pw.println("MANUFACTURER: " + Build.MANUFACTURER) + pw.println("SDK: " + Build.VERSION.SDK_INT) + pw.println("PREVIEW_SDK: " + Build.VERSION.PREVIEW_SDK_INT) + pw.println("FINGERPRINT: " + Build.FINGERPRINT) + pw.println("DEVICE: " + Build.DEVICE) + pw.println("Manager: " + getManagerVersion(context)) + pw.println("SELinux: $selinux") + + val uname = Os.uname() + pw.println("KernelRelease: ${uname.release}") + pw.println("KernelVersion: ${uname.version}") + pw.println("Machine: ${uname.machine}") + pw.println("Nodename: ${uname.nodename}") + pw.println("Sysname: ${uname.sysname}") + + val ksuKernel = Natives.version + pw.println("KernelSU: $ksuKernel") + val safeMode = Natives.isSafeMode + pw.println("SafeMode: $safeMode") + val lkmMode = Natives.isLkmMode + pw.println("LKM: $lkmMode") + } + + // modules + val modulesFile = File(bugreportDir, "modules.json") + modulesFile.writeText(listModules()) + + val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd_HH_mm") + val current = LocalDateTime.now().format(formatter) + + val targetFile = File(context.cacheDir, "KernelSU_bugreport_${current}.tar.gz") + + shell.newJob().add("tar czf ${targetFile.absolutePath} -C ${bugreportDir.absolutePath} .").exec() + shell.newJob().add("rm -rf ${bugreportDir.absolutePath}").exec() + shell.newJob().add("chmod 0644 ${targetFile.absolutePath}").exec() + + return targetFile +} + diff --git a/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/util/SELinuxChecker.kt b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/util/SELinuxChecker.kt new file mode 100644 index 000000000000..78346dd9412c --- /dev/null +++ b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/util/SELinuxChecker.kt @@ -0,0 +1,34 @@ +package me.weishu.kernelsu.ui.util + +import androidx.compose.ui.res.stringResource +import androidx.compose.runtime.Composable +import com.topjohnwu.superuser.Shell +import me.weishu.kernelsu.R + +@Composable +fun getSELinuxStatus(): String { + val shell = Shell.Builder.create() + .setFlags(Shell.FLAG_REDIRECT_STDERR) + .build("sh") + + val list = ArrayList() + val result = shell.use { + it.newJob().add("getenforce").to(list, list).exec() + } + val output = result.out.joinToString("\n").trim() + + if (result.isSuccess) { + return when (output) { + "Enforcing" -> stringResource(R.string.selinux_status_enforcing) + "Permissive" -> stringResource(R.string.selinux_status_permissive) + "Disabled" -> stringResource(R.string.selinux_status_disabled) + else -> stringResource(R.string.selinux_status_unknown) + } + } + + return if (output.endsWith("Permission denied")) { + stringResource(R.string.selinux_status_enforcing) + } else { + stringResource(R.string.selinux_status_unknown) + } +} diff --git a/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/util/module/LatestVersionInfo.kt b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/util/module/LatestVersionInfo.kt new file mode 100644 index 000000000000..374b3853ab1a --- /dev/null +++ b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/util/module/LatestVersionInfo.kt @@ -0,0 +1,7 @@ +package me.weishu.kernelsu.ui.util.module + +data class LatestVersionInfo( + val versionCode : Int = 0, + val downloadUrl : String = "", + val changelog : String = "" +) diff --git a/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/viewmodel/ModuleViewModel.kt b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/viewmodel/ModuleViewModel.kt new file mode 100644 index 000000000000..013453fbfeed --- /dev/null +++ b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/viewmodel/ModuleViewModel.kt @@ -0,0 +1,161 @@ +package me.weishu.kernelsu.ui.viewmodel + +import android.os.SystemClock +import android.util.Log +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.setValue +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import me.weishu.kernelsu.ui.util.listModules +import me.weishu.kernelsu.ui.util.overlayFsAvailable +import org.json.JSONArray +import org.json.JSONObject +import java.text.Collator +import java.util.Locale + +class ModuleViewModel : ViewModel() { + + companion object { + private const val TAG = "ModuleViewModel" + private var modules by mutableStateOf>(emptyList()) + } + + class ModuleInfo( + val id: String, + val name: String, + val author: String, + val version: String, + val versionCode: Int, + val description: String, + val enabled: Boolean, + val update: Boolean, + val remove: Boolean, + val updateJson: String, + val hasWebUi: Boolean, + ) + + data class ModuleUpdateInfo( + val version: String, + val versionCode: Int, + val zipUrl: String, + val changelog: String, + ) + + var isRefreshing by mutableStateOf(false) + private set + + var isOverlayAvailable by mutableStateOf(overlayFsAvailable()) + private set + + val moduleList by derivedStateOf { + val comparator = compareBy(Collator.getInstance(Locale.getDefault()), ModuleInfo::id) + modules.sortedWith(comparator).also { + isRefreshing = false + } + } + + var isNeedRefresh by mutableStateOf(false) + private set + + fun markNeedRefresh() { + isNeedRefresh = true + } + + fun fetchModuleList() { + viewModelScope.launch(Dispatchers.IO) { + isRefreshing = true + + val oldModuleList = modules + + val start = SystemClock.elapsedRealtime() + + kotlin.runCatching { + isOverlayAvailable = overlayFsAvailable() + + val result = listModules() + + Log.i(TAG, "result: $result") + + val array = JSONArray(result) + modules = (0 until array.length()) + .asSequence() + .map { array.getJSONObject(it) } + .map { obj -> + ModuleInfo( + obj.getString("id"), + + obj.optString("name"), + obj.optString("author", "Unknown"), + obj.optString("version", "Unknown"), + obj.optInt("versionCode", 0), + obj.optString("description"), + obj.getBoolean("enabled"), + obj.getBoolean("update"), + obj.getBoolean("remove"), + obj.optString("updateJson"), + obj.optBoolean("web") + ) + }.toList() + isNeedRefresh = false + }.onFailure { e -> + Log.e(TAG, "fetchModuleList: ", e) + isRefreshing = false + } + + // when both old and new is kotlin.collections.EmptyList + // moduleList update will don't trigger + if (oldModuleList === modules) { + isRefreshing = false + } + + Log.i(TAG, "load cost: ${SystemClock.elapsedRealtime() - start}, modules: $modules") + } + } + + fun checkUpdate(m: ModuleInfo): Triple { + val empty = Triple("", "", "") + if (m.updateJson.isEmpty() || m.remove || m.update || !m.enabled) { + return empty + } + // download updateJson + val result = kotlin.runCatching { + val url = m.updateJson + Log.i(TAG, "checkUpdate url: $url") + val response = okhttp3.OkHttpClient() + .newCall( + okhttp3.Request.Builder() + .url(url) + .build() + ).execute() + Log.d(TAG, "checkUpdate code: ${response.code}") + if (response.isSuccessful) { + response.body?.string() ?: "" + } else { + "" + } + }.getOrDefault("") + Log.i(TAG, "checkUpdate result: $result") + + if (result.isEmpty()) { + return empty + } + + val updateJson = kotlin.runCatching { + JSONObject(result) + }.getOrNull() ?: return empty + + val version = updateJson.optString("version", "") + val versionCode = updateJson.optInt("versionCode", 0) + val zipUrl = updateJson.optString("zipUrl", "") + val changelog = updateJson.optString("changelog", "") + if (versionCode <= m.versionCode || zipUrl.isEmpty()) { + return empty + } + + return Triple(zipUrl, version, changelog) + } +} diff --git a/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/viewmodel/SuperUserViewModel.kt b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/viewmodel/SuperUserViewModel.kt new file mode 100644 index 000000000000..37e05aa82aff --- /dev/null +++ b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/viewmodel/SuperUserViewModel.kt @@ -0,0 +1,160 @@ +package me.weishu.kernelsu.ui.viewmodel + +import android.content.ComponentName +import android.content.Intent +import android.content.ServiceConnection +import android.content.pm.ApplicationInfo +import android.content.pm.PackageInfo +import android.os.IBinder +import android.os.Parcelable +import android.os.SystemClock +import android.util.Log +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.setValue +import androidx.lifecycle.ViewModel +import com.topjohnwu.superuser.Shell +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext +import kotlinx.parcelize.Parcelize +import me.weishu.kernelsu.IKsuInterface +import me.weishu.kernelsu.Natives +import me.weishu.kernelsu.ksuApp +import me.weishu.kernelsu.ui.KsuService +import me.weishu.kernelsu.ui.util.HanziToPinyin +import me.weishu.kernelsu.ui.util.KsuCli +import java.text.Collator +import java.util.* +import kotlin.coroutines.resume +import kotlin.coroutines.suspendCoroutine + +class SuperUserViewModel : ViewModel() { + + companion object { + private const val TAG = "SuperUserViewModel" + private var apps by mutableStateOf>(emptyList()) + } + + @Parcelize + data class AppInfo( + val label: String, + val packageInfo: PackageInfo, + val profile: Natives.Profile?, + ) : Parcelable { + val packageName: String + get() = packageInfo.packageName + val uid: Int + get() = packageInfo.applicationInfo.uid + + val allowSu: Boolean + get() = profile != null && profile.allowSu + val hasCustomProfile: Boolean + get() { + if (profile == null) { + return false + } + + return if (profile.allowSu) { + !profile.rootUseDefault + } else { + !profile.nonRootUseDefault + } + } + } + + var search by mutableStateOf("") + var showSystemApps by mutableStateOf(false) + var isRefreshing by mutableStateOf(false) + private set + + private val sortedList by derivedStateOf { + val comparator = compareBy { + when { + it.allowSu -> 0 + it.hasCustomProfile -> 1 + else -> 2 + } + }.then(compareBy(Collator.getInstance(Locale.getDefault()), AppInfo::label)) + apps.sortedWith(comparator).also { + isRefreshing = false + } + } + + val appList by derivedStateOf { + sortedList.filter { + it.label.contains(search, true) || it.packageName.contains( + search, + true + ) || HanziToPinyin.getInstance() + .toPinyinString(it.label).contains(search, true) + }.filter { + it.uid == 2000 // Always show shell + || showSystemApps || it.packageInfo.applicationInfo.flags.and(ApplicationInfo.FLAG_SYSTEM) == 0 + } + } + + private suspend inline fun connectKsuService( + crossinline onDisconnect: () -> Unit = {} + ): Pair = suspendCoroutine { + val connection = object : ServiceConnection { + override fun onServiceDisconnected(name: ComponentName?) { + onDisconnect() + } + + override fun onServiceConnected(name: ComponentName?, binder: IBinder?) { + it.resume(binder as IBinder to this) + } + } + + val intent = Intent(ksuApp, KsuService::class.java) + + val task = KsuService.bindOrTask( + intent, + Shell.EXECUTOR, + connection, + ) + val shell = KsuCli.SHELL + task?.let { it1 -> shell.execTask(it1) } + } + + private fun stopKsuService() { + val intent = Intent(ksuApp, KsuService::class.java) + KsuService.stop(intent) + } + + suspend fun fetchAppList() { + + isRefreshing = true + + val result = connectKsuService { + Log.w(TAG, "KsuService disconnected") + } + + withContext(Dispatchers.IO) { + val pm = ksuApp.packageManager + val start = SystemClock.elapsedRealtime() + + val binder = result.first + val allPackages = IKsuInterface.Stub.asInterface(binder).getPackages(0) + + withContext(Dispatchers.Main) { + stopKsuService() + } + + val packages = allPackages.list + + apps = packages.map { + val appInfo = it.applicationInfo + val uid = appInfo.uid + val profile = Natives.getAppProfile(it.packageName, uid) + AppInfo( + label = appInfo.loadLabel(pm).toString(), + packageInfo = it, + profile = profile, + ) + }.filter { it.packageName != ksuApp.packageName } + Log.i(TAG, "load cost: ${SystemClock.elapsedRealtime() - start}") + } + } +} diff --git a/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/viewmodel/TemplateViewModel.kt b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/viewmodel/TemplateViewModel.kt new file mode 100644 index 000000000000..cbed82f21c05 --- /dev/null +++ b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/viewmodel/TemplateViewModel.kt @@ -0,0 +1,328 @@ +package me.weishu.kernelsu.ui.viewmodel + +import android.os.Parcelable +import android.util.Log +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.setValue +import androidx.lifecycle.ViewModel +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext +import kotlinx.parcelize.Parcelize +import me.weishu.kernelsu.Natives +import me.weishu.kernelsu.profile.Capabilities +import me.weishu.kernelsu.profile.Groups +import me.weishu.kernelsu.ui.util.getAppProfileTemplate +import me.weishu.kernelsu.ui.util.listAppProfileTemplates +import me.weishu.kernelsu.ui.util.setAppProfileTemplate +import okhttp3.OkHttpClient +import okhttp3.Request +import org.json.JSONArray +import org.json.JSONObject +import java.text.Collator +import java.util.Locale +import java.util.concurrent.TimeUnit + + +/** + * @author weishu + * @date 2023/10/20. + */ +const val TEMPLATE_INDEX_URL = "https://kernelsu.org/templates/index.json" +const val TEMPLATE_URL = "https://kernelsu.org/templates/%s" + +const val TAG = "TemplateViewModel" + +class TemplateViewModel : ViewModel() { + companion object { + + private var templates by mutableStateOf>(emptyList()) + } + + @Parcelize + data class TemplateInfo( + val id: String = "", + val name: String = "", + val description: String = "", + val author: String = "", + val local: Boolean = true, + + val namespace: Int = Natives.Profile.Namespace.INHERITED.ordinal, + val uid: Int = Natives.ROOT_UID, + val gid: Int = Natives.ROOT_GID, + val groups: List = mutableListOf(), + val capabilities: List = mutableListOf(), + val context: String = Natives.KERNEL_SU_DOMAIN, + val rules: List = mutableListOf(), + ) : Parcelable + + var isRefreshing by mutableStateOf(false) + private set + + val templateList by derivedStateOf { + val comparator = compareBy(TemplateInfo::local).reversed().then( + compareBy( + Collator.getInstance(Locale.getDefault()), TemplateInfo::id + ) + ) + templates.sortedWith(comparator).apply { + isRefreshing = false + } + } + + suspend fun fetchTemplates(sync: Boolean = false) { + isRefreshing = true + withContext(Dispatchers.IO) { + val localTemplateIds = listAppProfileTemplates() + Log.i(TAG, "localTemplateIds: $localTemplateIds") + if (localTemplateIds.isEmpty() || sync) { + // if no templates, fetch remote templates + fetchRemoteTemplates() + } + + // fetch templates again + templates = listAppProfileTemplates().mapNotNull(::getTemplateInfoById) + + isRefreshing = false + } + } + + suspend fun importTemplates( + templates: String, + onSuccess: suspend () -> Unit, + onFailure: suspend (String) -> Unit + ) { + withContext(Dispatchers.IO) { + runCatching { + JSONArray(templates) + }.getOrElse { + runCatching { + val json = JSONObject(templates) + JSONArray().apply { put(json) } + }.getOrElse { + onFailure("invalid templates: $templates") + return@withContext + } + }.let { + 0.until(it.length()).forEach { i -> + runCatching { + val template = it.getJSONObject(i) + val id = template.getString("id") + template.put("local", true) + setAppProfileTemplate(id, template.toString()) + }.onFailure { e -> + Log.e(TAG, "ignore invalid template: $it", e) + } + } + onSuccess() + } + } + } + + suspend fun exportTemplates(onTemplateEmpty: () -> Unit, callback: (String) -> Unit) { + withContext(Dispatchers.IO) { + val templates = listAppProfileTemplates().mapNotNull(::getTemplateInfoById).filter { + it.local + } + templates.ifEmpty { + onTemplateEmpty() + return@withContext + } + JSONArray(templates.map { + it.toJSON() + }).toString().let(callback) + } + } +} + +private fun fetchRemoteTemplates() { + runCatching { + val client: OkHttpClient = OkHttpClient.Builder() + .connectTimeout(5, TimeUnit.SECONDS) + .writeTimeout(5, TimeUnit.SECONDS) + .readTimeout(10, TimeUnit.SECONDS) + .build() + + client.newCall( + Request.Builder().url(TEMPLATE_INDEX_URL).build() + ).execute().use { response -> + if (!response.isSuccessful) { + return + } + val remoteTemplateIds = JSONArray(response.body!!.string()) + Log.i(TAG, "fetchRemoteTemplates: $remoteTemplateIds") + 0.until(remoteTemplateIds.length()).forEach { i -> + val id = remoteTemplateIds.getString(i) + Log.i(TAG, "fetch template: $id") + val templateJson = client.newCall( + Request.Builder().url(TEMPLATE_URL.format(id)).build() + ).runCatching { + execute().use { response -> + if (!response.isSuccessful) { + return@forEach + } + response.body!!.string() + } + }.getOrNull() ?: return@forEach + Log.i(TAG, "template: $templateJson") + + // validate remote template + runCatching { + val json = JSONObject(templateJson) + fromJSON(json)?.let { + // force local template + json.put("local", false) + setAppProfileTemplate(id, json.toString()) + } + }.onFailure { + Log.e(TAG, "ignore invalid template: $it", it) + return@forEach + } + } + } + }.onFailure { Log.e(TAG, "fetchRemoteTemplates: $it", it) } +} + +@Suppress("UNCHECKED_CAST") +private fun JSONArray.mapCatching( + transform: (T) -> R, onFail: (Throwable) -> Unit +): List { + return List(length()) { i -> get(i) as T }.mapNotNull { element -> + runCatching { + transform(element) + }.onFailure(onFail).getOrNull() + } +} + +private inline fun > getEnumOrdinals( + jsonArray: JSONArray?, enumClass: Class +): List { + return jsonArray?.mapCatching({ name -> + enumValueOf(name.uppercase()) + }, { + Log.e(TAG, "ignore invalid enum ${enumClass.simpleName}: $it", it) + }).orEmpty() +} + +fun getTemplateInfoById(id: String): TemplateViewModel.TemplateInfo? { + return runCatching { + fromJSON(JSONObject(getAppProfileTemplate(id))) + }.onFailure { + Log.e(TAG, "ignore invalid template: $it", it) + }.getOrNull() +} + +private fun getLocaleString(json: JSONObject, key: String): String { + val fallback = json.getString(key) + val locale = Locale.getDefault() + val localeKey = "${locale.language}_${locale.country}" + json.optJSONObject("locales")?.let { + // check locale first + it.optJSONObject(localeKey)?.let { json-> + return json.optString(key, fallback) + } + // fallback to language + it.optJSONObject(locale.language)?.let { json-> + return json.optString(key, fallback) + } + } + return fallback +} + +private fun fromJSON(templateJson: JSONObject): TemplateViewModel.TemplateInfo? { + return runCatching { + val groupsJsonArray = templateJson.optJSONArray("groups") + val capabilitiesJsonArray = templateJson.optJSONArray("capabilities") + val context = templateJson.optString("context").takeIf { it.isNotEmpty() } + ?: Natives.KERNEL_SU_DOMAIN + val namespace = templateJson.optString("namespace").takeIf { it.isNotEmpty() } + ?: Natives.Profile.Namespace.INHERITED.name + + val rulesJsonArray = templateJson.optJSONArray("rules") + val templateInfo = TemplateViewModel.TemplateInfo( + id = templateJson.getString("id"), + name = getLocaleString(templateJson, "name"), + description = getLocaleString(templateJson, "description"), + author = templateJson.optString("author"), + local = templateJson.optBoolean("local"), + namespace = Natives.Profile.Namespace.valueOf( + namespace.uppercase() + ).ordinal, + uid = templateJson.optInt("uid", Natives.ROOT_UID), + gid = templateJson.optInt("gid", Natives.ROOT_GID), + groups = getEnumOrdinals(groupsJsonArray, Groups::class.java).map { it.gid }, + capabilities = getEnumOrdinals( + capabilitiesJsonArray, Capabilities::class.java + ).map { it.cap }, + context = context, + rules = rulesJsonArray?.mapCatching({ it }, { + Log.e(TAG, "ignore invalid rule: $it", it) + }).orEmpty() + ) + templateInfo + }.onFailure { + Log.e(TAG, "ignore invalid template: $it", it) + }.getOrNull() +} + +fun TemplateViewModel.TemplateInfo.toJSON(): JSONObject { + val template = this + return JSONObject().apply { + + put("id", template.id) + put("name", template.name.ifBlank { template.id }) + put("description", template.description.ifBlank { template.id }) + if (template.author.isNotEmpty()) { + put("author", template.author) + } + put("namespace", Natives.Profile.Namespace.entries[template.namespace].name) + put("uid", template.uid) + put("gid", template.gid) + + if (template.groups.isNotEmpty()) { + put("groups", JSONArray( + Groups.entries.filter { + template.groups.contains(it.gid) + }.map { + it.name + } + )) + } + + if (template.capabilities.isNotEmpty()) { + put("capabilities", JSONArray( + Capabilities.entries.filter { + template.capabilities.contains(it.cap) + }.map { + it.name + } + )) + } + + if (template.context.isNotEmpty()) { + put("context", template.context) + } + + if (template.rules.isNotEmpty()) { + put("rules", JSONArray(template.rules)) + } + } +} + +@Suppress("unused") +fun generateTemplates() { + val templateJson = JSONObject() + templateJson.put("id", "com.example") + templateJson.put("name", "Example") + templateJson.put("description", "This is an example template") + templateJson.put("local", true) + templateJson.put("namespace", Natives.Profile.Namespace.INHERITED.name) + templateJson.put("uid", 0) + templateJson.put("gid", 0) + + templateJson.put("groups", JSONArray().apply { put(Groups.INET.name) }) + templateJson.put("capabilities", JSONArray().apply { put(Capabilities.CAP_NET_RAW.name) }) + templateJson.put("context", "u:r:su:s0") + Log.i(TAG, "$templateJson") +} \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/webui/MimeUtil.java b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/webui/MimeUtil.java new file mode 100644 index 000000000000..1fc2f4a4ceab --- /dev/null +++ b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/webui/MimeUtil.java @@ -0,0 +1,88 @@ +/* + * Copyright 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package me.weishu.kernelsu.ui.webui; + +import java.net.URLConnection; + +class MimeUtil { + + public static String getMimeFromFileName(String fileName) { + if (fileName == null) { + return null; + } + + // Copying the logic and mapping that Chromium follows. + // First we check against the OS (this is a limited list by default) + // but app developers can extend this. + // We then check against a list of hardcoded mime types above if the + // OS didn't provide a result. + String mimeType = URLConnection.guessContentTypeFromName(fileName); + + if (mimeType != null) { + return mimeType; + } + + return guessHardcodedMime(fileName); + } + + // We should keep this map in sync with the lists under + // //net/base/mime_util.cc in Chromium. + // A bunch of the mime types don't really apply to Android land + // like word docs so feel free to filter out where necessary. + private static String guessHardcodedMime(String fileName) { + int finalFullStop = fileName.lastIndexOf('.'); + if (finalFullStop == -1) { + return null; + } + + final String extension = fileName.substring(finalFullStop + 1).toLowerCase(); + + return switch (extension) { + case "webm" -> "video/webm"; + case "mpeg", "mpg" -> "video/mpeg"; + case "mp3" -> "audio/mpeg"; + case "wasm" -> "application/wasm"; + case "xhtml", "xht", "xhtm" -> "application/xhtml+xml"; + case "flac" -> "audio/flac"; + case "ogg", "oga", "opus" -> "audio/ogg"; + case "wav" -> "audio/wav"; + case "m4a" -> "audio/x-m4a"; + case "gif" -> "image/gif"; + case "jpeg", "jpg", "jfif", "pjpeg", "pjp" -> "image/jpeg"; + case "png" -> "image/png"; + case "apng" -> "image/apng"; + case "svg", "svgz" -> "image/svg+xml"; + case "webp" -> "image/webp"; + case "mht", "mhtml" -> "multipart/related"; + case "css" -> "text/css"; + case "html", "htm", "shtml", "shtm", "ehtml" -> "text/html"; + case "js", "mjs" -> "application/javascript"; + case "xml" -> "text/xml"; + case "mp4", "m4v" -> "video/mp4"; + case "ogv", "ogm" -> "video/ogg"; + case "ico" -> "image/x-icon"; + case "woff" -> "application/font-woff"; + case "gz", "tgz" -> "application/gzip"; + case "json" -> "application/json"; + case "pdf" -> "application/pdf"; + case "zip" -> "application/zip"; + case "bmp" -> "image/bmp"; + case "tiff", "tif" -> "image/tiff"; + default -> null; + }; + } +} diff --git a/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/webui/SuFilePathHandler.java b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/webui/SuFilePathHandler.java new file mode 100644 index 000000000000..ff450e8e9cfe --- /dev/null +++ b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/webui/SuFilePathHandler.java @@ -0,0 +1,191 @@ +package me.weishu.kernelsu.ui.webui; + +import android.content.Context; +import android.util.Log; +import android.webkit.WebResourceResponse; + +import androidx.annotation.NonNull; +import androidx.annotation.WorkerThread; +import androidx.webkit.WebViewAssetLoader; + +import com.topjohnwu.superuser.Shell; +import com.topjohnwu.superuser.io.SuFile; +import com.topjohnwu.superuser.io.SuFileInputStream; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.util.zip.GZIPInputStream; + +/** + * Handler class to open files from file system by root access + * For more information about android storage please refer to + * Android Developers + * Docs: Data and file storage overview. + *

+ * To avoid leaking user or app data to the web, make sure to choose {@code directory} + * carefully, and assume any file under this directory could be accessed by any web page subject + * to same-origin rules. + *

+ * A typical usage would be like: + *

+ * File publicDir = new File(context.getFilesDir(), "public");
+ * // Host "files/public/" in app's data directory under:
+ * // http://appassets.androidplatform.net/public/...
+ * WebViewAssetLoader assetLoader = new WebViewAssetLoader.Builder()
+ *          .addPathHandler("/public/", new InternalStoragePathHandler(context, publicDir))
+ *          .build();
+ * 
+ */ +public final class SuFilePathHandler implements WebViewAssetLoader.PathHandler { + private static final String TAG = "SuFilePathHandler"; + + /** + * Default value to be used as MIME type if guessing MIME type failed. + */ + public static final String DEFAULT_MIME_TYPE = "text/plain"; + + /** + * Forbidden subdirectories of {@link Context#getDataDir} that cannot be exposed by this + * handler. They are forbidden as they often contain sensitive information. + *

+ * Note: Any future addition to this list will be considered breaking changes to the API. + */ + private static final String[] FORBIDDEN_DATA_DIRS = + new String[] {"/data/data", "/data/system"}; + + @NonNull + private final File mDirectory; + + private final Shell mShell; + + /** + * Creates PathHandler for app's internal storage. + * The directory to be exposed must be inside either the application's internal data + * directory {@link Context#getDataDir} or cache directory {@link Context#getCacheDir}. + * External storage is not supported for security reasons, as other apps with + * {@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE} may be able to modify the + * files. + *

+ * Exposing the entire data or cache directory is not permitted, to avoid accidentally + * exposing sensitive application files to the web. Certain existing subdirectories of + * {@link Context#getDataDir} are also not permitted as they are often sensitive. + * These files are ({@code "app_webview/"}, {@code "databases/"}, {@code "lib/"}, + * {@code "shared_prefs/"} and {@code "code_cache/"}). + *

+ * The application should typically use a dedicated subdirectory for the files it intends to + * expose and keep them separate from other files. + * + * @param context {@link Context} that is used to access app's internal storage. + * @param directory the absolute path of the exposed app internal storage directory from + * which files can be loaded. + * @throws IllegalArgumentException if the directory is not allowed. + */ + public SuFilePathHandler(@NonNull Context context, @NonNull File directory, Shell rootShell) { + try { + mDirectory = new File(getCanonicalDirPath(directory)); + if (!isAllowedInternalStorageDir(context)) { + throw new IllegalArgumentException("The given directory \"" + directory + + "\" doesn't exist under an allowed app internal storage directory"); + } + mShell = rootShell; + } catch (IOException e) { + throw new IllegalArgumentException( + "Failed to resolve the canonical path for the given directory: " + + directory.getPath(), e); + } + } + + private boolean isAllowedInternalStorageDir(@NonNull Context context) throws IOException { + String dir = getCanonicalDirPath(mDirectory); + + for (String forbiddenPath : FORBIDDEN_DATA_DIRS) { + if (dir.startsWith(forbiddenPath)) { + return false; + } + } + return true; + } + + /** + * Opens the requested file from the exposed data directory. + *

+ * The matched prefix path used shouldn't be a prefix of a real web path. Thus, if the + * requested file cannot be found or is outside the mounted directory a + * {@link WebResourceResponse} object with a {@code null} {@link InputStream} will be + * returned instead of {@code null}. This saves the time of falling back to network and + * trying to resolve a path that doesn't exist. A {@link WebResourceResponse} with + * {@code null} {@link InputStream} will be received as an HTTP response with status code + * {@code 404} and no body. + *

+ * The MIME type for the file will be determined from the file's extension using + * {@link java.net.URLConnection#guessContentTypeFromName}. Developers should ensure that + * files are named using standard file extensions. If the file does not have a + * recognised extension, {@code "text/plain"} will be used by default. + * + * @param path the suffix path to be handled. + * @return {@link WebResourceResponse} for the requested file. + */ + @Override + @WorkerThread + @NonNull + public WebResourceResponse handle(@NonNull String path) { + try { + File file = getCanonicalFileIfChild(mDirectory, path); + if (file != null) { + InputStream is = openFile(file, mShell); + String mimeType = guessMimeType(path); + return new WebResourceResponse(mimeType, null, is); + } else { + Log.e(TAG, String.format( + "The requested file: %s is outside the mounted directory: %s", path, + mDirectory)); + } + } catch (IOException e) { + Log.e(TAG, "Error opening the requested path: " + path, e); + } + return new WebResourceResponse(null, null, null); + } + + public static String getCanonicalDirPath(@NonNull File file) throws IOException { + String canonicalPath = file.getCanonicalPath(); + if (!canonicalPath.endsWith("/")) canonicalPath += "/"; + return canonicalPath; + } + + public static File getCanonicalFileIfChild(@NonNull File parent, @NonNull String child) + throws IOException { + String parentCanonicalPath = getCanonicalDirPath(parent); + String childCanonicalPath = new File(parent, child).getCanonicalPath(); + if (childCanonicalPath.startsWith(parentCanonicalPath)) { + return new File(childCanonicalPath); + } + return null; + } + + @NonNull + private static InputStream handleSvgzStream(@NonNull String path, + @NonNull InputStream stream) throws IOException { + return path.endsWith(".svgz") ? new GZIPInputStream(stream) : stream; + } + + public static InputStream openFile(@NonNull File file, @NonNull Shell shell) throws IOException { + SuFile suFile = new SuFile(file.getAbsolutePath()); + suFile.setShell(shell); + InputStream fis = SuFileInputStream.open(suFile); + return handleSvgzStream(file.getPath(), fis); + } + + /** + * Use {@link MimeUtil#getMimeFromFileName} to guess MIME type or return the + * {@link #DEFAULT_MIME_TYPE} if it can't guess. + * + * @param filePath path of the file to guess its MIME type. + * @return MIME type guessed from file extension or {@link #DEFAULT_MIME_TYPE}. + */ + @NonNull + public static String guessMimeType(@NonNull String filePath) { + String mimeType = MimeUtil.getMimeFromFileName(filePath); + return mimeType == null ? DEFAULT_MIME_TYPE : mimeType; + } +} diff --git a/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/webui/WebUIActivity.kt b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/webui/WebUIActivity.kt new file mode 100644 index 000000000000..eccb002a1688 --- /dev/null +++ b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/webui/WebUIActivity.kt @@ -0,0 +1,68 @@ +package me.weishu.kernelsu.ui.webui + +import android.annotation.SuppressLint +import android.app.ActivityManager +import android.content.Context +import android.os.Bundle +import android.webkit.WebResourceRequest +import android.webkit.WebResourceResponse +import android.webkit.WebView +import android.webkit.WebViewClient +import androidx.activity.ComponentActivity +import androidx.webkit.WebViewAssetLoader +import com.topjohnwu.superuser.Shell +import me.weishu.kernelsu.ui.util.createRootShell +import java.io.File + +@SuppressLint("SetJavaScriptEnabled") +class WebUIActivity : ComponentActivity() { + private lateinit var webviewInterface: WebViewInterface + + private var rootShell: Shell? = null + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + val moduleId = intent.getStringExtra("id")!! + val name = intent.getStringExtra("name")!! + setTaskDescription(ActivityManager.TaskDescription("KernelSU - $name")) + + val prefs = getSharedPreferences("settings", Context.MODE_PRIVATE) + WebView.setWebContentsDebuggingEnabled(prefs.getBoolean("enable_web_debugging", false)) + + val webRoot = File("/data/adb/modules/${moduleId}/webroot") + val rootShell = createRootShell(true).also { this.rootShell = it } + val webViewAssetLoader = WebViewAssetLoader.Builder() + .setDomain("mui.kernelsu.org") + .addPathHandler( + "/", + SuFilePathHandler(this, webRoot, rootShell) + ) + .build() + + val webViewClient = object : WebViewClient() { + override fun shouldInterceptRequest( + view: WebView, + request: WebResourceRequest + ): WebResourceResponse? { + return webViewAssetLoader.shouldInterceptRequest(request.url) + } + } + + val webView = WebView(this).apply { + settings.javaScriptEnabled = true + settings.domStorageEnabled = true + settings.allowFileAccess = false + webviewInterface = WebViewInterface(this@WebUIActivity, this) + addJavascriptInterface(webviewInterface, "ksu") + setWebViewClient(webViewClient) + loadUrl("https://mui.kernelsu.org/index.html") + } + + setContentView(webView) + } + + override fun onDestroy() { + super.onDestroy() + runCatching { rootShell?.close() } + } +} \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/webui/WebViewInterface.kt b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/webui/WebViewInterface.kt new file mode 100644 index 000000000000..4b6a3c8f755d --- /dev/null +++ b/KernelSU/manager/app/src/main/java/me/weishu/kernelsu/ui/webui/WebViewInterface.kt @@ -0,0 +1,190 @@ +package me.weishu.kernelsu.ui.webui + +import android.app.Activity +import android.content.Context +import android.os.Handler +import android.os.Looper +import android.text.TextUtils +import android.view.Window +import android.webkit.JavascriptInterface +import android.webkit.WebView +import android.widget.Toast +import androidx.core.view.WindowCompat +import androidx.core.view.WindowInsetsCompat +import androidx.core.view.WindowInsetsControllerCompat +import com.topjohnwu.superuser.CallbackList +import com.topjohnwu.superuser.ShellUtils +import me.weishu.kernelsu.ui.util.createRootShell +import me.weishu.kernelsu.ui.util.withNewRootShell +import org.json.JSONArray +import org.json.JSONObject +import java.util.concurrent.CompletableFuture + +class WebViewInterface(val context: Context, private val webView: WebView) { + + @JavascriptInterface + fun exec(cmd: String): String { + return withNewRootShell(true) { ShellUtils.fastCmd(this, cmd) } + } + + @JavascriptInterface + fun exec(cmd: String, callbackFunc: String) { + exec(cmd, null, callbackFunc) + } + + private fun processOptions(sb: StringBuilder, options: String?) { + val opts = if (options == null) JSONObject() else { + JSONObject(options) + } + + val cwd = opts.optString("cwd") + if (!TextUtils.isEmpty(cwd)) { + sb.append("cd ${cwd};") + } + + opts.optJSONObject("env")?.let { env -> + env.keys().forEach { key -> + sb.append("export ${key}=${env.getString(key)};") + } + } + } + + @JavascriptInterface + fun exec( + cmd: String, + options: String?, + callbackFunc: String + ) { + val finalCommand = StringBuilder() + processOptions(finalCommand, options) + finalCommand.append(cmd) + + val result = withNewRootShell(true) { + newJob().add(finalCommand.toString()).to(ArrayList(), ArrayList()).exec() + } + val stdout = result.out.joinToString(separator = "\n") + val stderr = result.err.joinToString(separator = "\n") + + val jsCode = + "javascript: (function() { try { ${callbackFunc}(${result.code}, ${ + JSONObject.quote( + stdout + ) + }, ${JSONObject.quote(stderr)}); } catch(e) { console.error(e); } })();" + webView.post { + webView.loadUrl(jsCode) + } + } + + @JavascriptInterface + fun spawn(command: String, args: String, options: String?, callbackFunc: String) { + val finalCommand = StringBuilder() + + processOptions(finalCommand, options) + + if (!TextUtils.isEmpty(args)) { + finalCommand.append(command).append(" ") + JSONArray(args).let { argsArray -> + for (i in 0 until argsArray.length()) { + finalCommand.append(argsArray.getString(i)) + finalCommand.append(" ") + } + } + } else { + finalCommand.append(command) + } + + val shell = createRootShell(true) + + val emitData = fun(name: String, data: String) { + val jsCode = + "javascript: (function() { try { ${callbackFunc}.${name}.emit('data', ${ + JSONObject.quote( + data + ) + }); } catch(e) { console.error('emitData', e); } })();" + webView.post { + webView.loadUrl(jsCode) + } + } + + val stdout = object : CallbackList() { + override fun onAddElement(s: String) { + emitData("stdout", s) + } + } + + val stderr = object : CallbackList() { + override fun onAddElement(s: String) { + emitData("stderr", s) + } + } + + val future = shell.newJob().add(finalCommand.toString()).to(stdout, stderr).enqueue() + val completableFuture = CompletableFuture.supplyAsync { + future.get() + } + + completableFuture.thenAccept { result -> + val emitExitCode = + "javascript: (function() { try { ${callbackFunc}.emit('exit', ${result.code}); } catch(e) { console.error(`emitExit error: \${e}`); } })();" + webView.post { + webView.loadUrl(emitExitCode) + } + + if (result.code != 0) { + val emitErrCode = + "javascript: (function() { try { var err = new Error(); err.exitCode = ${result.code}; err.message = ${ + JSONObject.quote( + result.err.joinToString( + "\n" + ) + ) + };${callbackFunc}.emit('error', err); } catch(e) { console.error('emitErr', e); } })();" + webView.post { + webView.loadUrl(emitErrCode) + } + } + }.whenComplete { _, _ -> + runCatching { shell.close() } + } + } + + @JavascriptInterface + fun toast(msg: String) { + webView.post { + Toast.makeText(context, msg, Toast.LENGTH_SHORT).show() + } + } + + @JavascriptInterface + fun fullScreen(enable: Boolean) { + if (context is Activity) { + Handler(Looper.getMainLooper()).post { + if (enable) { + hideSystemUI(context.window) + } else { + showSystemUI(context.window) + } + } + } + } + +} + +fun hideSystemUI(window: Window) { + WindowCompat.setDecorFitsSystemWindows(window, false) + WindowInsetsControllerCompat(window, window.decorView).let { controller -> + controller.hide(WindowInsetsCompat.Type.systemBars()) + controller.systemBarsBehavior = + WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE + } +} + +fun showSystemUI(window: Window) { + WindowCompat.setDecorFitsSystemWindows(window, true) + WindowInsetsControllerCompat( + window, + window.decorView + ).show(WindowInsetsCompat.Type.systemBars()) +} \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/jniLibs/.gitignore b/KernelSU/manager/app/src/main/jniLibs/.gitignore new file mode 100644 index 000000000000..311f7299ba59 --- /dev/null +++ b/KernelSU/manager/app/src/main/jniLibs/.gitignore @@ -0,0 +1 @@ +libksud.so \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/drawable/ic_launcher_background.xml b/KernelSU/manager/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 000000000000..900e2d8c829e --- /dev/null +++ b/KernelSU/manager/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,15 @@ + + + + + + + \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/drawable/ic_launcher_foreground.xml b/KernelSU/manager/app/src/main/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 000000000000..c9ad0ad4ddfe --- /dev/null +++ b/KernelSU/manager/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,22 @@ + + + + + + + + + \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/drawable/ic_launcher_monochrome.xml b/KernelSU/manager/app/src/main/res/drawable/ic_launcher_monochrome.xml new file mode 100644 index 000000000000..e4dc522eeab8 --- /dev/null +++ b/KernelSU/manager/app/src/main/res/drawable/ic_launcher_monochrome.xml @@ -0,0 +1,22 @@ + + + + + + + + + \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/mipmap-anydpi/ic_launcher.xml b/KernelSU/manager/app/src/main/res/mipmap-anydpi/ic_launcher.xml new file mode 100644 index 000000000000..b070c763da32 --- /dev/null +++ b/KernelSU/manager/app/src/main/res/mipmap-anydpi/ic_launcher.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/mipmap-hdpi/ic_launcher.png b/KernelSU/manager/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..485b815dfee96d94ed68dfd551ae516e7a3cd37e GIT binary patch literal 235 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xZ3?!EyURMI7SkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP(n1oC&X1*LbRv7^~3x3 zj~+aj(%<|4|Nq#~;G5GQ{R1jsO!9VjVf~T+@;H#=;pyTS;&D7VK|-h@kdsv-IrNB7 z7gLj)Xs?!3sL3jh|k3?#4J%UA`ZSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP{K06C&X1*LR3jyL`HyD zgo9Opg%OCvxY*@{1>{8pBm8~;|NjqU2YI=JNKbc&Adu8nko$A)%u}Etj7i?^E?gNG zzJvieMV>B>Ar`0KUa{n3P~>n36cv{#e_wy2(5fxq=FA`7pG-vDmTtSmrgQSAf8_MqB+2G`2oo7$T0nLKD(87Bw`Lf4R)G_-dGbV6mj6#giAcK-(ESUHx3vIVCg!03?rI2mk;8 literal 0 HcmV?d00001 diff --git a/KernelSU/manager/app/src/main/res/mipmap-mdpi/ic_launcher.png b/KernelSU/manager/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..9df352536389ac8fefee468a079427364b9aef4f GIT binary patch literal 380 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sEa{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)pT}UnMXwSj}Ky5HFasE6@fg5gyQeY+4WMaiN6^uTbpJmZ0KR(5U5}_Vkzrv3Q~M< z#5hUq$hO6E!q2XJyX_C-oqKmxuD{lC->xq4jp5;fNS%G|oWRD45bDP46hOx7_4S6Fo+k-*%fF5lu!)t32{}H5LJ_rTrg+W z!nw0^Qj#>~r2qc?`~UxcAmh*P-#}S2zGyz6V#XwIcNccC#E#cMPOhhmV@Sl|zopr0L|E2r2qf` literal 0 HcmV?d00001 diff --git a/KernelSU/manager/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/KernelSU/manager/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..ba22bf82fd6be7e8a5d03336ac74d20b1081f81c GIT binary patch literal 304 zcmeAS@N?(olHy`uVBq!ia0vp^6F``S8Ays|{O<-*Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD4`hO6XL2YA*!t)d++X@ zhxhLvJ91b@QU1@LKmY&#*HM)F_46lC_H!VI3Q#d)lDE4HyI5k!Yapl5)5S3)Y|>0uCJDRM=^Jpn)x*fhFb9f=s8P#ESV1=38W=yS}VnrMK$5 z^L*Vb)f0S*=>2vw!L<^Q5-HYH~RgXMx&9*&f&T*14&`q@IoJ=^u+ia=^FNG~+} g!@~ literal 0 HcmV?d00001 diff --git a/KernelSU/manager/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/KernelSU/manager/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 0000000000000000000000000000000000000000..cddff920f64f874302f3ce534007042d7ca9908b GIT binary patch literal 342 zcmeAS@N?(olHy`uVBq!ia0vp^2SAvG8AvYpRA>UESkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP(m@lC&X1*LR3{s+}X<9 z#o9tcR!U!0>Cf-q|NsBjS5f-$YcCo~c*Fes4PZ!6Kid%2* zEaW|uAkg+u$%BLIFpCOLfQLi_Ym{S9?8RlXmTZ*>b1>H84v9H8@qeXw#hKb~tGt3b zbN!}ATvyp3J3Yc5Xb^TVh2@Q%^BOzOH~0G^a)l;bvu4v@|68rGxWM|dHs_tD*Yl;Z p>jR2TVY$h2%Q~loCICgdW7z-z literal 0 HcmV?d00001 diff --git a/KernelSU/manager/app/src/main/res/values-ar/strings.xml b/KernelSU/manager/app/src/main/res/values-ar/strings.xml new file mode 100644 index 000000000000..c38c4fc89464 --- /dev/null +++ b/KernelSU/manager/app/src/main/res/values-ar/strings.xml @@ -0,0 +1,134 @@ + + + الرئيسية + غير مثبت + إضغط للتثبيت + يعمل + الإصدار: %d + مستخدمين الجذر: %d + الإضافات: %d + غير مدعوم + KernelSU يدعم GKI kernels فقط + إصدار النواة + إصدار المدير + البصمة + وضع SELinux + معطل + مفروض + متساهل + مجهول + مستخدم خارق + فشل في تمكين الإضافة: %s + فشل تعطيل الإضافة : %s + لا توجد إضافات مثبتة + الإضافات + إلغاء التثبيت + تثبيت الوحدة + تثبيت + إعادة تشغيل + الإعدادات + إعادة تشغيل سريعة + إعادة تشغيل إلى وضع Recovery + إعادة تشغيل إلى وضع Bootloader + إعادة تشغيل إلى وضع Download + إعادة تشغيل إلى وضع EDL + من نحن + هل أنت متأكد أنك تريد إلغاء تثبيت الإضافة %s ? + تم إلغاء تثبيتها %s + فشل إلغاء التثبيت: %s + الإصدار + المطور + التراكبات غير متوفرة ، لا يمكن للإضافة أن تعمل! + إنعاش + إظهار تطبيقات النظام + إخفاء تطبيقات النظام + إرسال السجلات + الوضع الآمن + إعادة التشغيل لتطبيق التغييرات + تم تعطيل الإضافات لأنها تتعارض مع Magisk! + تعلم KernelSU + https://kernelsu.org/guide/what-is-kernelsu.html + تعرف على كيفية تثبيت KernelSU واستخدام الإضافات + إدعمنا + KernelSU سيظل دائماً مجانياً ومفتوح المصدر. مع ذلك، يمكنك أن تظهر لنا أنك تهتم بالتبرع. + إنضم إلى قناتنا في %2$s ]]> + القدرات + تحديث + تحميل الإضافة: %s + ابدأ التنزيل: %s + الإصدار الجديد: %s متاح ، انقر للتحديث + تشغيل + الإفتراضي + نموذج + موروث + عالمي + فردي + مجموعات + مُخصّص + تركيب مساحة الاسم + الغاء تحميل الإضافات + فشل تحديث ملف تعريف التطبيق لـ %s + سياق SELinux + ايقاف إجباري + الغاء تحميل الإضافات بشكل افتراضي + القيمة الافتراضية العامة لـ\"إلغاء تحميل الإضافات\" في ملفات تعريف التطبيقات. إذا تم تمكينه، إزالة جميع تعديلات الإضافات على النظام للتطبيقات التي لا تحتوي على مجموعة ملف تعريف. + سيسمح تمكين هذا الخيار لـKernelSU باستعادة أي ملفات معدلة بواسطة الإضافات لهذا التطبيق. + المجال + القواعد + إعادة تشغيل التطبيق + فشل تحديث قواعد SELinux لما يلي: %s + اسم الملف الشخصي + إصدار KernelSU الحالي %d منخفض جدًا بحيث لا يعمل المدير بشكل صحيح. الرجاء الترقية إلى الإصدار %d أو أعلى! + سجل التغييرات + تم الاستيراد بنجاح + تصدير إلى الحافظة + لا يمكن العثور على القالب المحلي للتصدير! + معرف القالب موجود بالفعل! + استيراد من الحافظة + فشل في جلب سجل التغيير: %s + الاسم + معرف القالب غير صالح + مزامنة القوالب عبر الإنترنت + إنشاء قالب + للقراءة فقط + استيراد / تصدير + فشل في حفظ القالب + تحرير القالب + المعرف + قالب ملف تعريف التطبيق + الوصف + حفظ + إدارة القالب المحلي وعبر الإنترنت لملف تعريف التطبيق + حذف + الحافظة فارغة! + عرض القالب + فشل في منح صلاحية الجذر! + فتح + التحقق تلقائيًا من وجود تحديثات عند فتح التطبيق + التحقق من التحديث + تمكين تصحيح أخطاء WebView + يمكن استخدامه لتصحيح أخطاء WebUI، يرجى تمكينه فقط عند الحاجة. + التالي + اختيار ملف + تثبيت مباشر (موصى به) + التثبيت على فتحة غير نشطة (بعد OTA) + سيتم **إجبار** جهازك على التمهيد إلى الفتحة غير النشطة الحالية بعد إعادة التشغيل! +\nاستخدم هذا الخيار فقط بعد انتهاء التحديث. +\nأستمرار؟ + اختر KMI + يوصى باستخدام صورة القسم %1$s + تصغير الصورة المتفرقة + قم بتغيير حجم الصورة المتفرقة حيث توجد الإضافة إلى حجمها الفعلي. لاحظ أن هذا قد يتسبب في عمل الإضافة بشكل غير طبيعي، لذا يرجى استخدامها فقط عند الضرورة (مثل النسخ الاحتياطي) + إلغاء التثبيت + إلغاء التثبيت مؤقتًا + إلغاء التثبيت بشكل دائم + استعادة الصورة الاصلية + ‬إلغاء تثبيت KernelSU (الجذر وجميع الوحدات) بشكل كامل ودائم. + تركيب + نجح التركيب + فشل التركيب + صورة lkm المحددة: %s + استعادة صورة المصنع المخزنة (في حالة وجود نسخة احتياطية)، والتي تُستخدم عادة قبل OTA؛ إذا كنت بحاجة إلى إلغاء تثبيت KernelSU، فيرجى استخدام \"إلغاء التثبيت الدائم\". + قم بإلغاء تثبيت KernelSU مؤقتًا، واستعد إلى حالته الأصلية بعد إعادة التشغيل التالية. + حفظ السجلات + \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/values-az/strings.xml b/KernelSU/manager/app/src/main/res/values-az/strings.xml new file mode 100644 index 000000000000..21ec189f55c4 --- /dev/null +++ b/KernelSU/manager/app/src/main/res/values-az/strings.xml @@ -0,0 +1,82 @@ + + + Ana səhifə + Super istifadəçilər: %d + Nüvə + Yüklənmədi + Yükləmək üçün toxunun + İşləyir + Versiya: %d + Modullar: %d + Hal-hazırda KernelSU yalnız GKI nüvələrini dəstəkləyir + Dəstəklənmir + Yüklə + Yüklə + Naməlum + Barmaq izi + Menecer versiyası + Qeyri-aktiv + SELinux vəziyyəti + Sərbəst + Məcburi + Super istifadəçi + Sil + Modulu aktiv etmək mümkün olmadı: %s + Modulu deaktiv etmək mümkün olmadı: %s + Heç bir modul quraşdırılmayıb + Modul + Yenidən başlat + Parametrlər + Bərpa rejimində yenidən başlat + Yüngül vəziyyətdə yenodən başlat + Bootloader rejimində yenidən başlat + Yükləmə rejimində yenidən başlat + Versiya + Sahib + Modulu silmək istədiyinizdən əminsiniz %s\? + Sistem proqramlarını göstər + Haqqında + EDL rejimində yenidən başlat + Silmək mümkün olmadı: %s + %s silindi + Sistem proqramlarını gizlət + overlayfs mövcud deyil,modul işləyə bilməyəcək! + Log-u göndər + Yenilə + Təhlükəsiz rejimi + Qüvvəyə minməsi üçün yenidən başlat + Modular deaktiv edilir,çünki o Magisk-in modulları ilə toqquşur! + KernelSU-yu öyrən + https://kernelsu.org/guide/what-is-kernelsu.html + Bizi dəstəkləyin + KernelSU-yu necə quraşdırılacağını və modulların necə istifadə ediləcəyini öyrən + Şablon + Defolt + Özəl + KernelSU pulsuz və açıq mənbəlidir,həmişə belə olacaqdır. Bununla belə, ianə etməklə bizə qayğı göstərdiyinizi göstərə bilərsiniz. + Mənbə kodlarımıza baxın %1$s
Kanalımıza %2$s qoşulun
+ Profil adı + Bacarıqlar + Modulları umount et + Miras qalmış + Qlobal + Bölmənin ad sahəsi + Fərdi + Qruplar + Defolt olaraq modulları umount et + SELinux konteksi + %s görə tətbiq profillərini güncəlləmək mümkün olmadı + Tətbiq Profillərində \"Umount modulları\" üçün qlobal standart dəyər. Aktivləşdirilərsə, o, Profil dəsti olmayan proqramlar üçün sistemdəki bütün modul dəyişikliklərini siləcək. + Domen + Qaydalar + Güncəllə + Endirməni başlat: %s + Yeni versiya: %s əlçatandır, endirmək üçün toxunun + Modul yüklənir: %s + Bu seçimi aktivləşdirmək KernelSU-ya bu proqram üçün modullar tərəfindən hər hansı dəyişdirilmiş faylları bərpa etməyə imkan verəcək. + Aç + Məcburi dayandır + Yenidən başlat + %s görə SELinux qaydalarını güncəlləmək mümkün olmadı + Girişləri Saxla +
\ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/values-bn-rBD/strings.xml b/KernelSU/manager/app/src/main/res/values-bn-rBD/strings.xml new file mode 100644 index 000000000000..078d88fee7ca --- /dev/null +++ b/KernelSU/manager/app/src/main/res/values-bn-rBD/strings.xml @@ -0,0 +1,52 @@ + + + কর্নেল এস ইউ কেবল মাত্র জিকআই কর্নেল সাপোর্ট করে + এসইলিনাক্স স্টেটাস + আননোন + মোডিউল ইনেবল করা যায়নি: %s + ইন্সটল করটে চাপুন + কাজ করছে + মোডিউল: %d + অমূলক + কর্নেল + ম্যানেজার ভারসন + ফিঙ্গারপ্রিন্ট + ডিসেবল + এনফোর্সিং + সুপার ইউজার + মোডিউল + আনইন্সটল + ইন্সটল + ইন্সটল + রিবুট + সেটিংস + সফট রিবুট + গ্লোবাল + গ্রুপস + এসইলিনাক্স কন্টেক্সট + %s এর জন্য অ্যাপ প্রফাইল আপডেট করা যায়নি + বাইডিফল্ট মোডিউল আনমাউন্ট + হোম + ইন্সটল হয়নী + পারমিসিভ + মোডিউল ডিসেবল করা যায়নি: %s + কোনো মোডিউল ইন্সটল করা নেই + সংস্করণ: %d + সুপার ইউজার: %d + নেইম স্পেস মাউন্ট + ইনহেরিটেড + ইন্ডিভিজুয়াল + ক্যাপাবিলিটিস + আনমাউন্ট মোডিউলস + রিকভারিতে বুট + বুটলোডারে বুট + ডাউনলোড মডে বুট + ইমারজেন্সি ডাউনলোড মডে বুট + অ্যাবাউট + %s মোডিউল আনইনস্টলের বেপারে নিশ্চিৎ\? + %s আনইনস্টলড + %s আনইনস্টল করা যায়নি + ভার্সন + অথার + লগ সংরক্ষণ করুন + \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/values-bn/strings.xml b/KernelSU/manager/app/src/main/res/values-bn/strings.xml new file mode 100644 index 000000000000..312672c8715a --- /dev/null +++ b/KernelSU/manager/app/src/main/res/values-bn/strings.xml @@ -0,0 +1,68 @@ + + + হোম + ইনস্টল করা হয়নি + ইনস্টল করার জন্য ক্লিক করুন + ওয়ার্কিং + ওয়ার্কিং সংস্করণ: %d + সুপার ইউজার: %d + মডিউল: %d + অসমর্থিত + KernelSU শুধুমাত্র GKI কার্নেল সমর্থন করে + কার্নেল + ম্যানেজার সংস্করণ + ফিঙ্গারপ্রিন্ট + SELinux স্টেটাস + ডিজেবল + কার্যকর + অনুমতিমূলক + অজানা + সুপার ইউজার + মডিউল সক্ষম করতে ব্যর্থ হয়েছে: %s + মডিউল নিষ্ক্রিয় করতে ব্যর্থ হয়েছে: %s + কোন মডিউল ইনস্টল করা নেই + মডিউল + আনইন্সটল + মডিউল ইনস্টল + ইনস্টল + রিবুট + সেটিংস + সফট রিবুট + রিবুট রিকোভারি + রিবুট বুটলোডার + রিবুট ডাউনলোড + রিবুট ইডিএল + এবাউট + মডিউল আনইনস্টল নিশ্চিত করুন %s? + %s আনইনস্টল সফল + আনইন্সটল ব্যর্থ: %s + ভার্সন + লেখক + ওভারলেএফএস উপলব্ধ নয়, মডিউল কাজ করতে পারে না! + রিফ্রেশ + শো সিস্টেম অ্যাপস + হাইড সিস্টেম অ্যাপস + সেন্ড লগ + সেইফ মোড + রিবুট এপ্লাই + মডিউলগুলি অক্ষম কারণ তারা ম্যাজিস্কের সাথে বিরোধিতা করে! + লার্ন কার্নেলএসইউ + https://kernelsu.org/guide/what-is-kernelsu.html + কিভাবে কার্নেলএসইউ ইনস্টল করতে হয় এবং মডিউল ব্যবহার করতে হয় তা শিখুন + সাপোর্ট টাইটেল + কার্নেলএসইউ বিনামূল্যে এবং ওপেন সোর্স, এবং সবসময় থাকবে। আপনি সবসময় একটি অনুদান দিয়ে আপনার কৃতজ্ঞতা প্রদর্শন করতে পারেন. + আমাদের %2$s চ্যানেল মার্জ করুন]]> + প্রফাইলের নাম + নেমস্পেস মাউন্ট + গ্রুপস + যোগ্যতা + এসই লিনাক্স কনটেক্সট + ডিফল্ট + টেমপ্লেট + কাস্টম + গ্লোবাল + আলাদাভাবে + আনমাউন্ট মোডিউল + ম্যানেজার সঠিকভাবে কাজ করার জন্য বর্তমান KernelSU সংস্করণ %d খুবই কম। অনুগ্রহ করে %d বা উচ্চতর সংস্করণে আপগ্রেড করুন! + লগ সংরক্ষণ করুন + \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/values-bs/strings.xml b/KernelSU/manager/app/src/main/res/values-bs/strings.xml new file mode 100644 index 000000000000..da07863193fe --- /dev/null +++ b/KernelSU/manager/app/src/main/res/values-bs/strings.xml @@ -0,0 +1,83 @@ + + + Imenski prostor nosača + Naslijeđen + Globalan + Pojedinačan + Grupe + Sposobnosti + SELinux kontekst + Umount module + Ažuriranje Profila Aplikacije za %s nije uspjelo + Trenutna KernelSU verzija %d je preniska da bi upravitelj ispravno radio. Molimo vas da nadogradite na verziju %d ili noviju! + Umount module po zadanom + Globalna zadana vrijednost za \"Umount module\" u Profilima Aplikacije. Ako je omogućeno, uklonit će sve izmjene modula na sistemu za aplikacije koje nemaju postavljen Profil. + Uključivanjem ove opcije omogućit će KernelSU-u da vrati sve izmjenute datoteke od strane modula za ovu aplikaciju. + Ažuriranje + Skidanje module: %s + Započnite sa skidanjem: %s + Nova verzija: %s je dostupna, kliknite da skinete + Pokrenite + Prisilno Zaustavite + Resetujte + U Provođenju + Početna + Nije instalirano + Kliknite da instalirate + Superkorisnici: %d + Module: %d + Nepodržano + KernelSU samo podržava GKI kernele sad + Verzija Upravitelja + Otisak prsta + SELinux stanje + Instalirajte + Instalirajte + Ponovo pokrenite + Podešavanja + Verzija + Autor + Osvježi + Prikažite sistemske aplikacije + Sakrijte sistemske aplikacije + Sigurnosni mod + Ponovo pokrenite da bi proradilo + Module su isključene jer je u sukobu sa Magisk-om! + https://kernelsu.org/guide/what-is-kernelsu.html + Naučite kako da instalirate KernelSU i da koristite module + Podržite Nas + Pošaljite Izvještaj + Naučite KernelSU + Pogledajte izvornu kodu na %1$s
Pridružite nam se na %2$s kanalu
+ Domena + Pravila + Neuspješno ažuriranje SELinux pravila za: %s + Radi + Verzija: %d + Kernel + Permisivno + Deinstalirajte + Nepoznato + Nema instaliranih modula + Superkorisnik + Modula + Ponovo pokrenite u Pogonski Učitavatelj + Ponovo pokrenite u Oporavu + %s deinstalirana + Lagano Ponovo pokretanje + Neuspješno uključivanje module: %s + Ponovo pokrenite u Preuzimanje + Neuspješno isključivanje module: %s + Ponovo pokrenite u EDL + Neuspješna deinstalacija: %s + Isključeno + O + Jeste li sigurni da želite deinstalirati modulu %s\? + overlayfs nije dostupan, modula ne može raditi! + KernelSU je, i uvijek če biti, besplatan, i otvorenog izvora. Možete nam međutim pokazati da vas je briga s time da napravite donaciju. + Zadano + Šablon + Prilagođeno + Naziv profila + Sačuvaj Dnevnike +
\ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/values-da/strings.xml b/KernelSU/manager/app/src/main/res/values-da/strings.xml new file mode 100644 index 000000000000..6ab022567f4c --- /dev/null +++ b/KernelSU/manager/app/src/main/res/values-da/strings.xml @@ -0,0 +1,83 @@ + + + Arbejder + Moduler: %d + Ikke understøttet + Kernel + KernelSU understøtter kun GKI kernels + Manager Version + SELinux-status + Deaktiveret + Tilladende + Superbruger + Håndhævende + Deaktivering af modul fejlede: %s + Intet modul installeret + Afinstaller + Installer + Installer + Genstart + Indstillinger + Blød Genstart + Genstart til Download + Genstart til EDL + Om + Er du sikker på, at du vil afinstallere modulet %s\? + %s afinstalleret + Afinstallation af: %s fejlede + overlayfs er ikke tilgængeligt, modulet kan ikke fungere! + Opdater + Send Log + Sikker tilstand + Genstart for at tage effekt + Lær KernelSU + https://kernelsu.org/guide/what-is-kernelsu.html + Lær hvordan man installerer KernelSU og moduler + Se source koden ved %1$s
Deltage i vores %2$s kanal
+ Standard + Skabelon + Monter navnerum + Arvet + Global + Grupper + Evner + SELinux-kontext + Afmonteret moduler + Afmontere moduler som standard + Aktivering af denne indstilling vil tillade KernelSU at gendanne hvilken som helst modificeret filer af modulet for denne applikation. + Opdatering + Downloader modulet: %s + Ny version: %s er tilgængelig, kilk for at downloade + Start + Tving Stop + Opdatering af SELinux-regler for: %s fejlede + Start download: %s + Klik for at installere + Version: %d + Hjem + Ikke installeret + Superbrugere: %d + Fingeraftryk + Ukendt + Aktivering af modul fejlede: %s + Genstart til Recovery + Modul + Forfatter + Genstart til Bootloader + Version + Gem system-apps + Vis system-apps + Moduler er deaktiveret, fordi der er konflikt med Magiskes! + Støt Os + KernelSU er, og vil altid være gratis og open source. Du kan stadig vise os din støtte ved at donere. + Brugerdefineret + Profilnavn + Individuel + Opdatering af App Profil for %s fejlede + Den globale standard værdi for \"Afmonter moduler\" i App Profiler. Hvis aktiveret vil den fjerne alle modulers modifikationer til system applikationerne der ikke har en sat Profil. + Domæne + Regler + Genstart + Den nuværende KernelSU version %d er for lav til manageren for at fungere ordentligt. Opgrader til version %d eller højere! + Gem Logfiler +
\ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/values-de/strings.xml b/KernelSU/manager/app/src/main/res/values-de/strings.xml new file mode 100644 index 000000000000..047123467301 --- /dev/null +++ b/KernelSU/manager/app/src/main/res/values-de/strings.xml @@ -0,0 +1,121 @@ + + + Startseite + Nicht installiert + Permissiv + Funktioniert + Version: %d + SuperUser + Tippen zum Installieren + Superuser: %d + Unbekannt + Erzwingen + Neustart in Bootloader + Neustart in Download-Modus + Neustart mit EDL-Modus + Autor + overlayfs nicht verfügbar, Modul kann nicht funktionieren! + Über + Module sind deaktiviert, weil es einen Konflikt mit Magisk gibt! + https://kernelsu.org/guide/what-is-kernelsu.html + Erfahren, wie KernelSU installiert und Module verwendet werden + Unterstütze uns + KernelSU ist und wird immer frei und quelloffen sein. Du kannst uns jedoch deine Unterstützung zeigen, indem du eine Spende tätigst. + SELinux-Kontext + Module standardmäßig aushängen + Globaler Standardwert für \'Module aushängen\' in App-Profilen. Falls aktiviert, werden alle Moduländerungen im System für alle Apps entfernt, für die kein Profil festgelegt ist. + Standard + Vorlage + Benutzerdefiniert + App-Profilaktualisierung für %s fehlgeschlagen + Vererbt + Global + Individuell + Domäne + Aktualisieren + Wenn du diese Option aktivierst, kann KernelSU alle von den Modulen für diese App geänderten Dateien wiederherstellen. + Regeln + Herunterladen startet: %s + Fehler beim Aktualisieren der SELinux-Regeln für: %s + Starten + Neue Version: %s verfügbar, tippen zum Aktualisieren + Stopp erzwingen + Neustart + Module: %d + Manager-Version + SELinux-Status + Deaktiviert + Modulaktivierung fehlgeschlagen: %s + Moduldeaktivierung fehlgeschlagen: %s + Keine Module installiert + Modul + Deinstallieren + Installieren + Neustarten + Einstellungen + Neustart in Recovery + %s deinstalliert + Version + Neu laden + System-Apps anzeigen + System-Apps ausblenden + Protokoll senden + KernelSU verstehen + Sicherer Modus + Neustarten, damit Änderungen wirksam werden + Quellcode unter %1$s ansehen
Unserem %2$s-Kanal beitreten
+ Profilname + Namespace einhängen + Gruppen + Fähigkeiten + Module aushängen + Modul herunterladen: %s + Nicht unterstützt + KernelSU unterstützt derzeit nur GKI-Kernel + Kernel + Fingerabdruck + Installieren + Soft-Reboot + Sicher, dass du das Modul %s deinstallieren möchtest\? + Deinstallation fehlgeschlagen: %s + Die aktuelle Kernel-Version %d ist zu alt für diese Manager-Version. Bitte auf Version %d oder höher upgraden! + Änderungsprotokoll + Erfolgreich importiert + In Zwischenablage exportieren + Kann lokale Vorlage nicht finden! + Vorlagen-ID existiert bereits! + Aus Zwischenablage importieren + Konnte Changelog nicht laden: %s + Name + Ungültige Vorlagen-ID + Online-Vorlagen synchronisieren + Vorlage erstellen + Schreibgeschützt + Import/Export + Fehler beim Speichern + Vorlage bearbeiten + ID + App-Profil-Template + Beschreibung + Speichern + verwalte lokale und online Profil Vorlagen + Löschen + Zwischenablage ist leer! + Vorlage ansehen + WebView-Debugging aktivieren + Kann verwendet werden zum Debugging von WebUI, bitte nur falls nötig aktivieren. + %1$s Partitionsabbild empfohlen + KMI auswählen + Weiter + Direkte Installation (empfohlen) + Datei auswählen + In inaktiven Slot installieren (nach OTA) + Nach einem Neustart wird dein Gerät **GEZWUNGEN** in den derzeit inaktiven Slot zu booten. +\nBenutze dies nur nach Fertigstellung des OTA. +\nFortfahren? + Root-Zugriff konnte nicht gewährt werden! + Öffnen + Updates suchen + Automatisch nach Updates suchen beim Öffnen der App + Protokolle Speichern +
\ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/values-es/strings.xml b/KernelSU/manager/app/src/main/res/values-es/strings.xml new file mode 100644 index 000000000000..5623b47a2943 --- /dev/null +++ b/KernelSU/manager/app/src/main/res/values-es/strings.xml @@ -0,0 +1,107 @@ + + + Inicio + No instalado + Toca para instalar + Funcionando + Versión: %d + Superusuarios: %d + Módulos: %d + No soportado + Por el momento, KernelSU solo es compatible con kernels genéricos (GKIs) + Versión del kernel + Versión del gestor + Huella del dispositivo + Estado de SELinux + + Desactivado + Enforcing de SELinux + Permisivo + Desconocido + Superusuario + No se pudo habilitar el módulo \"%s\" + No se pudo deshabilitar el módulo \"%s\" + No hay ningún módulo instalado + Módulo + Desinstalar + Instalar módulo + Instalar + Reiniciar + Ajustes + Reinicio minimo + Reiniciar en modo de recuperación + Reiniciar en modo de arranque + Reiniciar en modo Download + Reiniciar en modo EDL + Acerca de + ¿Estás seguro de que quieres desinstalar el módulo \"%s\"? + \"%s\" esta desinstalado + No se pudo desinstalar \"%s\" + Versión + Autor + El módulo no puede funcionar ya que OverlayFS no está disponible! + Recargar + Mostrar applicaciones del sistema + Ocultar applicaciones del sistema + Enviar registro de informe + Modo seguro + Reinicia para aplicar cambios + Se deshabilitaron los módulos ya que entran en conflicto con los de Magisk! + Aprende KernelSU + https://kernelsu.org/guide/what-is-kernelsu.html + Descubre cómo instalar KernelSU y utilizar módulos + Apóyanos + KernelSU es y siempre será, libre y de código abierto. De todas formas, puedes mostrarnos tu apoyo mediante una donación. + Mirar el código en %1$s
Únete a nuestro canal de %2$s
+ Predeterminado + Plantilla + Personalizado + Nombre de perfil + Montaje del espacio de nombres + Heredado + Global + Individual + Grupos + Capacidades + Contexto de SELinux + Desmontar módulos + No se pudo actualizar el perfil de la applicación para %s + Desmontar módulos por defecto + El valor global predeterminado para \"Desmontar módulos\" en los perfiles de las aplicaciones. Si la habilitas, se desharán todas las modificaciones al sistema hechas por el módulo para las applicaciones que no tengan un perfil establecido. + Si habilitas esta opción, KernelSU podrá restaurar cualquier archivo modificado por los módulos para esta app. + Dominio + Reglas + Actualizar + Descargando módulo: \"%s\" + Iniciar descarga: %s + Nueva versión: %s está disponible, toque para actualizar + Abrir Aplicacion + Forzar cierre de la aplicacion + Reiniciar aplicacion + Falló al actualizar reglas de SEpolicy por: %s + La versión actual de KernelSU %d es demasiado baja para que el gestor funcione correctamente. ¡Por favor actualiza a la versión %d o superior! + Registro de cambios + Importado con exíto + Exportar a portapapeles + No se puede encontrar plantilla local para exportar! + Ya existe un ID de la plantilla! + Importar desde portapapeles + Error en obtener los registros de cambios: %s + Nombre + ID de la plantilla es invalido + Sincronizar plantillas en linea + Crear plantilla + sololectura + Importar/Exportar + Fallo en guardar plantilla + Editar plantilla + id + Plantilla del perfil de la aplicacion + Descripción + Guardar + Administrar las plantillas locales y de en linea del perfil de la aplicacion + Eliminar + El portapapeles esta vacio! + Ver plantilla + Guardar Registros +
\ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/values-et/strings.xml b/KernelSU/manager/app/src/main/res/values-et/strings.xml new file mode 100644 index 000000000000..d514fc6aea79 --- /dev/null +++ b/KernelSU/manager/app/src/main/res/values-et/strings.xml @@ -0,0 +1,112 @@ + + + Töötamine + Versioon: %d + Mooduleid: %d + Tuum + Manageri versioon + Sõrmejälg + Lubav + Mooduli lubamine ebaõnnestus: %s + Mooduleid pole paigaldatud + Taaskäivita + Taaskäivita taastusesse + Kas soovid kindlasti eemaldada mooduli %s? + %s on eemaldatud + Raporteeri logi + Turvarežiim + Muudatuste rakendamiseks taaskäivita + Õpi KernelSUd + https://kernelsu.org/guide/what-is-kernelsu.html + Vaikimisi + Haagi nimeruum + Lahtihaagitud moodulid + Rakenduseprofiili uuendamine %s jaoks ebaõnnestus + Haagi moodulid vaikimisi lahti + Allalaadimise alustamine: %s + SELinux reeglite uuendamine ebaõnnestus: %s + Muuda malli + Rakenduseprofiili mall + ID + vaid lugemiseks + malli ID juba eksisteerib! + Ekspordi lõikelauale + Sünkrooni võrgumallid + Muudatuste logi hankimine ebaõnnestus: %s + Kodu + Klõpsa paigaldamiseks + Pole paigaldatud + Mittetoetatud + Superkasutajaid: %d + KernelSU toetab hetkel vaid GSI tuumasid + SELinuxi olek + Keelatud + Jõustav + Teadmata + Superkasutaja + Mooduli keelamine ebaõnnestus: %s + Moodul + Taaskäivita käivituslaadurisse + Eemalda + Paigalda + Teave + Paigalda + Seaded + Pehme taaskäivitus + Taaskäivita allalaadimisrežiimi + Taaskäivita EDL-i + Värskenda + Autor + Eemaldamine ebaõnnestus: %s + Versioon + overlayfs pole saadaval, moodul ei saa töötada! + Kuva süsteemirakendused + Peida süsteemirakendused + Moodulid on keelatud, kuna need lähevad konflikti Magiski omadega! + Õpi KernelSUd paigaldama ja mooduleid kasutama + Toeta meid + Grupid + KernelSU on, ja alati jääb, tasuta ning avatud lähtekoodiga kättesaadavaks. Sellegipoolest võid sa näidata, et hoolid, ning teha annetuse. + Mall + Vaata lähtekoodi %1$sis
Liitu meie %2$si kanaliga
+ Profiili nimi + Kohandatud + Päritud + Globaalne + Individuaalne + Võimekused + Sobimatu malli ID + SELinux kontekst + Praegune KernelSU versioon %d on liiga madal, haldur ei saa konkreetselt toimida. Palun täienda versioonile %d või kõrgem! + Domeen + Käivita + Sundpeata + Reeglid + Uuenda + Mooduli allalaadimine: %s + Uus versioon: %s on saadaval, klõpsa täiendamiseks + Taaskäivita + Muudatuste logi + Nimi + Kirjeldus + Edukalt imporditud + Salvesta + Lõikelaud on tühi! + Kustuta + Vaata malli + Impordi/ekspordi + Impordi lõikelaualt + Malli salvestamine ebaõnnestus + Loo mall + Halda kohalikke ja võrgusolevaid rakenduseprofiili malle + Selle valiku lubamine lubab KernelSU-l taastada selle rakenduse moodulite poolt mistahes muudetud faile. + Eksportimiseks kohalikku malli ei leitud! + Globaalne vaikeväärtus \"Lahtihaagitud moodulitele\" rakenduseprofiilides. Lubamisel eemaldab see kõik moodulite süsteemimuudatused rakendustele, millel ei ole profiili määratud. + Saab kasutada WebUI silumiseks, palun luba ainult vajadusel. + Juurkasutaja andmine ebaõnnestus! + Kontrolli uuendusi + Rakenduse avamisel kontrolli automaatselt uuendusi + Ava + Luba WebView silumine + Salvesta Logid +
\ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/values-fa/strings.xml b/KernelSU/manager/app/src/main/res/values-fa/strings.xml new file mode 100644 index 000000000000..a5cdb2f7ff58 --- /dev/null +++ b/KernelSU/manager/app/src/main/res/values-fa/strings.xml @@ -0,0 +1,67 @@ + +خانه +نصب نشده است +برای نصب ضربه بزنید +به درستی کار می‌کند +نسخه: %d +برنامه های با دسترسی روت: %d +ماژول‌ها: %d +پشتیبانی نشده +کرنل اس یو فقط هسته های gki را پشتیبانی میکند + هسته + نسخه برنامه + اثرانگشت + وضعیت SELinux +غیرفعال +قانونمند +آزاد +ناشناخته +دسترسی روت + فعال کردن ماژول ناموفق بود: %s +غیرفعال کردن ماژول ناموفق بود: %s +هیچ ماژولی نصب نشده است +ماژول +لغو نصب +نصب +نصب +راه اندازی دوباره +تنظیمات +راه اندازی نرم +راه اندازی به ریکاوری +راه اندازی به بوتلودر +راه اندازی به حالت دانلود +راه اندازی به EDL +درباره + آیا مطمئنید که میخواهید ماژول %s را پاک کنید؟ +%s پاک شد +پاک کردن ناموفق بود: %s +نسخه +سازنده +overlayfs موجود نیست. مازول کار نمیکند!! +تازه‌سازی +نمایش برنامه های سیستمی +مخفی کردن برنامه های سیستمی +ارسال وقایع +حالت امن +راه‌اندازی مجدد برای تاثیرگذاری +مازول به دلیل تعارض با مجیسک غیرفعال شده اند\'s! +یادگیری کرنل اس یو +https://kernelsu.org/guide/what-is-kernelsu.html +یاد بگیرید چگونه از کرنل اس یو و ماژول ها استفاده کنید +از ما حمایت کنید +KernelSU رایگان است و همیشه خواهد بود و منبع باز است. با این حال، می توانید با اهدای کمک مالی به ما نشان دهید که برایتان مهم است. + +Join our %2$s channel ]]> + +پروفایل برنامه +پیش‌فرض +قالب +شخصی سازی شده +اسم پروفایل +Mount namespace +اثر گرفته +گلوبال +تکی +جداکردن ماژول ها + ذخیره گزارش‌ها + diff --git a/KernelSU/manager/app/src/main/res/values-fil/strings.xml b/KernelSU/manager/app/src/main/res/values-fil/strings.xml new file mode 100644 index 000000000000..fc527bf30627 --- /dev/null +++ b/KernelSU/manager/app/src/main/res/values-fil/strings.xml @@ -0,0 +1,70 @@ + + + Katayuan ng SELinux + Hindi pinagana + Enforcing + Permissive + Hindi naka-install + Home + Pindutin para mag-install + Gumagana + Bersyon: %d + Hindi matukoy + Mga Modyul: %d + Hindi Suportado + Sinusuportahan lang ng KernelSU ang mga kernel ng GKI ngayon + Nabigong paganahin ang modyul: %s + Nabigong i-disable ang modyul: %s + Walang naka-install na modyul + Modyul + I-install + I-install + I-reboot + I-soft Reboot + I-reboot sa Download + I-reboot sa EDL + Tungkol + Sigurado ka bang gusto mong i-uninstall ang modyul %s\? + Na-uninstall ang %s + Nabigong i-uninstall: %s + May-akda + Ang overlayfs ay hindi magagamit, ang modyul ay hindi gagana! + I-refresh + Ipakita ang mga application ng system + Magpadala ng Log + I-reboot para umepekto + Hindi pinagana ang mga modyul dahil salungat ito sa Magisk! + Alamin ang KernelSU + Matutunan kung paano mag-install ng KernelSU at gumamit ng mga modyul + Suportahan Kami + Ang KernelSU ay, at palaging magiging, libre, at open source. Gayunpaman, maaari mong ipakita sa amin na nagmamalasakit ka sa pamamagitan ng pagbibigay ng donasyon. + Tingnan ang source code sa %1$s
Sumali sa aming %2$s channel
+ I-mount ang namespace + Indibidwal + Mga Grupo + Mga Kakayanan + Konteksto ng SELinux + I-unmount ang mga modyul + Nabigong i-update ang App Profile para sa %s + Ang kasalukuyang bersyon ng KernelSU %d ay masyadong mababa para gumana nang maayos ang manager. Mangyaring mag-upgrade sa bersyon %d o mas mataas! + Ang pagpapagana sa opsyong ito ay magbibigay-daan sa KernelSU na ibalik ang anumang binagong file ng mga modyul para sa aplikasyon na ito. + Mga Tuntunin + Nagda-download ng modyul: %s + Simulan ang pag-download: %s + Bagong bersyon: Available ang %s, i-click upang i-download + Ilunsad + Pilit na I-hinto + I-restart + Nabigong i-update ang mga panuntunan ng SELinux para sa: %s + Bersyon ng Manager + Mga setting + I-reboot sa Recovery + I-reboot sa Bootloader + Bersyon + I-uninstall + Itago ang mga application ng system + Pangalan ng profile + Minana + Ang pangkalahatang default na halaga para sa \"Umount modules\" sa Mga Profile ng App. Kung pinagana, aalisin nito ang lahat ng mga pagbabago sa modyul sa system para sa mga aplikasyon na walang hanay ng Profile. + I-save ang mga Log +
\ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/values-fr/strings.xml b/KernelSU/manager/app/src/main/res/values-fr/strings.xml new file mode 100644 index 000000000000..01c0672b87a6 --- /dev/null +++ b/KernelSU/manager/app/src/main/res/values-fr/strings.xml @@ -0,0 +1,135 @@ + + + Non installé + Fonctionnel + Version : %d + Super-utilisateurs : %d + Modules : %d + Actuellement, KernelSU ne supporte que les noyaux GKI + Noyau + Empreinte digitale + Mode SELinux + Désactivé + Permissive + Inconnu + Super-utilisateur + Aucun module installé + Accueil + Appuyez ici pour installer + Non supporté + Échec de la désinstallation : %s + Version + Version du gestionnaire + Enforcing + Échec de l\'activation du module : %s + Modules + Désinstaller + Installer + Échec de la désactivation du module : %s + Redémarrer + Installer + Paramètres + Redémarrer en mode bootloader + Redémarrage progressif + Redémarrer en mode de récupération + Redémarrer en mode EDL + À propos + %s a été désinstallé + Redémarrer en mode de téléchargement + Auteur + Êtes-vous sûr(e) de vouloir désinstaller le module %s \? + Découvrir KernelSU + OverlayFS est indisponible, impossible de faire fonctionner les modules ! + Rafraîchir + Afficher les applications système + Masquer les applications système + Mode sans échec + Rapport de journal + Redémarrez pour appliquer les modifications + Les modules sont désactivés car ils sont en conflit avec ceux de Magisk ! + https://kernelsu.org/guide/what-is-kernelsu.html + Soutenez-nous + Découvrez comment installer KernelSU et utiliser les modules + KernelSU est, et restera toujours, gratuit et open source. Vous pouvez cependant nous témoigner de votre soutien en nous faisant un don. + Voir le code source sur %1$s
+\nRejoindre notre canal %2$s
+ Modèle + Par défaut + Personnalisé + Nom du profil + Espace de noms de montage + Hérité + Individuel + Contexte SELinux + Global + Groupes + Capacités + Démonter les modules + Échec de la modification du profil d\'application de %s + L\'activation de cette option permettra à KernelSU de restaurer tous les fichiers modifiés par les modules de cette application. + Démonter les modules par défaut + Valeur globale par défaut pour l\'option « Démonter les modules » dans les profils d\'application. Lorsqu\'elle est activée, les modifications apportées au système par les modules seront supprimées pour les applications qui n\'ont pas de profil défini. + Domaine + Règles + Mettre à jour + Téléchargement du module : %s + Lancer + La version %s est disponible, appuyez ici pour mettre à jour + Début du téléchargement de : %s + Forcer l\'arrêt + Relancer l\'application + Échec de la mise à jour des règles SELinux pour : %s + La version actuelle de KernelSU (%d) est trop ancienne pour que le gestionnaire fonctionne correctement. Veuillez passer à la version %d ou à une version supérieure ! + Importation réussie + Exporter vers le presse-papiers + Impossible de trouver un modèle local à exporter ! + L\'id du modèle existe déjà ! + Journal des modifications + Importer à partir du presse-papiers + Échec de récupération du journal des modifications : %s + Nom + id de modèle invalide + Synchroniser les modèles en ligne + Créer un modèle + lecture seule + Importer/exporter + Échec de l\'enregistrement du modèle + Modifier le modèle + id + Modèles de profils d\'application + Description + Enregistrer + Gérer les modèles de profils d\'application locaux et en ligne + Supprimer + Le presse-papiers est vide ! + Voir le modèle + Vérifier automatiquement les mises à jour à l\'ouverture de l\'application + Vérifier les mises à jour + Activer le débogage de WebView + Peut être utilisé pour déboguer WebUI, n\'activez cette option que si nécessaire. + Échec de l\'octroi des privilèges root ! + Ouvrir + Installation directe (recommandé) + Sélectionner un fichier + Installer dans l\'emplacement inactif (après OTA) + Votre appareil sera **FORCÉ** à démarrer sur l\'emplacement inactif actuel après un redémarrage ! +\nN\'utilisez cette option qu\'une fois la mise à jour OTA terminée. +\nContinuer ? + Suivant + L\'image de la partition %1$s est recommandée + Sélectionner une KMI + Minimiser l\'image clairsemée + Redimensionne l\'image clairsemée où se trouve le module à sa taille réelle. Notez que cela peut entraîner un dysfonctionnement du module, alors utilisez cette fonctionnalité uniquement lorsque nécessaire (pour la sauvegarde, par exemple) + Désinstaller + Désinstaller temporairement + Désinstaller définitivement + Restaurer l\'image stock + Restaurer l\'image stock d\'usine (s\'il en existe une sauvegarde), option généralement utilisée avant une mise à jour OTA ; si vous avez besoin de désinstaller KernelSU, utilisez plutôt l\'option « Désinstaller définitivement ». + Flash en cours + Flash réussi + Échec du flash + lkm sélectionné : %s + Désinstallation complète et permanente de KernelSU (root et tous les modules). + Désinstaller KernelSU temporairement et rétablir l\'état original au redémarrage suivant. + Enregistrer les Journaux +
\ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/values-hi/strings.xml b/KernelSU/manager/app/src/main/res/values-hi/strings.xml new file mode 100644 index 000000000000..f930446936f3 --- /dev/null +++ b/KernelSU/manager/app/src/main/res/values-hi/strings.xml @@ -0,0 +1,84 @@ + + + प्रभाव में होने के लिए रीबूट करें + जानें कि KernelSU कैसे स्थापित करें और मॉड्यूल का उपयोग कैसे करें + अज्ञात + सिस्टम एप्प दिखाए + %s अनइंस्टॉल सफल हुआ + मॉड्यूल्स अनमाउंट करें + लॉग भेजे + डिसेबल्ड (बंद) + हमें प्रोत्साहन दें + Inherited + मॉड्यूल बंद कर दिए गए हैं क्योंकि यह मैजिक के साथ टकरा रहे है! + क्या बदलाव हुए है + पर्मिसिव + डाउनलोड में रिबूट करें + डिफ़ॉल्ट रूप से मॉड्यूल अनमाउन्ट करें + इस विकल्प को चालू करने से KernelSU को इस एप्लिकेशन के लिए मॉड्यूल द्वारा किसी भी मोडिफाइड फ़ाइल को रिस्टोर करें। + Individual + %s मॉड्यूल चालू करने में विफल + जबर्दस्ती बंद करें + EDL मोड में रिबूट करें + फिर से चालू करें + क्षमताएं + सुपरयूजर : %d + %s की डाउनलोडिंग स्टार्ट करें + Global + ऐप प्रोफाइल में \"अनमाउंट मॉड्यूल\" के लिए ग्लोबल डिफ़ॉल्ट वैल्यू। यदि चालू किया गया है, तो यह एप्लीकेशंस के लिऐ सिस्टम के सभी मॉड्यूल मोडिफिकेशन को हटा देगा जिनकी प्रोफ़ाइल सेट नहीं है। + मॉड्यूल्स : %d + एनफोर्सिंग + SELinux context + फिंगरप्रिंट + डिफॉल्ट + लॉन्च करें + सेफ मोड + मैनेजर के ठीक से काम करने के लिए वर्तमान KernelSU वर्जन %d बहुत कम है। कृपया वर्जन %d या उच्चतर में अपग्रेड करें! + रिकवरी में रिबूट करें + सॉफ्ट रिबूट + प्रोफाइल का नाम + KernelSU मुफ़्त और ओपन सोर्स और हमेशा रहेगा। हालाँकि आप दान देकर हमें दिखा सकते हैं कि आप संरक्षण करते हैं। + अनइंस्टॉल करें + Namspace माउंट करें + इंस्टाल करें + इंस्टाल करने के लिए क्लिक करें + नियम + समूह + Overlayfs उपलब्ध नहीं है, मॉड्यूल काम नहीं कर सकता ! + मॉड्यूल + निर्माता + हमारे बारे में + वर्जन: %d + रीबूट करें + KernelSU अभी केवल GKI कर्नल्स को सपोर्ट करता है + SELinux स्थिति + सिस्टम एप्प छिपाए + वर्जन + सपोर्ट नहीं करता है + डोमेन + होम + कस्टम + टेम्पलेट + रिफ्रेश + %s मॉड्यूल डाउनलोड हो रहा है + अपडेट + KernelSU सीखें + क्या आप सच में मॉड्यूल %s को अनइंस्टॉल करना चाहते हैं\? + %s अनइंस्टल करने में असफल + सुपरयूजर + सेटिंग + काम कर रहा है + %s मॉड्यूल बंद करने में विफल + कोई मॉड्यूल इंस्टाल नहीं हुआ + इंस्टाल करें + कर्नल + इंस्टाल नहीं हुआ + %s के लिए ऐप प्रोफ़ाइल अपडेट करने में विफल + https://kernelsu.org/guide/what-is-kernelsu.html + %s के लिए SELinux नियमों को अपटेड करने में विफल + बुटलोडर में रिबूट करें + %1$s पर स्रोत कोड देखें
हमारे %2$s चैनल से जुड़ें
+ मैनेजर वर्जन + नया वर्जन: %s उपलब्ध है,अपग्रेड के लिए क्लिक करें + लॉग सहेजें +
\ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/values-hr/strings.xml b/KernelSU/manager/app/src/main/res/values-hr/strings.xml new file mode 100644 index 000000000000..9fb1e4c67460 --- /dev/null +++ b/KernelSU/manager/app/src/main/res/values-hr/strings.xml @@ -0,0 +1,83 @@ + + + Prikažite sistemske aplikacije + Sakrijte sistemske aplikacije + Pošaljite Izvještaj + Sigurnosni mod + Ponovno pokrenite da bi proradilo + Neuspješno ažuriranje SELinux pravila za: %s + Početna + Nije instalirano + Verzija: %d + Kliknite da instalirate + Radi + Superkorisnici: %d + Module: %d + Nepodržano + KernelSU samo podržava GKI kernele sad + Kernel + Verzija Voditelja + Otisak prsta + Isključeno + U Provođenju + Permisivno + SELinux stanje + Nepoznato + Superkorisnik + Neuspješno uključivanje module: %s + Neuspješno isključivanje module: %s + Nema instaliranih modula + Modula + Deinstalirajte + Instalirajte + Instalirajte + Ponovno pokrenite + Postavke + Lagano Ponovno pokretanje + Ponovno pokrenite u Oporavu + Ponovno pokrenite u Pogonski Učitavalac + Ponovno pokrenite u Preuzimanje + Ponovo pokrenite u EDL + O + Jeste li sigurni da želite deinstalirati modulu %s\? + %s deinstalirana + Neuspješna deinstalacija: %s + Verzija + Autor + Osvježi + overlayfs nije dostupan, modula ne može raditi! + Module su isključene jer je u sukobu sa Magisk-om! + Naučite KernelSU + https://kernelsu.org/guide/what-is-kernelsu.html + Naučite kako da instalirate KernelSU i da koristite module + Podržite Nas + KernelSU je, i uvijek če biti, besplatan, i otvorenog izvora. Možete nam međutim pokazati da vas je briga s time da napravite donaciju. + Pogledajte izvornu kodu na %1$s
Pridružite nam se na %2$s kanalu
+ Zadano + Šablon + Prilagođeno + Naziv profila + Naslijeđen + Imenski prostor nosača + Ažuriranje Profila Aplikacije za %s nije uspjelo + Globalan + Pojedinačan + Umount module + Grupe + Sposobnosti + SELinux kontekst + Trenutna KernelSU verzija %d je preniska da bi voditelj ispravno radio. Molimo vas da nadogradite na verziju %d ili noviju! + Umount module po zadanom + Globalna zadana vrijednost za \"Umount module\" u Profilima Aplikacije. Ako je omogućeno, uklonit će sve izmjene modula na sistemu za aplikacije koje nemaju postavljen Profil. + Domena + Uključivanjem ove opcije omogućit će KernelSU-u da vrati sve izmjenute datoteke od strane modula za ovu aplikaciju. + Pravila + Ažuriranje + Preuzimanje module: %s + Započnite sa preuzimanjem: %s + Nova verzija: %s je dostupna, kliknite da preuzmete + Pokrenite + Prisilno Zaustavite + Resetujte + Spremi Zapise +
\ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/values-hu/strings.xml b/KernelSU/manager/app/src/main/res/values-hu/strings.xml new file mode 100644 index 000000000000..2b52317c1b79 --- /dev/null +++ b/KernelSU/manager/app/src/main/res/values-hu/strings.xml @@ -0,0 +1,106 @@ + + + Működik + Verzió: %d + Modulok: %d + KernelSU csak GKI kerneleket támogat jelenleg + Kernel + App verziója + Build Fingerprint + Kikapcsolt + Újraindítás letöltő módba + Újraindítás EDL-be + Névjegy + Biztos vagy benne hogy eltávolítod a következő modult: %s\? + Nem sikerült eltávolítani: %s + Készítő + Overlayfs nem elérhető, a modul nem tud enélkül működni! + Újratöltés + Mutasd a rendszer alkalmazásokat + Rejtsd el a rendszer alkalmazásokat + Biztonságos mód + A modul letiltva mert ütközik a Magisk verziójával! + Tudj meg többet a KernelSU-ról + Tudd meg hogyan telepítsd a KernelSU-t és használd moduljait + Támogass minket + Tekintsd meg a forráskódot a %1$s-n
Csatlakozz a %2$s csatornánkhoz
+ Alapértelmezett + Sablon + Egyedi + Profil neve + Mountold a névteret + Örökölt + https://kernelsu.org/guide/what-is-kernelsu.html + Különálló + Csoportok + Jogosultságok + SElinux kontextus + Umountold a modulokat alpértelmezés szerint + Ennek az opciónak az engedélyezése lehetővé teszi, hogy a KernelSU visszaállítsa az alkalmazás moduljai által módosított fájlokat. + Tartomány + Szabályok + Frissítés + A %s modul letöltése folyamatban + Indítsd el a letöltést: %s + Indítás + Kényszerített leállítás + újraindítás + Kezdőlap + Nincs telepítve + Kattints a telepítéshez + Engedélyezett alkalmazások: %d + Nem támogatott + SELinux státusz + Érvényesítés + Megengedő + Ismeretlen + Super user + Nem sikerült engedélyezni a következő modult: %s + Nem sikerült letiltani a következő modulokat: %s + Nincs modul telepítve + Modulok + Eltávolítás + Telepítés + Telepítés + Újraindítás + Beállítások + Android felület újraindítása + Újraindítás recovery-módba + Újraindítás bootloader-módba + %s törölve + Verzió + Napló küldése + Indítsd újra a készüléket hogy érvényesítsd a változást + A KernelSU ingyenes és nyílt forráskódú és mindig is az lesz. Te viszont meg tudod mutatni azt, hogy törődsz ennek a projektnek a sorsával egy adomány formájában. + Globális + Unmountold a modulokat + Nem sikerült frissíteni az App Profilt ehhez %s + A „Modulok csatlakoztatása” globális alapértelmezett értéke az alkalmazásprofilokban. Ha engedélyezve van, eltávolítja a rendszer összes modul-módosítását azoknál az alkalmazásoknál, amelyeknek nincs beállított profilja. + Új verzió: %s elérhető, kattints a frissítéshez + Nem sikerült frissíteni a SELinux szabályait a következőhöz: %s + A jelenlegi KernelSU verzió %d túlságosan elavult. Kérlek frissíts a %d verzióra vagy újabbra! + Sikeresen importálva + Exportálás a vágólapból + A helyi sablon nem található az exportáláshoz! + A sablon ID már létezik! + Változások + Importálás a vágólapból + A változásnapló lekérése nem sikerült: %s + Név + Hibás sablon ID + Online sablonok szinkronizálása + Sablon készítése + csak olvasható + Import/Export + A sablon mentése sikertelen + Sablon szerkesztése + id + Alkalmazásprofil sablon + Leírás + Mentés + Az alkalmazásprofil helyi és online sablon kezelése + Törlés + A vágólap üres! + Sablon megnézése + Naplók Mentése +
\ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/values-in/strings.xml b/KernelSU/manager/app/src/main/res/values-in/strings.xml new file mode 100644 index 000000000000..98698f529aa9 --- /dev/null +++ b/KernelSU/manager/app/src/main/res/values-in/strings.xml @@ -0,0 +1,135 @@ + + + Beranda + Tidak terinstal + Klik untuk menginstal + Berfungsi + Versi: %d + SuperUser: %d + Modul: %d + Tidak didukung + KernelSU saat ini hanya mendukung kernel GKI + Kernel + Versi Manager + Identitas + Status SELinux + Nonaktif + Enforcing + Permissive + Unknown + SuperUser + Gagal mengaktifkan modul: %s + Gagal menonaktifkan modul: %s + Tidak ada modul + Modul + Hapus + Instal + Instal + Reboot + Pengaturan + SoftReboot + But ke Recovery + But ke Bootloader + But ke Download + But ke EDL + Tentang + Yakin menghapus modul %s? + %s berhasil dihapus + Gagal menghapus: %s + Versi + Oleh + OverlayFS tidak tersedia, modul tidak berfungsi! + Muat ulang + Tampilkan aplikasi sistem + Sembunyikan aplikasi sistem + Laporkan Log + Mode aman + Reboot agar berfungsi + Konflik dengan Magisk, fungsi modul ditiadakan! + Pelajari KernelSU + https://kernelsu.org/id_ID/guide/what-is-kernelsu.html + Pelajari cara instal KernelSU dan menggunakan modul + Dukung Kami + KernelSU akan selalu menjadi aplikasi gratis dan terbuka. Anda dapat memberikan donasi sebagai bentuk dukungan. + Lihat kode sumber di %1$s
Gabung kanal %2$s kami
+ Profil Apl + Bawaan + Templat + Khusus + Nama profil + Mount Namespace + Diwariskan + Universal + Individual + Kelompok + Kemampuan + Konteks SELinux + Umount Modul + Gagal membarui Profil pada %s + Melepas Modul secara bawaan + Menggunakan \"Umount Modul\" secara universal pada Profil aplikasi. Jika diaktifkan, akan menghapus semua modifikasi sistem untuk aplikasi yang tidak memiliki set Profil. + Aktifkan opsi ini agar KernelSU dapat memulihkan kembali berkas termodifikasi oleh modul pada aplikasi ini. + Domain + Aturan + Membarui + Mengunduh modul: %s + Mulai mengunduh: %s + Tersedia versi terbaru: %s, Klik untuk membarui + Jalankan + Paksa Berhenti + Mulai ulang + Gagal membarui aturan SELinux pada: %s + Versi KernelSU %d terlalu rendah agar manajer berfungsi normal. Harap membarui ke versi %d atau di atasnya! + Catatan Perubahan + Berhasil diimpor + Ekspor ke papan klip + Tidak ditemukan templat lokal untuk diekspor! + Id templat sudah ada! + Impor dari papan klip + Gagal mengambil Changelog: %s + Nama + Id templat tidak valid + Sinkronkan templat daring + Buat Templat + Impor/Ekspor + Gagal menyimpan templat + Edit Templat + id + Templat Profil Aplikasi + Deskripsi + Simpan + Atur templat Profil yang lokal dan daring + Hapus + Papan klip kosong! + Lihat Templat + ReadOnly + Pengawakutuan WebView + Dapat mengawakutu WebView, hanya aktifkan jika butuh. + %1$s image partisi terekomendasi + Pilih KMI + Selanjutnya + Gawai akan **DIPAKSA** untuk but ke slot nonaktif! +\nHANYA gunakan setelah proses OTA selesai. +\nLanjutkan? + Instal Langsung (rekomendasi) + Pilih berkas + Instal ke slot nonaktif (setelah OTA) + Gagal memberikan akses root! + Buka + Cek terbaru + Cek terbaru setiap membuka aplikasi + Meminimalkan sparse image + Mengembalikan sparse image, lokasi modul disimpan, ke ukuran sebenarnya. Dapat menyebabkan modul bekerja abnormal, maka gunakan saat dibutuhkan saja (mis. untuk pencadangan) + Hapus permanen KernelSU (root dan modul). + Hapus Temporer + Pulihkan Image Asal + Hapus + Hapus Temporer KernelSU, pulihkan ke kondisi asali setelah but berikutnya. + Hapus Permanen + Pulihkan image bawaan ROM (jika cadangan tersedia), umumnya dilakukan sebelum OTA; jika ingin menghapus KernelSU, gunakan fungsi \"Hapus Permanen\". + Pemasangan Berhasil + LKM dipilih: %s + Pasang + Pemasangan Gagal + Simpan Log +
\ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/values-it/strings.xml b/KernelSU/manager/app/src/main/res/values-it/strings.xml new file mode 100644 index 000000000000..7bd3f9247356 --- /dev/null +++ b/KernelSU/manager/app/src/main/res/values-it/strings.xml @@ -0,0 +1,134 @@ + + + Home + Non installato + Clicca per installare + In esecuzione + Versione: %d + Applicazioni con accesso root: %d + Moduli installati: %d + Non supportato + KernelSU ora supporta solo i kernel GKI + Kernel + Versione del manager + Impronta della build di Android + Stato di SELinux + Disabilitato + Enforcing + Permissive + Sconosciuto + Accesso root + Impossibile abilitare il modulo: %s + Impossibile disabilitare il modulo: %s + Nessun modulo installato + Modulo + Disinstalla + Installa + Installa + Riavvia + Impostazioni + Riavvio rapido + Riavvia in modalità Recovery + Riavvia in modalità Bootloader + Riavvia in modalità Download + Riavvia in modalità EDL + Informazioni + Sei sicuro di voler disinstallare il modulo %s? + %s disinstallato + Impossibile disinstallare: %s + Versione + Autore + overlayfs non è disponibile, i moduli non possono funzionare! + Ricarica + Mostra app di sistema + Nascondi app di sistema + Invia log + Modalità provvisoria + Riavvia per applicare la modifica + I moduli sono disabilitati perché in conflitto con quelli di Magisk! + Scopri KernelSU + https://kernelsu.org/guide/what-is-kernelsu.html + Scopri come installare KernelSU e utilizzare i moduli + Supportaci + KernelSU è, e sempre sarà, gratuito e open source. Puoi comunque mostrarci il tuo apprezzamento facendo una donazione. + Unisciti al nostro canale %2$s]]> + Nome profilo + Spazio dei nomi del mount + Globale + Gruppi + Ereditato + Individuale + Predefinito + Personalizzato + Modello + Scollega moduli + Contesto SELinux + Aggiornamento App Profile per %s fallito + Aggiorna + Apri + Capacità + Scollega moduli da default + Regole + Sto scaricando il modulo: %s + Inizia a scaricare:%s + Nuova versione: %s disponibile, tocca per aggiornare + Arresto forzato + Riavvia + Aggiornamento regole SELinux per %s fallito + Attivando questa opzione permetterai a KernelSU di ripristinare ogni file modificato dai moduli per questa app. + Dominio + Il valore predefinito per \"Scollega moduli\" in App Profile. Se attivato, rimuoverà tutte le modifiche al sistema da parte dei moduli per le applicazioni che non hanno un profilo impostato. + La versione attualmente installata di KernelSU (%d) è troppo vecchia ed il gestore non può funzionare correttamente. Si prega di aggiornare alla versione %d o successiva! + Registro aggiornamenti + Crea modello + Modifica modello + identificativo + Identificativo modello non valido + Nome + Visualizza modello + Sola lettura + L\'identificativo del modello esiste già! + Importa/Esporta + Importa dagli appunti + Esporta negli appunti + Impossibile trovare modello locale da esportare! + Importato con successo + Sincronizza i modelli remoti + Gli appunti sono vuoti! + Impossibile ottenere l\'accesso root! + Modelli App Profile + Gestisci i modelli locali e remoti di App Profile + Elimina + Descrizione + Salva + Impossibile salvare il modello + Apri + Impossibile reperire il changelog: %s + Controlla aggiornamenti + Controlla automaticamente la disponibilità di aggiornamenti all\'apertura dell\'applicazione + Abilita il Debug di WebView + Può essere usato per svolgere il debug di WebUI, è consigliato attivarlo solo quando necessario. + È consigliato usare immagine della partizione %1$s + Scegli il KMI + Avanti + Installazione diretta (Raccomandata) + Scegli un File + Installa nello Slot Inattivo (Dopo OTA) + Il tuo dispositivo sarà **FORZATO** ad avviarsi nello slot inattivo dopo il riavvio! +\nUsa questa opzione solo quando l\'applicazione dell\'aggiornamento OTA è terminata. +\nProcedere? + Riduci la dimensione dell\'immagine moduli sparse al minimo + Riduci la dimensione dell\'immagine sparse dei moduli alla sua reale dimenzione. Nota che questo potrebbe causare malfunzionamenti dei moduli quindi utilizzala solo quando necessario (ad esempio in caso di backup) + Disinstalla + Disinstalla Temporaneamente + Disinstalla Permanentemente + Ripristina immagine originale del produttore + Disinstalla temporaneamente KernelSU, ripristina lo stato originale dopo il prossimo riavvio. + Disinstalla KernelSU (Root e tutti i moduli) completamente e permanentemente. + Installazione + Installazione completata + Installazione fallita + LKM selezionato: %s + Ripristina l\'immagine di fabbrica del produttore (se il backup è presente), solitamente usato prima di applicare l\'OTA; se devi disinstallare KernelSU, utilizza invece \"Disinstalla Permanentemente\". + Salva Registri + \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/values-iw/strings.xml b/KernelSU/manager/app/src/main/res/values-iw/strings.xml new file mode 100644 index 000000000000..18cfc638eb9d --- /dev/null +++ b/KernelSU/manager/app/src/main/res/values-iw/strings.xml @@ -0,0 +1,84 @@ + + + הפעל מחדש כדי להכניס לתוקף + למד כיצד להתקין את KernelSU ולהשתמש במודולים + לא ידוע + הצג אפליקציות מערכת + %s הוסר + הסרת טעינת מודולים + שלח לוג + מושבת + תמכו בנו + ירושה + מודולים מושבתים מכיוון שהם מתנגשים עם זה של Magisk! + יומן שינויים + התרים + הפעלה מחדש למצב הורדה + טעינת מודולים כברירת מחדל + הפעלת אפשרות זו תאפשר ל-KernelSU לשחזר קבצים שהשתנו על ידי המודולים עבור יישום זה. + אישי + הפעלת המודל נכשלה: %s + עצירה בכח + הפעלה מחדש למצב EDL + איתחול + יכולת + משתמשי על: %d + מפעיל מודל: %s + גלובלי + ערך ברירת המחדל הגלובלי עבור \"טעינת מודולים\" בפרופילי אפליקציה. אם מופעל, זה יסיר את כל שינויי המודול למערכת עבור יישומים שאין להם ערכת פרופיל. + מודלים:%d + אכיפה + הקשר SELinux + טביעת אצבע + ברירת מחדל + להשיק + מצב בטוח + גרסת KernelSU הנוכחית %d נמוכה מדי כדי שהמנהל יפעל כראוי. אנא שדרג לגרסה %d ומעלה! + הפעלה מחדש לריקברי + רך Reboot + שם פרופיל + KernelSU הוא, ותמיד יהיה, חינמי וקוד פתוח. עם זאת, תוכל להראות לנו שאכפת לך על ידי תרומה. + הסרה + טעינת מרחב שמות + התקנה + לחץ להתקנה + כללים + קבוצה + שכבות-על לא זמינות, המודול לא יכול לעבוד! + מודולים + יוצר + אודות + גרסה: %d + הפעלה מחדש + KernelSU תומך רק בליבת GKI כעת + סטטוס SELinux + הסתר אפליקציות מערכת + גרסה + אינו נתמך + תחום + בית + מותאם אישית + תבנית + רענון + מוריד מודל: %s + עדכון + למד אודות KernelSU + האם אתה בטוח שברצונך להסיר את התקנת המודל %s\? + הסרת התקנת %s נכשלה: + משתמש על + הגדרות + עובד + השבתת מודל %s נכשלה: + אין מודלים מותקנים + להתקין + Kernel + לא מותקן + נכשל עדכון פרופיל האפליקציה עבור %s + https://kernelsu.org/guide/what-is-kernelsu.html + נכשל עדכון כללי SELinux עבור: %s + הפעלה מחדש לבוטלאודר + ראה את קוד המקור ב%1$s
הצטרף אלינו %2$s בערוץ
+ גרסת מנהל + גרסה חדשה עבור: %s זמינה, לחץ כדי לשדרג + שמור יומנים +
\ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/values-ja/strings.xml b/KernelSU/manager/app/src/main/res/values-ja/strings.xml new file mode 100644 index 000000000000..4ecf7420447a --- /dev/null +++ b/KernelSU/manager/app/src/main/res/values-ja/strings.xml @@ -0,0 +1,135 @@ + + + ホーム + 未インストール + タップでインストール + 動作中 + バージョン: %d + スーパーユーザー: %d + モジュール: %d + 非対応 + 現在、 KernelSU は GKI カーネルにのみ対応しています + カーネル + アプリのバージョン + Fingerprint + SELinux の状態 + Disabled + Enforcing + Permissive + 不明 + スーパーユーザー + モジュールの有効化に失敗: %s + モジュールの無効化に失敗: %s + モジュールをインストールしていません + モジュール + アンインストール + インストール + インストール + 再起動 + 設定 + 通常の再起動 + リカバリーへ再起動 + ブートローダー へ再起動 + ダウンロードモードへ再起動 + EDL へ再起動 + アプリについて + モジュール %s をアンインストールしますか? + %s はアンインストールされました + アンインストールに失敗: %s + バージョン + 制作者 + OverlayFS が有効でないためモジュールは動作しません! + 更新 + システムアプリを表示 + システムアプリを非表示 + ログを送信 + セーフモード + 再起動すると有効化されます + Magisk と競合しているためモジュールは無効になっています! + KernelSU について + https://kernelsu.org/ja_JP/guide/what-is-kernelsu.html + KernelSU のインストール方法やモジュールの使い方はこちら + 支援する + KernelSU はこれからもずっとフリーでオープンソースです。寄付をすることで私たちを気にかけていることを示せます。 + %2$s チャンネルに参加]]> + アプリのプロファイル + 既定 + テンプレート + カスタム + プロファイル名 + 名前空間のマウント + 継承 + 共通 + 分離 + モジュールのアンマウント + グループ + SELinux コンテキスト + %s のアプリのプロファイルの更新をできませでした + ドメイン + ルール + 新しいバージョン: %s が利用可能です。タップしてダウンロード + アップデート + ダウンロードを開始: %s + 起動 + 強制停止 + 再起動 + SELinux ルールの更新に失敗しました: %s + ケーパビリティ + モジュールをダウンロード中: %s + このオプションを有効にすると、KernelSU はこのアプリのモジュールによって変更されたファイルを復元できるようになります。 + 既定でモジュールのマウントを解除 + アプリプロファイルの「モジュールのアンマウント」の共通のデフォルト値です。 有効にすると、プロファイルセットを持たないアプリのシステムに対するすべてのモジュールの変更が削除されます。 + 現在の KernelSU バージョン %d はマネージャーが適切に機能するには低すぎます。 バージョン %d 以降にアップグレードしてください! + 変更履歴 + インポート成功 + クリップボードからエクスポート + エクスポートするローカル テンプレートが見つかりません! + テンプレート id はすでに存在します! + クリップボードからインポート + 変更ログの取得に失敗しました: %s + 名前 + 無効なテンプレート id + オンラインテンプレートの同期 + テンプレートの作成 + 読み取り専用 + インポート/エクスポート + テンプレートの保存に失敗しました + テンプレートの編集 + id + アプリプロファイルのテンプレート + 説明 + 保存 + アプリプロファイルのローカルおよびオンラインテンプレートを管理する + 消去 + クリップボードが空です! + テンプレートを表示 + アップデートを確認 + アプリを開いたときにアップデートを自動的に確認する + root の付与に失敗しました! + 開く + WebView デバッグを有効にする + WebUI のデバッグに使用できます。必要な場合にのみ有効にしてください。 + %1$s パーティション イメージが推奨されます + KMI を選択してください + 次に + 非アクティブなスロットにインストール (OTA 後) + 再起動後、デバイスは**強制的に**、現在非アクティブなスロットから起動します。 +\nこのオプションは、OTA が完了した後にのみ使用してください。 +\n続く? + 直接インストール (推奨) + ファイルを選択してください + スパースイメージを最小化 + モジュールが配置されているスパースイメージのサイズを実際のサイズに変更します。 モジュールが正常に動作しなくなる可能性がありますので、必要な場合にのみご使用ください + 完全にアンインストールする + ストックイメージを復元 + 一時的にアンインストールする + アンインストール + KernelSU を一時的にアンインストールし、次回の再起動後に元の状態に戻します。 + KernelSU (ルートおよびすべてのモジュール) を完全かつ永久にアンインストールします。 + バックアップが存在する場合、工場出荷時のイメージを復元できます (OTA の前に使用してください)。KernelSU をアンインストールする必要がある場合は、「完全にアンインストールする」を使用してください。 + フラッシュ + フラッシュ成功 + フラッシュ失敗 + 選択された lkm: %s + ログを保存 + \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/values-kn/strings.xml b/KernelSU/manager/app/src/main/res/values-kn/strings.xml new file mode 100644 index 000000000000..3c4e79fe639f --- /dev/null +++ b/KernelSU/manager/app/src/main/res/values-kn/strings.xml @@ -0,0 +1,70 @@ + + + ಪರಿಣಾಮ ಬೀರಲು ರೀಬೂಟ್ ಮಾಡಿ + KernelSU ಅನ್ನು ಹೇಗೆ ಸ್ಥಾಪಿಸಬೇಕು ಮತ್ತು ಮಾಡ್ಯೂಲ್‌ಗಳನ್ನು ಬಳಸುವುದು ಹೇಗೆ ಎಂದು ತಿಳಿಯಿರಿ + ತಿಳಿಯದ + ಸಿಸ್ಟಮ್ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ತೋರಿಸಿ + %s ಅನ್‌ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಲಾಗಿದೆ + Umount ಮಾಡ್ಯೂಲ್‌ಗಳು + ಲಾಗ್ ಕಳುಹಿಸಿ + ನಮ್ಮನ್ನು ಬೆಂಬಲಿಸಿ + ಪಿತ್ರಾರ್ಜಿತ + ಮಾಡ್ಯೂಲ್‌ಗಳನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ ಏಕೆಂದರೆ ಇದು ಮ್ಯಾಜಿಸ್ಕ್‌ನೊಂದಿಗೆ ಸಂಘರ್ಷವಾಗಿದೆ! + ಚೇಂಜ್ಲಾಗ್ + Permissive + ಡೀಫಾಲ್ಟ್ ಆಗಿ Umount ಮಾಡ್ಯೂಲ್ + ಈ ಆಯ್ಕೆಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸುವುದರಿಂದ ಈ ಅಪ್ಲಿಕೇಶನ್‌ಗಾಗಿ ಮಾಡ್ಯೂಲ್‌ಗಳ ಮೂಲಕ ಯಾವುದೇ ಮಾರ್ಪಡಿಸಿದ ಫೈಲ್‌ಗಳನ್ನು ಮರುಸ್ಥಾಪಿಸಲು KernelSU ಗೆ ಅನುಮತಿಸುತ್ತದೆ. + ವೈಯಕ್ತಿಕ + ಮಾಡ್ಯೂಲ್ ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲು ವಿಫಲವಾಗಿದೆ: %s + ಫೋರ್ಸ್ ಸ್ಟಾಪ್ + EDL ಗೆ ರೀಬೂಟ್ + ಸಾಮರ್ಥ್ಯಗಳು + ಸೂಪರ್‌ಯೂಸರ್‌ಗಳು: %d + ಡೌನ್‌ಲೋಡ್ ಮಾಡುವುದನ್ನು ಪ್ರಾರಂಭಿಸಿ: %s + ಜಾಗತಿಕ + ಅಪ್ಲಿಕೇಶನ್ ಪ್ರೊಫೈಲ್‌ಗಳಲ್ಲಿ \"Umount ಮಾಡ್ಯೂಲ್\" ಗಾಗಿ ಜಾಗತಿಕ ಡೀಫಾಲ್ಟ್ ಮೌಲ್ಯ. ಸಕ್ರಿಯಗೊಳಿಸಿದರೆ, ಪ್ರೊಫೈಲ್ ಸೆಟ್ ಅನ್ನು ಹೊಂದಿರದ ಅಪ್ಲಿಕೇಶನ್‌ಗಳಿಗಾಗಿ ಸಿಸ್ಟಮ್‌ಗೆ ಎಲ್ಲಾ ಮಾಡ್ಯೂಲ್ ಮಾರ್ಪಾಡುಗಳನ್ನು ಇದು ತೆಗೆದುಹಾಕುತ್ತದೆ. + ಮಾಡ್ಯೂಲ್‌ಗಳು: %d + SELinux ಸಂದರ್ಭ + ಡೀಫಾಲ್ಟ್ + ಲಾಂಚ್ + ಸುರಕ್ಷಿತ ಮೋಡ್ + ಪ್ರಸ್ತುತ KernelSU ಆವೃತ್ತಿ %d ಮ್ಯಾನೇಜರ್ ಸರಿಯಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸಲು ತುಂಬಾ ಕಡಿಮೆಯಾಗಿದೆ. ದಯವಿಟ್ಟು ಆವೃತ್ತಿ %d ಅಥವಾ ಹೆಚ್ಚಿನದಕ್ಕೆ ಅಪ್‌ಗ್ರೇಡ್ ಮಾಡಿ! + ಸಾಫ್ಟ್ ರೀಬೂಟ್ + ಪ್ರೊಫೈಲ್ ಹೆಸರು + KernelSU ಉಚಿತ ಮತ್ತು ಮುಕ್ತ ಮೂಲವಾಗಿದೆ ಮತ್ತು ಯಾವಾಗಲೂ ಇರುತ್ತದೆ. ಆದಾಗ್ಯೂ ನೀವು ದೇಣಿಗೆ ನೀಡುವ ಮೂಲಕ ನೀವು ಕಾಳಜಿ ವಹಿಸುತ್ತೀರಿ ಎಂದು ನಮಗೆ ತೋರಿಸಬಹುದು. + ಅನ್‌ಇನ್‌ಸ್ಟಾಲ್ + ಮೌಂಟ್ ನೇಮ್‌ಸ್ಪೇಸ್ + ನಿಯಮಗಳು + ಗುಂಪುಗಳು + ಓವರ್‌ಲೇಫ್‌ಗಳು ಲಭ್ಯವಿಲ್ಲ, ಮಾಡ್ಯೂಲ್ ಕಾರ್ಯನಿರ್ವಹಿಸುವುದಿಲ್ಲ! + ಮಾಡ್ಯೂಲ್ + ಲೇಖಕ + ಬಗ್ಗೆ + ವರ್ಷನ್: %d + ರೀಬೂಟ್ + KernelSU ಈಗ GKI ಕರ್ನಲ್‌ಗಳನ್ನು ಮಾತ್ರ ಬೆಂಬಲಿಸುತ್ತದೆ + SELinux ಸ್ಥಿತಿ + ಸಿಸ್ಟಮ್ ಅಪ್ಲಿಕೇಶನ್‌ಗಳನ್ನು ಮರೆಮಾಡಿ + ವರ್ಷನ್ + ಬೆಂಬಲಿತವಾಗಿಲ್ಲ + ಡೊಮೇನ್ + ಮನೆ + ಕಸ್ಟಮ್ + ಟೆಂಪ್ಲೇಟ್ + ರಿಫ್ರೆಶ್ + ಮಾಡ್ಯೂಲ್ ಅನ್ನು ಡೌನ್‌ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ: %s + KernelSU ಕಲಿಯಿರಿ + %s ಮಾಡ್ಯೂಲ್ ಅನ್ನು ಅಸ್ಥಾಪಿಸಲು ನೀವು ಖಚಿತವಾಗಿ ಬಯಸುವಿರಾ\? + ಅನ್‌ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ: %s + ಸೂಪರ್ಯೂಸರ್ + ಕೆಲಸ ಮಾಡುತ್ತಿದೆ + ಮಾಡ್ಯೂಲ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲು ವಿಫಲವಾಗಿದೆ: %s + ಮಾಡ್ಯೂಲ್ ಅನ್ನು ಸ್ಥಾಪಿಸಲಾಗಿಲ್ಲ + ಕರ್ನಲ್ + %s ಗಾಗಿ ಅಪ್ಲಿಕೇಶನ್ ಪ್ರೊಫೈಲ್ ಅನ್ನು ನವೀಕರಿಸಲು ವಿಫಲವಾಗಿದೆ + https://kernelsu.org/guide/what-is-kernelsu.html + %1$s ನಲ್ಲಿ ಮೂಲ ಕೋಡ್ ಅನ್ನು ವೀಕ್ಷಿಸಿ
ನಮ್ಮ %2$s ಚಾನಲ್‌ಗೆ ಸೇರಿ
+ ಮ್ಯಾನೇಜರ್ ವರ್ಷನ್ + ಹೊಸ ಆವೃತ್ತಿ: %s ಲಭ್ಯವಿದೆ, ಅಪ್‌ಗ್ರೇಡ್ ಮಾಡಲು ಕ್ಲಿಕ್ ಮಾಡಿ + ಲಾಗ್ಗಳನ್ನು ಉಳಿಸಿ +
\ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/values-ko/strings.xml b/KernelSU/manager/app/src/main/res/values-ko/strings.xml new file mode 100644 index 000000000000..7c29cc02f324 --- /dev/null +++ b/KernelSU/manager/app/src/main/res/values-ko/strings.xml @@ -0,0 +1,82 @@ + + + 홈 + 설치되지 않음 + 이 곳을 눌러 설치하기 + 정상 작동 중 + 버전: %d + 루트 권한: %d개 + 설치된 모듈: %d개 + 지원되지 않음 + KernelSU는 현재 GKI 커널만 지원합니다 + 커널 + 매니저 버전 + 빌드 정보 + SELinux 상태 + 비활성화됨 + 적용 + 허용 + 알 수 없음 + 슈퍼유저 + 모듈 활성화 실패: %s + 모듈 비활성화 실패: %s + 설치된 모듈 없음 + 모듈 + 삭제 + 설치 + 설치 + 다시 시작 + 설정 + 빠른 다시 시작 + 복구 모드로 다시 시작 + 부트로더로 다시 시작 + 다운로드 모드로 다시 시작 + EDL 모드로 다시 시작 + 정보 + %s 모듈을 삭제할까요? + %s 모듈 삭제됨 + 모듈 삭제 실패: %s + 버전 + 제작자 + overlayfs 사용 불가, 모듈을 사용할 수 없습니다! + 새로고침 + 시스템 앱 보이기 + 시스템 앱 숨기기 + 로그 보내기 + 안전 모드 + 다시 시작하여 변경 사항 적용 + Magisk와의 충돌로 인해 모듈을 사용할 수 없습니다! + KernelSU 알아보기 + KernelSU 설치 방법과 모듈 사용 방법을 확인합니다 + 지원이 필요합니다 + KernelSU는 지금도, 앞으로도 항상 무료이며 오픈 소스로 유지됩니다. 기부를 통해 여러분의 관심을 보여주세요. + %2$s 채널 참가하기]]> + https://kernelsu.org/guide/what-is-kernelsu.html + 앱 프로필 메뉴의 \"모듈 사용 해제\" 설정에 대한 전역 기본값을 설정합니다. 활성화 시, 개별 프로필이 설정되지 않은 앱은 시스템에 대한 모듈의 모든 수정사항이 적용되지 않습니다. + 다시 시작 + 규칙 + 새 버전: %s 사용 가능, 여기를 눌러서 받기 + 다운로드 시작: %s + 강제 중지 + 기본값 + 사용자 지정 + 템플릿 + 프로필 이름 + 이름 공간 마운트 + 상속 + 전역 + 개별 + 사용자 그룹 + 모듈 사용 해제 + SELinux 컨텍스트 + 권한 + %s에 대한 앱 프로필 업데이트 실패 + 기본값으로 모듈 사용 해제 + 이 옵션이 활성화되면, KernelSU는 이 애플리케이션에 대한 모듈의 모든 수정사항을 복구합니다. + 업데이트 + 모듈 받는 중: %s + 도메인 + 실행 + 다음 앱에 대한 SELinux 규칙 업데이트 실패: %s + 로그 저장 + \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/values-lt/strings.xml b/KernelSU/manager/app/src/main/res/values-lt/strings.xml new file mode 100644 index 000000000000..cba5f5b18c25 --- /dev/null +++ b/KernelSU/manager/app/src/main/res/values-lt/strings.xml @@ -0,0 +1,84 @@ + + + Pirštų atspaudas + Išjungta + Priverstinas + Nežinomas + Supernaudotojai + Nepavyko įjungti modulio: %s + Nepavyko išjungti modulio: %s + Leistinas + Nėra įdiegtų modulių + Moduliai + Perkrovimas neišjungus + Perkrauti į atkūrimo rėžimą + Perkrauti į įkrovos tvarkyklę + Perkrauti į atsisiuntimo rėžimą + Apie + Nepavyko išdiegti: %s + %s išdiegtas + Versija + Autorius + overlayfs nepasiekiamas, modulis negali veikti! + Rodyti sistemos programas + Slėpti sistemos programas + Siųsti žurnalą + Paleisti iš naujo + Atšviežinti + Saugus rėžimas + Paleiskite iš naujo, kad įsigaliotų + Moduliai yra išjungti, nes jie konfliktuoja su Magisk\'s! + https://kernelsu.org/guide/what-is-kernelsu.html + Sužinokite apie KernelSU + Sužinokite, kaip įdiegti KernelSU ir naudoti modulius + Peržiūrėkite šaltinio kodą %1$s
Prisijunkite prie mūsų %2$s kanalo
+ Numatytas + Šablonas + Pasirinktinis + Profilio pavadinimas + Prijungti vardų erdvę + Paveldėtas + Globalus + Individualus + Grupės + Galimybės + SELinux kontekstas + Atjungti modulius + Atjungti modulius pagal numatytuosius parametrus + Įjungus šią parinktį, KernelSU galės atkurti visus modulių modifikuotus failus šiai programai. + Domenas + Taisyklės + Atnaujinti + Atsisiunčiamas modulis: %s + Pradedamas atsisiuntimas: %s + Nauja versija: %s pasiekiama, spustelėkite norėdami atsinaujinti + Paleisti + Priversti sustoti + Perkrauti + Nepavyko atnaujinti SELinux taisyklių: %s + Namai + Neįdiegta + KernelSU dabar palaiko tik GKI branduolius + Spustelėkite norėdami įdiegti + Veikia + Supernaudotojai: %d + Versija: %d + Nepalaikoma + Moduliai: %d + Tvarkyklės versija + Branduolys + SELinux statusas + Išdiegti + Įdiegti + Įdiegti + Parametrai + Perkrauti į EDL + Ar tikrai norite išdiegti modulį %s\? + Paremkite mus + KernelSU yra ir visada bus nemokamas ir atvirojo kodo. Tačiau galite parodyti, kad jums rūpi, paaukodami mums. + Nepavyko atnaujinti programos profilio %s + Visuotinė numatytoji „Modulių atjungimo“ reikšmė programų profiliuose. Jei įjungta, ji pašalins visus sistemos modulio pakeitimus programoms, kurios neturi profilio. + Keitimų žurnalas + Ši KernelSU versija %d yra per žema, kad šis vadybininkas galėtų tinkamai funkcionuoti. Prašome atsinaujinti į versiją %d ar aukščiau! + Saglabāt Žurnālus +
\ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/values-lv/strings.xml b/KernelSU/manager/app/src/main/res/values-lv/strings.xml new file mode 100644 index 000000000000..c264b76a650d --- /dev/null +++ b/KernelSU/manager/app/src/main/res/values-lv/strings.xml @@ -0,0 +1,134 @@ + + + Iespējojot šo opciju, KernelSU varēs atjaunot visus moduļos šīs lietojumprogrammas modificētos failus. + Neizdevās atjaunināt SELinux noteikumus: %s + Pārvaldiet vietējo un tiešsaistes lietotņu profila veidni + Nederīgs veidnes id + veidnes id jau pastāv! + Eksportēt starpliktuvē + Importēt no starpliktuves + Importēts veiksmīgi + Sinhronizēt tiešsaistes veidnes + Sākums + Nav ieinstalēts + Noklikšķiniet, lai instalētu + Darbojas + Versija: %d + Superlietotāji: %d + Moduļi: %d + Neatbalstīts + KernelSU atbalsta tikai GKI kodolus + Kodols + Pārvaldnieka versija + Pirkstu nospiedums + SELinux statuss + Izpildīšana + Atspējots + Nezināms + SuperLietotājs + Neizdevās atspējot moduli: %s + Nav instalētu moduļu + Moduļi + Atinstalēt + Instalēt + Restartēt + Iestatījumi + Ātri restartēt + Restartēt uz Bootloaderu + Restartēt uz Recovery + Restartēt uz Download + Restartēt uz EDL + Par + %s ir atinstalēts + Neizdevās atinstalēt: %s + Autors + Atjaunot + Rādīt sistēmas lietotnes + Slēpt sistēmas lietotnes + Ziņot žurnālu + Restartējiet, lai stātos spēkā + Uzzināt par KernelSU + https://kernelsu.org/guide/what-is-kernelsu.html + Uzzināt, kā instalēt KernelSU un izmantot moduļus + Atbalsti mūs + Skatiet avota kodu vietnē %1$s
Pievienojies mūsu %2$s kanālam
+ Noklusējums + Veidne + Pielāgots + Profila vārds + Mount nosaukumvieta + Individuāls + Iespējas + SELinux konteksts + Atvienot moduļus + Neizdevās atjaunināt lietotnes profilu %s + Pēc noklusējuma atvienot moduļus + Globālā noklusējuma vērtība vienumam “Atvienot moduļus” lietotņu profilos. Ja tas ir iespējots, lietojumprogrammām, kurām nav iestatīts profils, tiks noņemtas visas sistēmas moduļu modifikācijas. + Domēns + Noteikumi + Atjaunināt + Lejupielādē moduli: %s + Sākt lejupielādi: %s + Jaunā versija: %s ir pieejama, noklikšķiniet, lai atjauninātu + Palaist + Piespiedu apstāšana + Restartēt aplikāciju + Izmaiņu žurnāls + Lietotnes profila veidne + Izveidot veidni + Rediģēt veidni + id + Vārds + Apraksts + Saglabāt + Dzēst + Skatīt veidni + tikai lasīt + Importēt/Eksportēt + Nevar atrast vietējo eksportējamo veidni! + Neizdevās saglabāt veidni + Starpliktuve ir tukša! + Izmaiņu žurnāla iegūšana neizdevās: %s + Visatļautība + Neizdevās iespējot moduli: %s + Instalēt + Vai tiešām vēlaties atinstalēt moduli %s? + Versija + overlayfs nav pieejams, modulis nevar darboties! + Drošais režīms + Moduļi ir atspējoti, jo tie konfliktē ar Magisk! + KernelSU ir un vienmēr būs bezmaksas un atvērtā koda. Tomēr jūs varat parādīt mums, ka jums rūp, veicot ziedojumu. + Grupas + Globāli + Pašreizējā KernelSU versija %d ir pārāk zema, lai pārvaldnieks darbotos pareizi. Lūdzu, atjauniniet uz versiju %d vai jaunāku! + Iespējot WebView atkļūdošanu + Ieteicams %1$s nodalījuma attēls + Nākamais + Mantots + Izvēlieties failu + Instalēt neaktīvajā slotā (pēc OTA) + Pēc restartēšanas jūsu ierīce tiks **PIESPIESTI** palaista pašreizējā neaktīvajā slotā! +\nIzmantojiet šo opciju tikai pēc OTA pabeigšanas +\nTurpināt? + Tiešā instalēšana (Ieteicams) + Atinstalēt + Pagaidu atinstalēšana + Atjaunot oriģinālo attēlu + Īslaicīgi atinstalēt KernelSU, pēc nākamās restartēšanas atjaunot sākotnējo stāvokli. + KernelSU (saknes un visu moduļu) pilnīga atinstalēšana. + Atjaunojot rūpnīcas attēlu (ja ir dublējums), ko parasti izmanto pirms OTA; ja nepieciešams atinstalēt KernelSU, lūdzu, izmantojiet \"Neatgriezeniski atinstalēt\". + Izvēlētais lkm: %s + Neizdevās piešķirt sakni! + Atvērt + Pārbaudīt atjauninājumus + Automātiski pārbaudīt atjauninājumus atverot aplikāciju + Var izmantot WebUI atkļūdošanai, lūdzu, izmantot tikai tad, kad tas ir nepieciešams. + Izvēlieties KMI + Neatgriezeniski atinstalēt + Instalē + Instalēts veiksmīgi + Instalēšana neizdevās + Samazināt reto attēlu + Mainīt retā attēla izmēru, kurā atrodas modulis, līdz tā faktiskajam izmēram. Ņemiet vērā, ka tas var izraisīt moduļa neparastu darbību, tāpēc, lūdzu, izmantojiet tikai nepieciešamības gadījumā (piemēram, dublēšanai) + Išsaugoti Žurnalus +
\ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/values-mr/strings.xml b/KernelSU/manager/app/src/main/res/values-mr/strings.xml new file mode 100644 index 000000000000..eaaf2a255b44 --- /dev/null +++ b/KernelSU/manager/app/src/main/res/values-mr/strings.xml @@ -0,0 +1,82 @@ + + + इंस्टॉल केले नाही + होम + इंस्टॉल साठी क्लिक करा + कार्यरत + आवृत्ती: %d + मॉड्यूल्स: %d + सुपरयूझर: %d + असमर्थित + KernelSU आता फक्त GKI कर्नलचे समर्थन करते + कर्नल + फिंगरप्रिंट + व्यवस्थापक आवृत्ती + SELinux स्थिती + अक्षम + एनफोर्सिंग + परमिसिव + अज्ञात + स्थापित करा + कोणतेही मॉड्यूल स्थापित केलेले नाही + रीबूट करा + सुपरयुझर + मॉड्यूल सक्षम करण्यात अयशस्वी: %s + विस्थापित करा + मॉड्यूल अक्षम करण्यात अयशस्वी: %s + मॉड्यूल + स्थापित करा + सेटिंग्ज + सॉफ्ट रीबूट + बद्दल + EDL वर रीबूट करा + तुमची खात्री आहे की तुम्ही मॉड्यूल %s विस्थापित करू इच्छिता\? + विस्थापित करण्यात अयशस्वी: %s + overlayfs उपलब्ध नाही, मॉड्यूल काम करू शकत नाही! + सिस्टम अॅप्स दाखवा + बूटलोडरवर रीबूट करा + %s विस्थापित + आवृत्ती + लेखक + रिफ्रेश करा + रिकवरी मध्ये रिबुट करा + डाउनलोड करण्यासाठी रीबूट करा + लॉग पाठवा + सुरक्षित मोड + सिस्टम अॅप्स लपवा + प्रभावी होण्यासाठी रीबूट करा + KernelSU शिका + https://kernelsu.org/guide/what-is-kernelsu.html + मॉड्यूल अक्षम केले आहेत कारण ते Magisk च्या विरोधाभास आहे! + KernelSU कसे स्थापित करायचे आणि मॉड्यूल कसे वापरायचे ते शिका + KernelSU विनामूल्य आणि मुक्त स्रोत आहे, आणि नेहमीच असेल. तथापि, देणगी देऊन तुम्ही आम्हाला दाखवू शकता की तुमची काळजी आहे. + आम्हाला पाठिंबा द्या + कस्टम + माउंट नेमस्पेस + डीफॉल्ट + साचा + वैयक्तिक + क्षमता + %1$s वर स्रोत कोड पहा
आमच्या %2$s चॅनेलमध्ये सामील व्हा
+ प्रोफाइल नाव + इनहेरीटेड + जागतिक + गट + SELinux संदर्भ + उमाउंट मॉड्यूल्स + %s साठी अॅप प्रोफाइल अपडेट करण्यात अयशस्वी + डीफॉल्टनुसार मॉड्यूल्स उमाउंट करा + अॅप प्रोफाइलमधील \"उमाउंट मॉड्यूल्स\" साठी जागतिक डीफॉल्ट मूल्य. सक्षम असल्यास, ते प्रोफाइल सेट नसलेल्या ॲप्लिकेशनचे सिस्टममधील सर्व मॉड्यूल बदल काढून टाकेल. + हा पर्याय सक्षम केल्याने KernelSU ला या ऍप्लिकेशनसाठी मॉड्यूल्सद्वारे कोणत्याही सुधारित फाइल्स पुनर्संचयित करण्यास अनुमती मिळेल. + यासाठी SELinux नियम अपडेट करण्यात अयशस्वी: %s + नियम + अपडेट करा + डोमेन + मॉड्यूल डाउनलोड करत आहे: %s + डाउनलोड करणे सुरू करा: %s + नवीन आवृत्ती: %s उपलब्ध आहे, डाउनलोड करण्यासाठी क्लिक करा + सक्तीने थांबा + लाँच करा + पुन्हा सुरू करा + लॉग जतन करा +
\ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/values-ms/strings.xml b/KernelSU/manager/app/src/main/res/values-ms/strings.xml new file mode 100644 index 000000000000..46c1539c7ed0 --- /dev/null +++ b/KernelSU/manager/app/src/main/res/values-ms/strings.xml @@ -0,0 +1,38 @@ + + + Tidak Diketahui + Lumpuhkan + Permisif + Mulakan semula ke Download + Modul tidak berjaya Diaktifkan:%s + Mulakan semula ke EDL + Superusers%d + Modul%d + Enforcing + Cap Jari + Mulakan semula ke Recovery + Soft reboot + Padam + Pasang + Tekan untuk memasang + Modul + Tentang + Versi%d + Mulakan semula + KernelSU ketika ini hanya menyokong kernel GKI + Status SELinux + Tidak Disokong + Layar Utama + Apakah anda pasti ingin membuang modul %s\? + SuperUser + Tetapan + Berjalan + Gagal mematikan modul:%s + Tiada modul dipasang + Pasang + Kernel + Tidak terpasang + Mulakan semula ke bootloader + Versi Manager + Simpan Log + \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/values-night-v27/themes.xml b/KernelSU/manager/app/src/main/res/values-night-v27/themes.xml new file mode 100644 index 000000000000..10a773b16f28 --- /dev/null +++ b/KernelSU/manager/app/src/main/res/values-night-v27/themes.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/values-night/themes.xml b/KernelSU/manager/app/src/main/res/values-night/themes.xml new file mode 100644 index 000000000000..91abf657bfdc --- /dev/null +++ b/KernelSU/manager/app/src/main/res/values-night/themes.xml @@ -0,0 +1,10 @@ + + + + + \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/values-nl/strings.xml b/KernelSU/manager/app/src/main/res/values-nl/strings.xml new file mode 100644 index 000000000000..bebf37890eb2 --- /dev/null +++ b/KernelSU/manager/app/src/main/res/values-nl/strings.xml @@ -0,0 +1,129 @@ + + + Home + Niet geïnstalleerd + Klik om te installeren + Werkend + Versie: %d + Supergebruikers: %d + Modules: %d + Niet ondersteund + KernelSU ondersteunt alleen GKI kernels + Kernel + Manager Versie + Fingerprint + SELinux status + Uitgeschakeld + Afgedwongen + Permissief + Niet gekend + SupergeBruiker + Mislukt om module in te schakelen: %s + Mislukt om module uit te schakelen: %s + Geen geïnstalleerde modules + Module + Verwijderen + Installeren + Installeren + Herstart + Instellingen + Soft herstart + Herstart naar Recovery + Herstart naar Bootloader + Herstart om te downloaden + Herstart naar EDL + Over + Zeker van het verwijderen van module %s? + %s is verwijderd + Mislukt om te verwijderen: %s + Versie + Auteur + overlayfs is niet beschikbaar, module kan niet werken! + Vernieuwen + Toon systeem apps + Verberg systeem apps + Rapport Log + Safe mode + Herstart om effect te hebben + Modules zijn uitgeschakeld omdat ze in conflict zijn met magisk! + Leer KernelSU + https://kernelsu.org/guide/what-is-kernelsu.html + Leer hoe KernelSU te installeren en modules te gebruiken + Ondersteun ons + KernelSU is, en zal altijd, vrij en open source zijn. Je kan altijd je appreciatie tonen met een donatie. + Vervoeg ons %2$s kanaal]]> + App profiel + Standaard + Sjabloon + Aangepast + Profiel naam + Koppel naamruimte + Overgenomen + Globaal + Individuëel + Groepen + Mogelijkheden + SELinux context + Ontkoppel modules + Mislukt om App Profiel te updaten voor %s + Ontkoppel standaard de modules + De globale standaard waarde voor \"Ontkoppel modules\" in App Profielen. Indien geactiveerd, zal het alle module wijzigingen tot het systeem verwijderen voor applicaties die geen Profiel ingesteld hebben. + Met deze optie ingeschakeld zal KernelSU toelaten om alle gewijzigde bestanden door de modules voor deze applicatie te herstellen. + Domein + Regels + Update + Downloaden van module: %s + Nieuwe versie: %s is beschikbaar,klik om te upgraden + Start + Forceer Stop + Herstart + Begin met downloaden: %s + Kan SELinux-regels niet bijwerken voor: %s + De huidige KernelSU-versie %d is te laag om de manager correct te laten functioneren. Upgrade naar versie %d of hoger! + wijzigings logboek + App-profiel Sjabloon + Maken Sjabloon + Bewerkin Sjabloon + id + Ongeldige sjabloon id + Naam + Redde + Bekijken Sjabloon + Beschrijving + Beheer lokale en online sjabloon van app-profiel + Verwijderen + alleen lezen + sjabloon id bestaat al! + Synchroniseer online-sjablonen + Mislukt naar opslaan sjabloon + Klembord is leeg! + Importeren/Exporteren + Importeren vanaf klembord + Ophalen van wijzigingslogboek mislukt: %s + Exporteren naar klembord + Controleer update + Schakel WebView-foutopsporing + Kan worden gebruikt om WebUI te debuggen. Schakel dit alleen in als dat nodig is. + Kan geen lokale sjabloon vinden om te exporteren! + Succesvol geïmporteerd + Open + Controleer automatisch op updates bij het openen van de app + Directe installatie (aanbevolen) + Selecteer een bestand + Kan geen root verlenen! + Minimaliseer schaarse afbeeldingen + Wijzig het formaat van de beperkte afbeelding waar de module zich bevindt naar de werkelijke grootte. Houd er rekening mee dat dit ervoor kan zorgen dat de module abnormaal werkt, dus gebruik deze alleen wanneer dit nodig is (zoals voor back-up) + %1$s partitie-image wordt aanbevolen + Naast + Uw apparaat wordt **GEFORCEERD** om na een herstart op te starten naar het huidige inactieve slot! +\nGebruik deze optie alleen nadat OTA is voltooid. +\nDoorgaan? + Installeren in inactief slot (na OTA) + KMI selecteren + Desinstalleren + Tijdelijk verwijderen + Permanent verwijderen + Herstel stockafbeelding + Verwijder KernelSU tijdelijk en herstel het naar de oorspronkelijke staat na de volgende herstart. + Logboeken Opslaan + \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/values-pl/strings.xml b/KernelSU/manager/app/src/main/res/values-pl/strings.xml new file mode 100644 index 000000000000..b4fe83f3dc8f --- /dev/null +++ b/KernelSU/manager/app/src/main/res/values-pl/strings.xml @@ -0,0 +1,136 @@ + + + KernelSU + Strona główna + Nie zainstalowano + Kliknij, aby zainstalować + Działa + Wersja: %d + Superużytkownicy: %d + Moduły: %d + Nieobsługiwany + KernelSU obsługuje obecnie tylko jądra GKI + Jądro + Wersja menedżera + Odcisk + Status SELinux + Wyłączony + Enforcing + Dozwolony + Nieznany + Superużytkownik + Nie udało się włączyć modułu: %s + Nie udało się wyłączyć modułu: %s + Brak zainstalowanych modułów + Moduły + Odinstaluj + Instaluj + Instaluj + Uruchom ponownie + Ustawienia + Miękki restart + Restart do trybu Recovery + Restart do trybu Bootloader + Restart do trybu Download + Restart do trybu EDL + Informacje + Czy na pewno chcesz odinstalować moduł %s? + Odinstalowano %s + Nie udało się odinstalować:: %s + Wersja + Autor + overlayfs jest niedostępny, moduł nie zadziała! + Odśwież + Pokaż aplikacje systemowe + Ukryj aplikacje systemowe + Raportuj log + Tryb bezpieczny + Uruchom ponownie, aby zastosować zmiany + Moduły są wyłączone, ponieważ są w konflikcie z modułami Magiska! + Poznaj KernelSU + https://kernelsu.org/guide/what-is-kernelsu.html + Dowiedz się jak zainstalować KernelSU i jak korzystać z modułów + Wesprzyj nas + KernelSU jest i zawsze będzie darmowy oraz otwarty. Niemniej jednak możesz nam pokazać, że Ci zależy, wysyłając darowiznę. + Dołącz do kanału %2$s]]> + Profil aplikacji + Domyślny + Szablon + Własny + Nazwa profilu + Przestrzeń nazw montowania + Odziedziczona + Globalna + Indywidualna + Grupy + Uprawnienia + Kontekst SELinux + Odmontuj moduły + Nie udało się zaktualizować profilu aplikacji dla %s + Domyślnie odmontuj moduły + Globalna wartość domyślna opcji \"Odmontuj moduły\" w profilach aplikacji. Jeśli jest włączona, wycofuje wszystkie modyfikacje dokonane przez moduły dla aplikacji, które nie mają ustawionego profilu. + Włączenie tej opcji umożliwi KernelSU przywrócenie wszelkich zmodyfikowanych plików przez moduły dla tej aplikacji. + Domena + Reguły + Zaktualizuj + Pobieranie modułu: %s + Rozpocznij pobieranie: %s + Nowa wersja: %s jest dostępna. Kliknij, aby zaktualizować + Uruchom + Wymuś zatrzymanie + Restartuj + Nie udało się zaktualizować reguł SELinux dla: %s + Obecna wersja KernelSU %d jest zbyt stara, aby menedżer działał poprawnie. Prosimy o aktualizację do wersji %d lub nowszej! + Dziennik zmian + Włącz debugowanie WebView + Może być użyte do debugowania WebUI. Włącz tylko w razie potrzeby. + Obraz partycji %1$s jest zalecany + Wybierz KMI + Dalej + Instalacja bezpośrednia (zalecane) + Wybierz plik + Zainstaluj do nieaktywnego slotu (po aktualizcji OTA) + Po ponownym uruchomieniu Twoje urządzenie zostanie **ZMUSZONE** do uruchomia się z obecnie nieaktywnego slotu! +\nUżyj tej opcji dopiero po zakończeniu aktualizacji OTA. +\nCzy chcesz kontynuować? + Stwórz szablon + Edytuj szablon + Nazwa + Opis + Zapisz + Usuń + tylko do odczytu + Importuj/Eksportuj + Importuj ze schowka + Eksportuj do schowka + Nie można znaleźć lokalnego szablonu do eksportu! + Zaimportowano pomyślnie + Nie udało się zapisać szablonu + Schowek jest pusty! + Zarządzaj lokalnym i internetowym szablonem profilu aplikacji + Synchronizuj internetowe szablony + Zobacz szablon + Błędny identyfikator szablonu + Szablon profilu aplikacji + Identyfikator + Szablon o takim identyfikatorze już istnieje! + Nie udało się przyznać roota! + Otwórz + Pobranie dziennika zmian nie powiodło się: %s + Wyszukaj aktualizacje + Wyszukuj aktualizacje automatycznie przy otwieraniu aplikacji + Minimalizuj rozrzedzony (sparse) obraz + Zmienia rozmiar obrazu rozrzedzonego(sparse), w którym znajduje się moduł, do jego rzeczywistego rozmiaru. Należy pamiętać, że może to spowodować nieprawidłowe działanie modułu, więc należy go używać tylko wtedy, gdy jest to konieczne (np. do tworzenia kopii zapasowych) + Odinstaluj zupełnie + Przywróć obraz fabryczny + Odinstaluj tymczasowo + Odinstaluj + Tymczasowo odinstaluj KernelSU, przywróć do oryginalnego stanu po następnym ponownym uruchomieniu. + Całkowite i trwałe odinstalowanie KernelSU(Root i wszystkich modułów). + Przywróć obraz fabryczny (jeśli istnieje kopia zapasowa), zwykle używany przed OTA; jeśli chcesz odinstalować KernelSU, użyj opcji \"Odinstaluj zupełnie\". + Flashowanie + Flashowanie ukończone pomyślnie + Flashowanie nieudane + Wybrano lkm: %s + Zapisz Dzienniki + \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/values-pt-rBR/strings.xml b/KernelSU/manager/app/src/main/res/values-pt-rBR/strings.xml new file mode 100644 index 000000000000..f092a45128fd --- /dev/null +++ b/KernelSU/manager/app/src/main/res/values-pt-rBR/strings.xml @@ -0,0 +1,135 @@ + + + Início + Não instalado + Clique para instalar + Em execução + Versão: %d + SuperUsuários: %d + Módulos: %d + Sem suporte + KernelSU suporta apenas kernels GKI agora + Kernel + Versão do gerenciador + Impressão digital + Status do SELinux + Desativado + Impondo + Permissivo + Desconhecido + SuperUsuário + Falha ao ativar o módulo %s + Falha ao desativar o módulo %s + Nenhum módulo instalado + Módulo + Desinstalar + Instalar + Instalar + Reiniciar + Configurações + Reinicialização suave + Reiniciar em modo Recovery + Reiniciar em modo Bootloader + Reiniciar em modo Download + Reiniciar em modo EDL + Sobre + Tem certeza que deseja desinstalar o módulo %s? + %s desinstalado + Falha ao desinstalar %s + Versão + Autor + Os módulos estão indisponíveis porque OverlayFS está desabilitado pelo kernel! + Atualizar + Mostrar apps do sistema + Ocultar apps do sistema + Reportar registro + Modo de segurança + Reinicie para entrar em vigor + Os módulos estão indisponíveis devido a um conflito com Magisk! + Saiba mais sobre o KernelSU + https://kernelsu.org/pt_BR/guide/what-is-kernelsu.html + Saiba como instalar o KernelSU e usar os módulos + Apoie-nos + KernelSU sempre foi e sempre será, gratuito e de código aberto. No entanto, você pode nos ajudar enviando uma pequena doação. + Junte-se ao nosso canal do %2$s]]> + Perfil do Aplicativo + Padrão + Modelo + Personalizado + Nome do perfil + Montar namespace + Herdado + Global + Individual + Grupos + Capacidades + Contexto do SELinux + Desmontar módulos + Falha ao atualizar o Perfil do Aplicativo para %s + Desmontar módulos por padrão + O valor padrão global para \"Desmontar módulos\" em Perfil do Aplicativo. Se ativado, ele removerá todas as modificações do módulo no sistema para apps que não possuem um perfil definido. + Ativar esta opção permitirá que o KernelSU restaure quaisquer arquivos modificados pelos módulos para este app. + Domínio + Regras + Atualizar + Baixando módulo %s + Começando a baixar %s + Nova versão %s está disponível, clique para atualizar. + Iniciar + Forçar parada + Reiniciar + Falha ao atualizar as regras do SELinux para: %s + A versão atual do KernelSU %d é muito baixa para o gerenciador funcionar corretamente. Por favor, atualize para a versão %d ou superior! + Registro de alterações + Importado com sucesso + Exportar para a área de transferência + Não foi possível encontrar o modelo local para exportar! + O ID do modelo já existe! + Importar da área de transferência + Falha ao buscar o registro de alterações: %s + Nome + ID do modelo inválido + Sincronizar modelos online + Criar modelo + Somente leitura + Importar/Exportar + Falha ao salvar o modelo + Editar modelo + ID + Modelo do Perfil do Aplicativo + Descrição + Salvar + Gerencie o modelo local e online do Perfil do Aplicativo + Excluir + A área de transferência está vazia! + Ver modelo + Verificar por atualização + Verifique automaticamente se há atualizações ao abrir o app + Falha ao conceder acesso root! + Abrir + Ativar depuração do WebView + Pode ser usado para depurar o WebUI. Por favor, ative somente quando necessário. + Selecione um arquivo + Instalação direta (recomendada) + Instalar no slot inativo (após o OTA) + Seu dispositivo será **FORÇADO** a inicializar no slot inativo atual após uma reinicialização! +\nSó use esta opção após a conclusão do OTA. +\nDeseja continuar? + Próximo + A imagem da partição %1$s é recomendada + Selecionar KMI + Minimizar imagem esparsa + Redimensione a imagem esparsa onde o módulo está localizado para seu tamanho real. Observe que isso pode fazer com que o módulo funcione de forma anormal, portanto, use-o somente quando necessário (como um backup). + Desinstalar + Desinstalar temporariamente + Desinstalar permanentemente + Restaurar imagem de fábrica + Restaure a imagem de fábrica (se existir um backup), geralmente usada antes do OTA. Se você precisar desinstalar o KernelSU, use \"Desinstalar permanentemente\". + Desinstale temporariamente o KernelSU e restaure ao estado original após a próxima reinicialização + Desinstale o KernelSU (Root e todos os módulos) completamente e permanentemente + LKM selecionado: %s + Flash falhou + Flashando + Flash bem-sucedido + Salvar Logs + \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/values-pt/strings.xml b/KernelSU/manager/app/src/main/res/values-pt/strings.xml new file mode 100644 index 000000000000..ea1547db49b6 --- /dev/null +++ b/KernelSU/manager/app/src/main/res/values-pt/strings.xml @@ -0,0 +1,83 @@ + + + Não instalado + Início + Clique para instalar + Funcionando + Super Usuário: %d + Módulos: %d + Versão: %d + Kernel + Instalar + Sem suporte + KernelSU suporta apenas kernels GKI agora + Status do SELinux + Versão do aplicativo + Falha ao desativar o módulo: %s + Impressão digital + Desabilitado + Impondo + Permissivo + Desconhecido + Super Usuário + Falha ao ativar o módulo: %s + Nenhum módulo instalado + Desinstalar + Modulos + Reiniciar + Instalar + Reinicialização Suave + Configurações + Reinicializar modo Bootloader + Reiniciar modo recuperação + Falha ao desinstalar: %s + Versão + Autor + Atualizar + Esconder apps do sistema + Reiniciar para baixar + Reiniciar em EDL + Tem certeza de que deseja desinstalar o módulo %s\? + Sobre + overlayfs não está disponível, o módulo não pode funcionar! + Enviar log + %s desinstalado + Mostrar aplicativos do sistema + Aprenda a instalar o KernelSU e usar os módulos + O KernelSU é, e sempre será, gratuito e de código aberto. No entanto, você pode nos mostrar que se importa fazendo uma doação. + Veja o código-fonte em %1$s
Junte-se ao nosso canal %2$s
+ Individual + Global + Herdado + Padrão + Modelo + Personalizado + Nome do perfil + Montar namespace + Modo de segurança + Reinicie para entrar em vigor + Aprender KernelSU + Os módulos estão desativados porque estão em conflito com os do Magisk! + Apoie-nos + Grupos + Capacidades + contexto SELinux + Domínio + Atualização + Desativar modulos + Falha ao atualizar o perfil do aplicativo para %s + Módulos desativados por padrão + O valor padrão global para \"Módulos Umount\" em Perfis de Aplicativos. Se ativado, removerá todas as modificações de módulo do sistema para aplicativos que não possuem um Perfil definido. + Regras + Ativar esta opção permitirá que o KernelSU restaure quaisquer arquivos modificados pelos módulos para este aplicativo. + Iniciar o download: %s + Baixando módulo: %s + Falha ao atualizar as regras do SELinux para: %s + https://kernelsu.org/guide/what-is-kernelsu.html + Reiniciar + Lançar + Forçar parada + Nova versão: %s está disponível, clique para baixar + A versão atual do KernelSU %d é muito baixa para o gerenciador funcionar corretamente. Atualize para a versão %d ou superior! + Salvar Registros +
\ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/values-ro/strings.xml b/KernelSU/manager/app/src/main/res/values-ro/strings.xml new file mode 100644 index 000000000000..fea3ffb6958d --- /dev/null +++ b/KernelSU/manager/app/src/main/res/values-ro/strings.xml @@ -0,0 +1,132 @@ + + + Acasă + Nu este instalat + Click pentru a instala + Funcționează + Versiune: %d + Super-utilizatori: %d + Module: %d + Necompatibil + KernelSU suportă doar nuclee GKI acum + Nucleu + Versiune Manager + Amprentă + Stare SELinux + Dezactivat + Obligatoriu + Permisiv + Necunoscut + Super-Utilizator + Activarea modulului %s a eșuat + Dezactivarea modulului %s a eșuat + Niciun modul instalat + Module + Dezinstalează + Instalează + Instalează + Repornește + Setări + Repornire rapidă + Repornire în Recuperare + Repornire în Bootloader + Repornire în Download + Repornire în EDL + Despre + Sigur dorești să dezinstalezi modulul %s? + %s dezinstalat + Dezinstalare eșuată: %s + Versiune + Autor + overlayfs nu este disponibil, modulul nu poate funcționa! + Reîmprospătează + Arată aplicațiile de sistem + Ascunde aplicațiile de sistem + Raportează jurnal + Mod sigur + Repornește pentru ca modificările să intre în vigoare + Modulele sunt dezactivate deoarece sunt în conflict cu cele ale Magisk-ului! + Află mai multe despre KernelSU + https://kernelsu.org/guide/what-is-kernelsu.html + Află cum să instalezi KernelSU și să utilizezi module + Suport + KernelSU este, și va fi întotdeauna, gratuit și cu codul sursă deschis. Cu toate acestea, ne poți arăta că îți pasă făcând o donație. + Alătură-te canalului nostru %2$s]]> + Implicit + Șablon + Personalizat + Nume profil + Montare spațiu de nume + Moștenit + Global + Individual + Grupuri + Capabilități + Context SELinux + Module u-montate + Nu s-a putut actualiza profilul aplicației pentru %s + U-montează modulele în mod implicit + Valoarea implicită globală pentru „Module u-montate” în Profilurile aplicațiilor. Dacă este activat, va elimina toate modificările modulelor aduse sistemului pentru aplicațiile care nu au un profil setat. + Activarea acestei opțiuni va permite KernelSU să restaureze orice fișiere modificate de către modulele pentru această aplicație. + Domeniu + Reguli + Actualizează + Se descarcă modulul: %s + Începe descărcarea: %s + Versiune nouă: %s este disponibilă, clic pentru a actualiza + Nu s-au reușit actualizările regulilor SELinux pentru: %s + Lansare + Oprire forțată + Repornește + Versiunea actuală a KernelSU %d este prea mică pentru ca managerul să funcționeze corect. Actualizează la versiunea %d sau o versiune superioară! + Jurnalul modificărilor + Importat cu succes + Export în clipboard + Nu există șabloane locale de exportat! + ID-ul șablonului există deja! + Import din clipboard + Preluarea jurnalului de modificări a eșuat: %s + Nume + ID șablon nevalid + Sincronizează șabloanele online + Creează un șablon + doar citire + Import/Export + Nu s-a salvat șablonul + Editează șablonul + ID + Șablon de profil al aplicației + Descriere + Salvează + Gestionează șablonul local și online al Profilului aplicației + Șterge + Clipboard-ul este gol! + Vizualizare șablon + Verifică actualizarea + Se verifică automat actualizările când deschizi aplicația + Activează depanarea WebView + Poate fi folosit pentru a depana WebUI, activează numai când este necesar. + Nu s-a acordat acces root! + Deschide + Se recomandă imaginea partiției %1$s + Înainte + Dispozitivul va fi **FORȚAT** să pornească în slot-ul inactiv curent după o repornire! +\nFolosește această opțiune numai după finisarea OTA. +\nContinui? + Selectează KMI + Instalare directă (recomandat) + Selectează un fișier + Instalează într-un slot inactiv (după OTA) + Dezinstalează + Restaurare imagine stoc + Dezinstalează temporar KernelSU, se revine la starea inițială după următoarea repornire. + Lkm selectat: %s + Dezinstalează temporar + Dezinstalează definitiv + Dezinstalare KernelSU (Root și toate modulele) complet și permanent. + Restaurează imaginea stoc din fabrică (dacă există o copie de rezervă), utilizată de obicei înainte de OTA; dacă trebuie să dezinstalezi KernelSU, utilizează „Dezinstalare permanentă”. + Instalare + Instalare reușită + Instalarea a eșuat + Salvează Jurnale + \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/values-ru/strings.xml b/KernelSU/manager/app/src/main/res/values-ru/strings.xml new file mode 100644 index 000000000000..91dd276ff0a5 --- /dev/null +++ b/KernelSU/manager/app/src/main/res/values-ru/strings.xml @@ -0,0 +1,138 @@ + + + Главная + Не установлен + Нажмите, чтобы установить + Работает + Версия: %d + Суперпользователи: %d + + Модули: %d + Не поддерживается + KernelSU поддерживает только GKI ядра + Ядро + Версия менеджера + Подпись + Состояние SELinux + Выключен + Принудительный + Разрешающий + Неизвестно + SU пользователь + + Не удалось включить модуль: %s + Не удалось отключить модуль: %s + Нет установленных модулей + Модули + Удалить + Установить + Установка + Перезагрузить + Настройки + Мягкая перезагрузка + Перезагрузить в Recovery + Перезагрузить в Bootloader + Перезагрузить в Download + Перезагрузить в EDL + О приложении + Вы уверены, что хотите удалить модуль %s? + %s удален + Не удалось удалить: %s + Версия + Автор + overlayfs недоступен, модуль не может работать! + Обновить страницу + Показать системные приложения + Скрыть системные приложения + Отправить лог + Безопасный режим + Перезагрузите, чтобы изменения вступили в силу + Модули отключены, потому что они конфликтуют с Magisk! + Узнайте о KernelSU + https://kernelsu.org/ru_RU/guide/what-is-kernelsu.html + Узнайте, как установить KernelSU и использовать модули + Поддержите нас + KernelSU был и всегда будет бесплатным и открытым проектом. Однако Вы всегда можете поддержать нас, отправив небольшое пожертвование. + Присоединяйтесь к нашему %2$s каналу]]> + App Profile + + По умолчанию + Шаблон + Пользовательский + Название профиля + Монтировать пространство имен + Унаследованный + Глобальный + Индивидуальный + Группы + Возможности + Контекст SELinux + Размонтировать модули + Не удалось обновить App Profile для %s + Размонтировать модули по умолчанию + Глобальное значение по умолчанию для \"Размонтировать модули\" в App Profile. При включении будут удалены все модификации модулей в системе для приложений, у которых не задан Profile. + Включение этой опции позволит KernelSU восстанавливать любые измененные модулями файлы для данного приложения. + Домен + Правила + Обновить + Скачивание модуля: %s + Начало скачивания: %s + Новая версия: %s доступна, нажмите, чтобы скачать + Принудительно остановить + Не удалось обновить правила SELinux для %s + Запустить + Перезапустить + Текущая версия KernelSU %d слишком низкая для правильной работы менеджера. Пожалуйста, обновите до версии %d или выше! + Список изменений + Успешный импорт + Экспортировать в буфер обмена + Нет локальных шаблонов для экспорта! + Шаблон с таким id уже существует! + Импортировать из буфера обмена + Не удалось получить список изменений: %s + Название + Неверный id шаблона + Синхронизировать онлайн-шаблоны + Создать шаблон + только чтение + Импорт/Экспорт + Не удалось сохранить шаблон + Редактирование шаблона + Идентификационный номер + Шаблон профиля приложения + Описание + Сохранить + Управление локальным и онлайн-шаблоном профиля приложения + Удалить + Буфер обмена пуст! + Просмотр шаблона + Проверка обновлений + Автоматическая проверка обновлений при открытии приложения + Не удалось выдать root! + Открыть + Включить отладку WebView + Используется для отладки WebUI. Пожалуйста, включайте только при необходимости. + Прямая установка (Рекомендуется) + Установка в неактивный слот (После OTA) + Далее + Выбрать файл + Ваше устройство будет **ПРИНУДИТЕЛЬНО** загружено в текущий неактивный слот после перезагрузки! +\n Используйте эту опцию только после завершения OTA. +\n Продолжить? + Выбрать KMI + %1$s образ раздела рекомендуется + Минимизировать разреженный образ + Изменить размер разреженного образа в котором находятся модули, до его фактического размера. Обратите внимание, что это может вызвать ненормальную работу модулей, поэтому используйте это только при необходимости (например, для резервного копирования) + Удалить Временно + Удалить KernelSU (Root и все модули) полностью и навсегда. + Удалить Навсегда + Временно удалить KernelSU, восстановить исходное состояние после следующей перезагрузки. + Удалить + Восстановить Сток образ + Восстановить стоковый заводской образ (если существует резервная копия), обычно используется перед OTA; если вам нужно удалить KernelSU, используйте «Удалить Навсегда». + Установка выполнена + Установка + Установка не выполнена + Выбран lkm: %s + Сохранить Журналы + \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/values-sl/strings.xml b/KernelSU/manager/app/src/main/res/values-sl/strings.xml new file mode 100644 index 000000000000..ae02e596c582 --- /dev/null +++ b/KernelSU/manager/app/src/main/res/values-sl/strings.xml @@ -0,0 +1,106 @@ + + + Klikni za namestitev + V obdelavi + Verzija: %d + Superuporabniki: %d + KernelSU podpira samo GKI kernele + Kernel + Verzija upravitelja + Prstni odtis + SELinux status + Onemogočeno + Neznano + Napaka pri onemogočanju modula: %s + Ni nameščenih modulov + Modul + Odmesti + Namesti + Namesti + Mehki ponovni zagon + Ponovni zagon v Recovery + Ponovni zagon v Bootloader + Ponovni zagon v EDL + Ste prepričani, da želite odstraniti modul %s? + %s je odmeščen + Avtor + overlayfs ni na voljo, modul ne more delovati! + Skrij prikaz sistemskih aplikacij + Prijavite dnevnik + Naučite se KernelSU + https://kernelsu.org/guide/what-is-kernelsu.html + Naučite se, kako namestiti KernelSU in uporabiti module + Glej odprto kodo na %1$s
Pridružite se našem %2$s kanalu
+ Privzeto + Predloga + Imenski prostor vmestitve + Podedovano + Globalno + Pozameznik + Zmožnosti + Izvrzi module + Po privzetem izvrzi module + Domena + Posodobitev + Nalaganje modula: %s + Zaženi + Ponovni zagon + Dnevnik sprememb + Predloga za aplikacijski profil + Domov + Moduli: %d + Ne podpira + SuperUporabnik + Napaka pri omogočanju modula: %s + Znova zaženi + Nastavitve + Ponovni zagon v Download + O nas + Verzija + Napaka pri odmeščanju: %s + Osveži + Varni način + Za uveljavitev je potreben ponovni zagon + Prikaz sistemskih aplikacij + Moduli so onemogočeni, ker so v konfliktu z Magiskovimi! + Podprite nas + Po meri + Ime profila + Skupine + SELinux kontekst + KernelSU je, in bo vedno brezplačen in odprtokoden. Kljub temu, nam lahko z donacijo pokažete, da vam je mar. + Napaka pri posodobitvi aplikacijskega profila za %s + Za pravilno funkionalnost upravitelja je trenutna KernelSU verzija %d prenizka. Potrebna je nadgradnja na verzijo %d ali več! + Globalno privzeta vrednost za \"Izvrzi module\" v aplikacijskih profilih. Če je omogočena, bo to odstranilo vse sistemske modifikacije modulov za aplikacije, ki nimajo nastavljenega profila. + Omogočanje te opcije bo dovolilo KernelSU, da obnovi vse zaradi modulov spremenjene datoteke za to aplikacijo. + Prisilna ustavitev + Pravila + Začni z nalaganjem: %s + Na voljo je nova verzija: %s, kliknite za nadgradnjo + Napaka pri posodobitvi SELinux pravil za: %s + Ni nameščeno + Enforcing + Permissive + Ustvari predlogo + Uredi predlogo + Neveljaven id predloge + Opis + Shrani + Odstrani + le za branje + id predloge že obstaja! + Uvoz iz odložišča + Izvoz v odložišče + Lokalna predloga za izvoz ni bila najdena! + Napaka pri shranjevanju predloge + Odložišče je prazno! + Upravljaj z lokalnimi in spletnimi predlogami za aplikacijski profil + id + Ime + Ogled predloge + Uvoz uspešen + Sinhroniziraj predloge iz spleta + Uvoz/Izvoz + Napaka pri pridobivanju dnevnika sprememb: %s + Shrani Dnevnike +
\ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/values-sr/strings.xml b/KernelSU/manager/app/src/main/res/values-sr/strings.xml new file mode 100644 index 000000000000..73920b6fb542 --- /dev/null +++ b/KernelSU/manager/app/src/main/res/values-sr/strings.xml @@ -0,0 +1,11 @@ + + + Superkorisnici + Moduli: %d + Додирните да бисте инсталирали + Почетна + Није инсталирано + Верзија: %d + Ради + Сачувај Дневнике + \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/values-te/strings.xml b/KernelSU/manager/app/src/main/res/values-te/strings.xml new file mode 100644 index 000000000000..f609542692f3 --- /dev/null +++ b/KernelSU/manager/app/src/main/res/values-te/strings.xml @@ -0,0 +1,21 @@ + + + తెలియదు + మాడ్యూల్‌ని ప్రారంభించడంలో విఫలమైంది: %s + బలవంతంగా ఆపడం + పునఃప్రారంభించండి + మాడ్యూల్ + గురించి + SELinux స్థితి + హోమ్ + సూపర్యూజర్ + మాడ్యూల్‌ని నిలిపివేయడంలో విఫలమైంది: %s + మాడ్యూల్ ఏదీ ఇన్‌స్టాల్ చేయబడలేదు + ఇన్‌స్టాల్ చేయలేదు + ఇన్‌స్టాల్ చేయడానికి క్లిక్ చేయండి + పని చేస్తోంది + వెర్షన్: %d + సూపర్‌యూజర్‌లు: %d + మాడ్యూల్స్: %d + లాగ్‌లు సేవ్ చేయండి + \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/values-th/strings.xml b/KernelSU/manager/app/src/main/res/values-th/strings.xml new file mode 100644 index 000000000000..50bb145e5b0a --- /dev/null +++ b/KernelSU/manager/app/src/main/res/values-th/strings.xml @@ -0,0 +1,134 @@ + + + หน้าหลัก + ยังไม่ได้ติดตั้ง + กดเพื่อติดตั้ง + กำลังทำงาน + เวอร์ชั่น: %d + เวอร์ชั่นตัวจัดการ + สิทธิ์ผู้ใช้ขั้นสูง: %d + โมดูล: %d + ไม่รองรับ + Enforcing + รีบูตเข้าสู่โหมดกู้คืน + ซอฟต์รีบูต + ตอนนี้ KernelSU รองรับเคอร์เนลประเภท GKI เท่านั้น + เคอร์เนล + ปิดใช้งาน + ลายนิ้วมือ + สถานะ SELinux + Permissive + ไม่ทราบ + สิทธิ์ผู้ใช้ขั้นสูง + ล้มเหลวในการเปิดใช้งานโมดูล: %s + ล้มเหลวในการปิดใช้งานโมดูล: %s + ไม่มีโมดูลที่ติดตั้ง + โมดูล + ถอนการติดตั้ง + ตั้งค่า + ติดตั้ง + ติดตั้ง + รีบูต + รีบูตเข้าสู่โหมด Bootloader + เกี่ยวกับ + รีบูตเข้าสู่โหมด Download + รีบูตเข้าสู่โหมด EDL + %s ถอนการติดตั้งสำเร็จ + ล้มเหลวในการถอนการติดตั้ง: %s + overlayfs ไม่สามารถใช้งานได้ โมดูลหยุดทำงาน! + คุณแน่ใจว่าจะถอนการติดตั้งโมดูล %s หรือไม่\? + ผู้สร้าง + เวอร์ชั่น + แสดงแอประบบ + ซ่อนแอประบบ + รีเฟรช + ส่งรายงาน Log + โหมดปลอดภัย + รีบูตเพื่อให้มีผล + โมดูลถูกปิดใช้งานเนื่องจากขัดแย้งกับ Magisk! + เรียนรู้เกี่ยวกับ KernelSU + https://kernelsu.org/guide/what-is-kernelsu.html + เรียนรู้วิธีการติดตั้ง KernelSU และวิธีใช้งานโมดูลต่าง ๆ + สนับสนุนพวกเรา + KernelSU เป็นโอเพ่นซอร์สฟรีทั้งจากนี้และตลอดไป อย่างไรก็ตาม คุณสามารถแสดงความห่วงใยได้ด้วยการบริจาค + ดูซอร์สโค้ดที่ %1$s
และเข้าร่วมช่อง %2$s ของเรา
+ กำหนดเอง + ค่าเริ่มต้น + เทมเพลต + ชื่อโปรไฟล์ + Mount เนมสเปซ + ทั่วไป + สืบทอด + ส่วนบุคคล + หมวดหมู่ + ความสามารถของแอป + การเปิดใช้งานตัวเลือกนี้จะทำให้ KernelSU สามารถกู้คืนไฟล์ที่แก้ไขโดยโมดูลสำหรับแอปพลิเคชั่นนี้ได้ + บริบท SELinux + Umount โมดูล + ไม่สามารถอัปเดตโปรไฟล์แอปสำหรับ %s ได้ + Umount โมดูลตามค่าเริ่มต้น + โดเมน + อัปเดต + กฎ + กำลังดาวน์โหลดโมดูล: %s + กำลังเริ่มดาวน์โหลด: %s + เวอร์ชั่นใหม่: %s พร้อมใช้งาน โปรดคลิกเพื่ออัปเกรด + บังคับหยุด + รีสตาร์ท + หากเปิดใช้งานค่าเริ่มต้นโดยทั่วไปสำหรับ \"Umount โมดูล\" ในโปรไฟล์แอป จะเป็นการลบการแก้ไขโมดูลทั้งหมดในระบบสำหรับแอปพลิเคชั่นที่ไม่มีการตั้งค่าโปรไฟล์ + เปิด + ไม่สามารถอัปเดตกฎ SElinux สำหรับ: %s ได้ + KernelSU เวอร์ชั่น %d ต่ำเกินไป ทำให้ตัวจัดการไม่สามารถใช้งานได้อย่างถูกต้อง โปรดอัปเกรดเป็นเวอร์ชั่น %d หรือที่สูงกว่า! + บันทึกการเปลี่ยนแปลง + นำเข้าเสร็จสิ้น + ส่งออกไปยังคลิปบอร์ด + ไม่พบเทมเพลตในเครื่องที่จะส่งออก! + มีไอดีเทมเพลตนี้อยู่แล้ว! + นำเข้าจากคลิปบอร์ด + ชื่อ + ไอดีเทมเพลตไม่ถูกต้อง + ซิงค์เทมเพลตออนไลน์ + สร้างเทมเพลต + อ่านเท่านั้น + นำเข้า/ส่งออก + ไม่สามารถบันทึกเทมเพลต + แก้ไขเทมเพลต + ไอดี + เทมเพลตโปรไฟล์แอป + คำอธิบาย + บันทึก + จัดการเทมเพลตโปรไฟล์แอปในเครื่องและเทมเพลตออนไลน์ + ลบ + คลิปบอร์ดว่างเปล่า! + ดูเทมเพลต + ดึงข้อมูลบันทึกการเปลี่ยนแปลงล้มเหลว: %s + เปิด + ไม่สามารถให้สิทธิ์รูทได้! + ตรวจสอบการอัปเดต + ตรวจสอบการอัปเดตโดยอัตโนมัติเมื่อเปิดแอป + เปิดใช้งานการแก้ไขข้อบกพร่อง WebView + เลือก KMI + ต่อไป + เลือกไฟล์ + ติดตั้งลงในสล็อตที่ไม่ใช้งาน (หลังจาก OTA) + ติดตั้งโดยตรง (แนะนำ) + แนะนำให้ใช้อิมเมจพาร์ติชั่น %1$s + สามารถใช้เพื่อดีบัก WebUI โปรดเปิดใช้งานเมื่อจำเป็นเท่านั้น + อุปกรณ์ของคุณจะถูก **บังคับ** ให้บูตไปยังสล็อตที่ไม่ได้ใช้งานหลังจากรีบูต! +\nโปรดใช้ตัวเลือกนี้หลังจาก OTA เสร็จแล้วเท่านั้น +\nดำเนินการต่อหรือไม่? + ลดความกระจายของอิมเมจ + ปรับขนาดความกระจายของอิมเมจในโมดูลให้เป็นขนาดจริง โปรดทราบว่านี่อาจทำให้โมดูลทำงานผิดปกติ โปรดใช้เมื่อจำเป็นเท่านั้น (เช่น การสำรองข้อมูล) + ถอนการติดตั้งถาวร + เรียกคืนอิมเมจดั้งเดิม + ถอนการติดตั้ง KernelSU ชั่วคราว จะคืนค่าเป็นสถานะดั้งเดิมหลังจากรีบูตในครั้งถัดไป + กำลังแฟลช + แฟลชสำเร็จ + แฟลชล้มเหลว + เลือก lkm: %s + ถอนการติดตั้ง + ถอนการติดตั้งชั่วคราว + การถอนการติดตั้ง KernelSU (การรูทและโมดูลทั้งหมด) อย่างสมบูรณ์โดยถาวร + คืนค่าโรงงานอิมเมจดั้งเดิม (หากมีข้อมูลสำรอง) ส่วนใหญ่มักใช้ก่อนทำการ OTA ซึ่งหากคุณต้องการถอนการติดตั้ง KernelSU โปรดใช้ \"ถอนการติดตั้งถาวร\" + บันทึกบันทึก +
\ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/values-tr/strings.xml b/KernelSU/manager/app/src/main/res/values-tr/strings.xml new file mode 100644 index 000000000000..ed0bcd0f0d40 --- /dev/null +++ b/KernelSU/manager/app/src/main/res/values-tr/strings.xml @@ -0,0 +1,136 @@ + + + KernelSU + Ana Sayfa + Kurulmadı + Kurmak için tıklayın + Çalışıyor + Sürüm: %d + Süper kullanıcılar: %d + Modüller: %d + Desteklenmiyor + KernelSU şimdilik sadece GKI çekirdeklerini destekliyor + Çekirdek + Yönetici sürümü + Parmak izi + SELinux durumu + Devre dışı + Etkin (Enforcing) + Serbest (Permissive) + Bilinmiyor + Süper kullanıcı + Modül etkinleştirilemedi: %s + Modül devre dışı bırakılamadı: %s + Kurulu modül yok + Modül + Kaldır + Kur + Kur + Cihazı yeniden başlat + Ayarlar + Hızlı yeniden başlat + Kurtarma modunda yeniden başlat + Önyükleyici modunda yeniden başlat + İndirme modunda yeniden başlat + EDL modunda yeniden başlat + Hakkında + %s modülünü kaldırmak istediğinizden emin misiniz? + %s kaldırıldı + Kaldırma başarısız: %s + Sürüm + Geliştirici + overlayfs mevcut değil, modül çalışamaz! + Yenile + Sistem uygulamalarını göster + Sistem uygulamalarını gizle + Günlük raporu gönder + Güvenli mod + Değişikliklerin uygulanması için cihazı yeniden başlat + Modüller, Magisk\'tekiler ile çakıştığı için devre dışı bırakıldı! + KernelSU\'yu öğrenin + https://kernelsu.org/guide/what-is-kernelsu.html + KernelSU\'nun nasıl kurulacağını ve modüllerin nasıl kullanılacağını öğrenin + Bizi destekleyin + KernelSU ücretsiz ve açık kaynaklı bir yazılımdır ve her zaman öyle kalacaktır. Ancak bağış yaparak bize destek olduğunuzu gösterebilirsiniz. + %1$s adresinde kaynak kodunu görüntüleyin.
%2$s kanalımıza katılın.
+ Uygulama profili + Varsayılan + Şablon + Özel + Profil adı + Ad alanını bağla + Kalıtsal + Küresel + Bireysel + Gruplar + Yetkinlikler + SELinux içeriği + Modüllerin bağlantısını kes + %s için uygulama profili güncellenemedi. + Mevcut KernelSU sürümü %d, yöneticinin düzgün çalışabilmesi için çok düşük. Lütfen %d sürümüne veya daha yüksek bir sürüme güncelleyin! + Varsayılan olarak modüllerin bağlantısını kes + Uygulama profilindeki \"Modüllerin bağlantısını kes\" seçeneği için varsayılan değer. Etkinleştirilirse, profil ayarı yapılmamış uygulamalar için modüllerin sistemde yaptığı tüm değişiklikler kaldırılacaktır. + Bu seçeneği etkinleştirmek, KernelSU\'nun bu uygulama için modüller tarafından değiştirilen dosyaları geri yüklemesine izin verir. + İsim alanı + Kurallar + Güncelle + Modül indiriliyor: %s + İndirme başladı: %s + Yeni sürüm: %s mevcut, güncellemek için tıklayın + Uygulamayı başlat + Uygulamayı durmaya zorla + Uygulamayı yeniden başlat + %s için SELinux kuralları güncellenemedi. + Değişiklik geçmişi + Uygulama profili şablonu + Yerel ve çevrimiçi uygulama profili şablonlarını yönetin + Şablon oluştur + Şablonu düzenle + Kimlik + Geçersiz şablon kimliği + İsim + Açıklama + Kaydet + Sil + Şablonu görüntüle + salt okunur + Şablon kimliği zaten mevcut! + İçe aktar/Dışa aktar + Panodan içe aktar + Panodan dışa aktar + Dışa aktarmak için yerel şablon bulunamadı! + Başarıyla içe aktarıldı + Çevrimiçi şablonları senkronize et + Şablon kaydedilemedi + Pano boş! + Değişiklik geçmişi alınamadı: %s + Güncellemeleri denetle + Uygulamayı açarken güncellemeleri otomatik denetle + Root izni verilemedi! + Aç + Web Görünümü Hata Ayıklamasını Etkinleştir + Web kullanıcı arayüzünde hata ayıklamak için kullanılabilir, lütfen yalnızca gerektiğinde etkinleştirin. + Doğrudan Kur (Tavsiye Edilen) + Bir Dosya Seçin + Etkin Olmayan Yuvaya Kur (OTA\'dan Sonra) + Cihazınız geçerli etkin olmayan yuvaya **ZORLA** yeniden başlatılacaktır! +\nBu seçeneği yalnızca OTA tamamlandıktan sonra kullanın. +\nDevam edilsin mi? + Sonraki + KMI seçin + %1$s bölüm imajı önerilir + Sparse imajını küçültün + Modülün bulunduğu sparse imajını gerçek boyutuna yeniden boyutlandırın. Bunun modülün anormal çalışmasına neden olabileceğini unutmayın, bu nedenle lütfen yalnızca gerekli olduğunda kullanın (yedekleme gibi) + Geçici Olarak Kaldır + Kalıcı Olarak Kaldır + Stok İmajı Geri Yükle + KernelSU\'yu geçici olarak kaldır, bir sonraki yeniden başlatmadan sonra orijinal durumuna geri yükle. + Kaldır + KernelSU (Root ve tüm modüller) tamamen ve kalıcı olarak kaldırılıyor. + Stok fabrika imajını geri yükler (eğer yedek varsa), genellikle OTA\'dan önce kullanılır; KernelSU\'yu kaldırmanız gerekiyorsa, lütfen \"Kalıcı Olarak Kaldır\" seçeneğini kullanın. + Flaşlama başarılı + Seçili lkm: %s + Flaşlanıyor + Flaşlama başarısız + Günlükleri Kaydet +
\ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/values-uk/strings.xml b/KernelSU/manager/app/src/main/res/values-uk/strings.xml new file mode 100644 index 000000000000..919ac133c712 --- /dev/null +++ b/KernelSU/manager/app/src/main/res/values-uk/strings.xml @@ -0,0 +1,135 @@ + + + Головна + Не встановлено + Натисніть щоб встановити + Працює + Версія: %d + Суперкористувачі: %d + Модулі: %d + Не підтримується + KernelSU підтримує лише GKI ядра на данний момент + Ядро + Версія менеджера + Відбиток + Статус SELinux + Вимкнено + Примусовий + Дозвільний + Невідомо + Суперкористувач + Не вдалося ввімкнути модуль: %s + Не вдалося вимкнути модуль: %s + Немає встановлених модулів + Модулі + Видалити + Встановити + Встановити + Перезавантажити + Налаштування + М\'яке перезавантаження + Перезавантажити до Recovery + Перезавантажити до Bootloader + Перезавантажити до Download + Перезавантажити до EDL + Про додаток + Ви впевнені, що хочете видалити модуль %s? + %s видалено + Не вдалося видалити: %s + Версія + Автор + overlayfs не доступний, модуль не може працювати! + Освіжати(Оновити) + Показати системні додатки + Сховати системні додатки + Надіслати логи + Безпечний режим + Перезавантажте, щоб застосувати + Модулі вимкнено, оскільки вони конфліктують із модулями Magisk! + Дізнайтеся про KernelSU + https://kernelsu.org/guide/what-is-kernelsu.html + Дізнайтеся, як інсталювати KernelSU і використовувати модулі + Підтримати нас + KernelSU є, і завжди буде безкоштовним та з відкритим кодом. Однак, якщо вам не байдуже, можете зробити невеличке пожертвування. + Приєднуйтесь до нашого каналу %2$s]]> + Профіль додатка + Типовий + Шаблон + Власний + Назва профілю + Змонтувати простір імен + Наслідуваний + Глобальний + Індивідуальний + Групи + Можливості + Контекст SELinux + Розмонтувати модулі + Не вдалося оновити профіль додатка для %s + Розмонтувати модулі за замовчуванням + Загальне значення за замовчуванням для \"Розмонтувати модулі\" у профілях додатків. Якщо ввімкнено, буде видалено всі модифікації модулів у системі для додатків, які не мають встановленого профілю. + Увімкнення даної опції дозволить KernelSU відновити для цього додатка будь-які файли, змінені модулями. + Домен + Правила + Оновити + Завантаження модуля: %s + Початок завантаження: %s + Запустити + Примусово зупинити + Перезапустити + Нова версія: %s доступна, натисніть, щоб завантажити + Не вдалося оновити правила SELinux для: %s + Журнал змін + Поточна версія KernelSU %d занадто низька, щоб менеджер міг працювати належним чином. Будь ласка, оновіть до версії %d або вище! + Успішно імпортовано + Експортувати в буфер обміну + Неможливо знайти локальні шаблони для експорту! + Шаблон з таким ідентифікатором вже існує! + Імпортувати з буферу обміну + Невдача при завантаженні списку змін: %s + Ім\'я + Невірний ідентифікатор шаблону + Синхронізувати мережеві шаблони + Створити шаблон + Тільки читання + Імпорт/Експорт + Помилка при збереженні шаблону + Редагувати шаблон + Ідентифікатор + Шаблон Профілю Додатку + Опис + Зберегти + Керувати локальними та мережевими шаблонами профілів додатків + Видалити + Буфер обміну пустий! + Переглянути шаблон + Увімкнути налагодження WebView + Виберіть KMI + Далі + Перевірка оновлень + Автоматична перевірка оновлень під час відкриття програми + Використовується для налагодження WebUI. Будь ласка, вмикайте тільки за потреби. + Пряме встановлення (рекомендовано) + Виберіть файл + Встановлення в неактивний слот (Після OTA) + Ваш пристрій буде **ПРИМУСОВО** завантажено в поточний неактивний слот після перезавантаження! +\n Використовуйте цю опцію тільки після завершення OTA. +\n Продовжити? + %1$s образ розділу рекомендується + Не вдалося отримати root! + Відкрити + Мінімізувати розріджений образ + Змінити розмір розрідженого образу, в якому знаходяться модулі, до його фактичного розміру. Зверніть увагу, що це може спричинити ненормальну роботу модулів, тому використовуйте це лише за потреби (наприклад, для резервного копіювання) + Тимчасово видалити + Назавжди видалити + Відновити Стоковий образ + Тимчасово видалити KernelSU, відновити початковий стан після наступного перезавантаження. + Видалити + Прошивка + Прошивку виконано + Прошивка не виконана + Обрано lkm: %s + Видалити KernelSU (Root і всі модулі) повністю і назавжди. + Відновити стоковий заводський образ (якщо є резервна копія), зазвичай використовується перед OTA; якщо вам потрібно видалити KernelSU, використовуйте \"Назавжди видалити\". + Зберегти Журнали + \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/values-v27/themes.xml b/KernelSU/manager/app/src/main/res/values-v27/themes.xml new file mode 100644 index 000000000000..325416c0d9c2 --- /dev/null +++ b/KernelSU/manager/app/src/main/res/values-v27/themes.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/values-vi/strings.xml b/KernelSU/manager/app/src/main/res/values-vi/strings.xml new file mode 100644 index 000000000000..04d878381f78 --- /dev/null +++ b/KernelSU/manager/app/src/main/res/values-vi/strings.xml @@ -0,0 +1,135 @@ + + + Hồ sơ ứng dụng + Mặc định + Mẫu + Tuỳ chỉnh + Tên hồ sơ + Nhóm + Không thể cập nhật Hồ sơ ứng dụng cho %s + Ngắt mô-đun theo mặc định + Giá trị mặc định của \"Ngắt mô-đun\" trong Cấu hình ứng dụng. Nếu bật, KernelSU sẽ khôi phục mọi tệp hệ thống đã sửa đổi bởi mô-đun cho các ứng dụng chưa thiết lập Cấu hình. + Bật tùy chọn này sẽ khôi phục mọi tệp đã sửa đổi bởi các mô-đun cho ứng dụng này. + Cập nhật + Đang tải xuống mô-đun: %s + Bắt đầu tải xuống: %s + Phiên bản mới: %s đã có, bấm để nâng cấp + Tìm hiểu KernelSU + Tìm hiểu cách cài đặt KernelSU và sử dụng các mô-đun + Hỗ trợ chúng tôi + KernelSU sẽ luôn luôn miễn phí và mã nguồn mở. Tuy nhiên bạn có thể ủng hộ chúng tôi bằng một khoản đóng góp nhỏ. + Tham gia kênh %2$s của chúng tôi]]> + Các mô-đun bị vô hiệu hóa vì chúng xung đột với Magisk! + Bạn có muốn gỡ cài đặt mô-đun %s không\? + Nhật ký báo cáo + Trang chủ + Chưa cài đặt + Nhấn để cài đặt + Đang hoạt động + Phiên bản: %d + Không được hỗ trợ + KernelSU hiện tại chỉ hỗ trợ kernel GKI + Kernel + Phiên bản Manager + Fingerprint + Trạng thái SELinux + Vô hiệu hóa + Thực thi + Cho phép + Không rõ + SuperUser + Không thể kích hoạt mô-đun: %s + Không thể vô hiệu hóa mô-đun: %s + Chưa cài đặt mô-đun nào + Mô-đun + Gỡ cài đặt + Cài đặt + Cài đặt + Khởi động lại + Thiết đặt + Khởi động mềm + Khởi động lại vào Recovery + Khởi động lại vào Bootloader + Khởi động lại vào Download Mode + Khởi động lại vào EDL + Giới thiệu + %s được gỡ cài đặt + Lỗi khi gỡ cài đặt: %s + Phiên bản + Tác giả + overlayfs hiện không khả dụng, mô-đun không thể hoạt động! + Làm mới + Hiển thị ứng dụng hệ thống + Ẩn ứng dụng hệ thống + Chế độ an toàn + Khởi động lại để có hiệu lực + https://kernelsu.org/vi_VN/guide/what-is-kernelsu.html + Số superuser: %d + Số mô-đun: %d + Phạm vi + Quy định + Khởi chạy + Khởi động lại + Gắn namespace + Quyền + Không thể cập nhật quy định SELinux cho: %s + Buộc dừng + Thừa hưởng + Chung + Riêng + Bối cảnh SELinux + Ngắt mô-đun + KernelSU phiên bản %d quá thấp để trình quản lý hoạt động, hãy cập nhật lên %d hoặc mới hơn! + Đã nhập thành công + Xuất từ khay nhớ tạm + Không thể tìm thấy mẫu cục bộ để xuất! + id bản mẫu đã tồn tại! + Nhật ký thay đổi + Nhập từ khay nhớ tạm + Không nạp được nhật ký thay đổi: %s + Tên + Id mẫu không hợp lệ + Đồng bộ hóa các mẫu trực tuyến + Tạo Bản Mẫu + Nhập/Xuất + Không lưu được mẫu + Sửa Bản Mẫu + Mẫu Hồ Sơ Ứng Dụng + Mô tả + Lưu + Quản lý mẫu Hồ sơ Ứng dụng cục bộ và trực tuyến + Xóa + Clipboard trống! + Xem Bản Mẫu + chỉ đọc + id + Bật gỡ lỗi WebView + Có thể được sử dụng để gỡ lỗi WebUI, vui lòng chỉ bật khi cần. + Không cấp được quyền root! + Kiểm tra cập nhật + Tự động kiểm tra cập nhật khi mở ứng dụng + Mở + Cài đặt vào khe không hoạt động (Sau OTA) + Thiết bị của bạn sẽ **BẮT BUỘC** khởi động vào khe không hoạt động hiện tại sau khi khởi động lại! +\nChỉ sử dụng tùy chọn này sau khi OTA hoàn tất. +\nTiếp tục? + Tạm thời gỡ cài đặt KernelSU, khôi phục về trạng thái ban đầu sau lần khởi động lại tiếp theo. + Chọn KMI + Kế tiếp + Cài đặt trực tiếp (Được khuyến nghị) + Chọn một tệp + Gỡ cài đặt + Gỡ cài đặt tạm thời + Gỡ cài đặt vĩnh viễn + Khôi phục hình ảnh gốc + Gỡ cài đặt KernelSU (Root và tất cả các mô-đun) hoàn toàn và vĩnh viễn. + Khôi phục hình ảnh gốc của nhà máy (nếu có bản sao lưu), thường được sử dụng trước OTA; nếu bạn cần gỡ cài đặt KernelSU, vui lòng sử dụng \"Gỡ cài đặt vĩnh viễn\". + Đang cài + Cài thành công + Cài thất bại + Đã chọn lkm: %s + Nên sử dụng hình ảnh phân vùng %1$s + Giảm thiểu hình ảnh thưa thớt + Thay đổi kích thước hình ảnh thưa nơi đặt mô-đun theo kích thước thực tế của nó. Lưu ý điều này có thể khiến module hoạt động không bình thường nên vui lòng chỉ sử dụng khi cần thiết (chẳng hạn như để sao lưu) + Lưu Nhật Ký + \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/values-zh-rCN/strings.xml b/KernelSU/manager/app/src/main/res/values-zh-rCN/strings.xml new file mode 100644 index 000000000000..ff11137df5ef --- /dev/null +++ b/KernelSU/manager/app/src/main/res/values-zh-rCN/strings.xml @@ -0,0 +1,132 @@ + + + 主页 + 未安装 + 点击安装 + 工作中 + 版本: %d + 超级用户数:%d + 不支持 + KernelSU 现在只支持 GKI 内核 + 内核版本 + 管理器版本 + 系统指纹 + SELinux 状态 + 被禁用 + 强制执行 + 宽容模式 + 未知 + 超级用户 + 无法启用模块: %s + 无法禁用模块: %s + 没有安装模块 + 模块 + 卸载 + 安装 + 安装 + 重启 + 设置 + 软重启 + 重启到 Recovery + 重启到 BootLoader + 重启到 Download + 重启到 EDL + 关于 + 确定要卸载模块 %s 吗? + %s 已卸载 + 卸载失败: %s + 版本 + 作者 + 内核不支持 overlayfs,模块功能无法运作! + 刷新 + 显示系统应用 + 隐藏系统应用 + 发送日志 + 安全模式 + 重启生效 + 所有模块已被禁用,因为它与 Magisk 的模块系统有冲突! + 模块数:%d + 了解 KernelSU + https://kernelsu.org/zh_CN/guide/what-is-kernelsu.html + 了解如何安装 KernelSU 以及如何开发模块 + 支持开发 + KernelSU 将保持免费开源,向开发者捐赠以表示支持。 + 加入我们的 %2$s 频道
加入我们的 QQ 频道]]>
+ 默认 + 模版 + 自定义 + 名称 + 命名空间 + 继承 + 全局 + 私有 + 组 + 权能 + SELinux + 卸载模块 + 为 %s 更新 App Profile 失败 + 当前 KernelSU 版本 %d 过低,管理器无法正常工作,请升级内核 KernelSU 版本至 %d 或以上! + 默认卸载模块 + App Profile 中\"卸载模块\"的全局默认值,如果启用,将会为没有设置 Profile 的应用移除所有模块针对系统的修改。 + 启用后将允许 KernelSU 为本应用还原被模块修改过的文件。 + 域 + 规则 + 更新 + 正在下载模块:%s + 开始下载:%s + 发现新版本:%s,点击升级 + 启动 + 强制停止 + 重新启动 + 为:%s 更新翻译失败 + 更新日志 + App Profile 模版 + 管理本地和在线的 App Profile 模版 + 创建模版 + 编辑模版 + 模版 id + 模版 id 不合法 + 名字 + 描述 + 保存 + 删除 + 查看模版 + 只读 + 模版 id 已存在! + 导入/导出 + 从剪切板导入 + 导出到剪切板 + 没有本地模版可以导出! + 导入成功! + 同步在线规则 + 模版保存失败! + 剪切板为空! + 获取更新日志失败:%s + 检查更新 + 在应用启动后自动检查是否有最新版 + 获取 root 失败! + 打开 + 启用 WebView 调试 + 可用于调试 WebUI ,请仅在需要时启用。 + 直接安装(推荐) + 选择一个文件 + 安装到未使用的槽位(OTA 后) + 将在重启后强制切换到另一个槽位!\n注意只能在 OTA 更新完成后的重启之前使用。\n确认? + 下一步 + 建议选择 %1$s 分区镜像 + 选择 KMI + 最小化稀疏文件 + 将模块所在的稀疏文件镜像调整为其实际大小,注意这可能导致模块工作异常,请仅在必要时(如备份)使用 + 卸载 + 临时卸载 + 永久卸载 + 恢复原厂镜像 + 临时卸载 KernelSU,下次重启后恢复 + 完全并永久移除 KernelSU 和所有模块 + 恢复原厂镜像,一般在 OTA 前使用;如需卸载请使用“永久卸载” + 刷写中 + 刷写完成 + 刷写失败 + 选择的 LKM :%s + 保存日志保存日志 +
\ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/values-zh-rHK/strings.xml b/KernelSU/manager/app/src/main/res/values-zh-rHK/strings.xml new file mode 100644 index 000000000000..154ddac9bb8d --- /dev/null +++ b/KernelSU/manager/app/src/main/res/values-zh-rHK/strings.xml @@ -0,0 +1,124 @@ + + + 首頁 + 未安裝 + 按一下以安裝 + 運作中 + KernelSU 版本:%d + 超級使用者:%d 個 + 已安裝模組:%d 個 + 不支援 + KernelSU 現在僅支援 GKI 核心 + 核心 + 管理器版本 + 指紋 + SELinux 狀態 + 已停用 + 強制 + 寬鬆 + 未知 + 超級使用者 + 無法啟用模組:%s + 無法停用模組:%s + 尚未安裝模組 + 模組 + 解除安裝 + 安裝 + 安裝 + 重新啟動 + 設定 + 軟啟動 + 重新啟動至 Recovery + 重新啟動至 Bootloader + 重新啟動至 Download + 重新啟動至 EDL + 關於 + 您確定要解除安裝模組「%s」嗎? + 「%s」已解除安裝 + 無法解除安裝:%s + 版本 + 作者 + OverlayFS 無法使用,模組無法正常運作! + 重新整理 + 顯示系統應用程式 + 隱藏系統應用程式 + 傳送記錄 + 安全模式 + 重新啟動以生效 + 模組已停用,因其與 Magisk 的模組存在衝突! + 深入瞭解 KernelSU + https://kernelsu.org/zh_TW/guide/what-is-kernelsu.html + 瞭解如何安裝 KernelSU 以及如何開發模組 + 支援開發 + KernelSU 將保持免費和開源,您可以考慮向開發人員贊助以表示支持。 + 加入我們的 %2$s 頻道]]> + 預設 + 設定檔名稱 + 範本 + 繼承 + 全域 + 功能 + 卸載模組 + 無法更新 %s 應用程式設定檔 + 規則 + 目前 KernelSU 版本 %d 過低,管理器無法正常運作。請升級至 %d 或更高版本! + 應用程式設定檔中「解除安裝模組」的全域預設值,如果啟用,將會為沒有設定檔的應用程式移除所有模組針對系統的修改。 + 啟用此選項將允許 KernelSU 為這個應用程式還原任何被模組修改過的檔案。 + 網域 + 更新 + 自訂 + 掛載命名空間 + 個人 + 群組 + SELinux 環境 + 預設解除安裝模組 + 正在下載模組:%s + 開始下載:%s + 新版本:%s 已可供使用,按一下以升級 + 啟動 + 強制停止 + 重新啟動 + 無法為 %s 更新 SELinux 規則 + 變更記錄 + 成功匯出 + 導出到剪貼板 + 本地沒有模板可匯出! + 模板 ID 已存在! + 從剪貼簿匯入 + 獲取更新日誌失敗:%s + 名字 + 模板 ID 無效 + 同步在線規則 + 創建模板 + 只讀 + 匯出 / 匯入 + 模板儲存失敗 + 編輯模板 + 模板 ID + App Profile 模板 + 描述 + 儲存 + 管理本地和線上的 App Profile 模板 + 刪除 + 剪貼簿沒有內容! + 查看模板 + 啟用 WebView 偵錯 + 可用於偵錯WebUI,請僅在需要時啟用。 + 直接安裝(建議) + 選擇一個文件 + 安裝到非活動插槽(OTA 後) + 重新啟動後,您的裝置將強制啟動到目前非活動插槽! +\n僅在 OTA 完成後使用此選項。 +\n繼續? + 下一個 + 選擇KMI + 建議使用 %1$s 分割區映像 + 授予root權限失敗! + 打開 + 檢查更新 + 開啟應用程式時自動檢查更新 + 最小化稀疏影像 + 將模組所在的稀疏影像調整為實際大小。 請注意,這可能會導致模組工作異常,因此請僅在必要時使用(例如備份) + 解除安裝 + 保存日志 + \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/values-zh-rTW/strings.xml b/KernelSU/manager/app/src/main/res/values-zh-rTW/strings.xml new file mode 100644 index 000000000000..7917ddef9994 --- /dev/null +++ b/KernelSU/manager/app/src/main/res/values-zh-rTW/strings.xml @@ -0,0 +1,134 @@ + + + 首頁 + 未安裝 + 按一下以安裝 + 運作中 + KernelSU 版本:%d + 已授權 Root:%d 個 + 不支援 + KernelSU 現在僅支援 GKI 核心 + 核心 + 管理器版本 + 指紋 + SELinux 狀態 + 已停用 + 強制 + 寬鬆 + 未知 + Root 授權 + 無法啟用模組:%s + 無法停用模組:%s + 尚未安裝模組 + 模組 + 解除安裝 + 安裝 + 安裝 + 重新啟動 + 設定 + 軟重新啟動 + 重新啟動至 Recovery + 重新啟動至 Bootloader + 重新啟動至 Download + 重新啟動至 EDL + 關於 + 您確定要解除安裝模組「%s」嗎? + 「%s」已解除安裝 + 無法解除安裝:%s + 版本 + 作者 + OverlayFS 無法使用,模組無法正常運作! + 重新整理 + 顯示系統應用程式 + 隱藏系統應用程式 + 傳送記錄 + 安全模式 + 重新啟動以生效 + 模組已停用,因其與 Magisk 的模組存在衝突! + 已安裝模組:%d 個 + 深入瞭解 KernelSU + https://kernelsu.org/zh_TW/guide/what-is-kernelsu.html + 瞭解如何安裝 KernelSU 以及如何開發模組 + 支援開發 + KernelSU 將保持免費和開源,您可以考慮向開發人員贊助以表示支持。 + 加入我們的 %2$s 頻道]]> + 卸載模組 + 無法更新 %s 應用程式設定檔 + 目前安裝的 KernelSU 版本 %d 過低,管理器無法正常工作,請升級核心 KernelSU 版本至 %d 或以上! + 預設卸載模組 + 應用程式設定檔中「卸載模組」的全域預設值,如果啟用,將會為沒有設定檔的應用程式移除所有模組針對系統的修改。 + 啟用後將允許 KernelSU 為本應用程式還原被模組修改過的檔案。 + 預設 + 自訂 + 權限 + 規則 + 正在下載模組:%s + 重新啟動 + 模板 + 設定檔名稱 + 掛載命名空間 + 繼承 + 全域 + 私人 + 群組 + SELinux context + 域 + 更新 + 開始下載:%s + 發現新版本:%s 已可供使用,按一下即可升級 + 啟動 + 強制停止 + 無法為 %s 更新 SELinux + 變更記錄 + 模板 ID 無效 + 創建模板 + 編輯模板 + 模板 ID + App Profile 模板 + 管理本地和線上的 App Profile 模板 + 成功匯入 + 匯出至剪貼簿 + 沒有本地模板可匯出! + 模板 ID 已存在! + 從剪貼簿匯入 + 獲取更新日誌失敗:%s + 名稱 + 與線上規則同步 + 唯讀 + 匯出 / 匯入 + 模板儲存失敗 + 描述 + 儲存 + 刪除 + 剪貼簿沒有內容! + 檢查模板 + 可用於偵錯 WebUI,請僅在需要時啟用。 + 啟用 WebView 偵錯 + 取得root失敗! + 開啟 + 檢查更新 + 在打開App時自動檢查更新 + 選擇一個檔案 + 安裝到非使用中的槽位(在 OTA 更新後) + 您的裝置將在下次重新啟動後強制切換到非使用中的槽位! +\n這個選項僅在 OTA 更新完畢後使用。 +\n請問是否繼續? + 直接安裝(建議) + 下一步 + 選擇 KMI + 建議使用 %1$s 分區 + 最小化模組稀疏映像 + 將模組的稀疏映像調整為其實際大小,請注意這可能導致模組工作異常,請僅在需要時(如備份)使用 + 解除安裝 + 暫時解除安裝 + 還原原廠映像 + 暫時卸載KernelSU,下次重啟後恢復原狀。 + 永久解除安裝 + 完全的(永久的)解除安裝 KernelSU(Root 和所有模組)。 + 寫入中 + 寫入完成 + 恢復原廠映像(如果有備份),通常在OTA之前使用;如果需要解除安裝KernelSU,請使用「永久解除安裝」。 + 寫入失敗 + 選擇的 LKM :%s + 儲存日誌 + \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/values/strings.xml b/KernelSU/manager/app/src/main/res/values/strings.xml new file mode 100644 index 000000000000..d094969af1a2 --- /dev/null +++ b/KernelSU/manager/app/src/main/res/values/strings.xml @@ -0,0 +1,134 @@ + + + KernelSU + Home + Not installed + Click to install + Working + Version: %d + Superusers: %d + Modules: %d + Unsupported + KernelSU only supports GKI kernels now + Kernel + Manager Version + Fingerprint + SELinux status + Disabled + Enforcing + Permissive + Unknown + SuperUser + Failed to enable module: %s + Failed to disable module: %s + No installed modules + Module + Uninstall + Install + Install + Reboot + Settings + Soft Reboot + Reboot to Recovery + Reboot to Bootloader + Reboot to Download + Reboot to EDL + About + Are you sure you want to uninstall module %s? + %s is uninstalled + Failed to uninstall: %s + Version + Author + overlayfs is not available, module cannot work! + Refresh + Show system apps + Hide system apps + Report Log + Safe mode + Reboot to take effect + Modules are disabled because it is conflict with Magisk\'s! + Learn KernelSU + https://kernelsu.org/guide/what-is-kernelsu.html + Learn how to install KernelSU and use modules + Support Us + KernelSU is, and always will be, free, and open source. You can however show us that you care by making a donation. + Join our %2$s channel]]> + App Profile + Default + Template + Custom + Profile name + Mount namespace + Inherited + Global + Individual + Groups + Capabilities + SELinux context + Umount modules + Failed to update App Profile for %s + The current KernelSU version %d is too low for the manager to function properly. Please upgrade to version %d or higher! + Umount modules by default + The global default value for \"Umount modules\" in App Profiles. If enabled, it will remove all module modifications to the system for applications that do not have a Profile set. + Enabling this option will allow KernelSU to restore any modified files by the modules for this application. + Domain + Rules + Update + Downloading module: %s + Start downloading: %s + New version: %s is available, click to upgrade + Launch + Force Stop + Restart + Failed to update SELinux rules for: %s + Changelog + App Profile Template + Manage local and online template of App Profile + Create Template + Edit Template + id + Invalid template id + Name + Description + Save + Delete + View Template + readonly + template id already exists! + Import/Export + Import from clipboard + Export to clipboard + Can not find local template to export! + Imported successfully + Sync online templates + Failed to save template + Clipboard is empty! + Fetch changelog failed: %s + Check update + Automatically check for updates when opening the app + Failed to grant root! + Open + Enable WebView Debugging + Can be used to debug WebUI, please enable only when needed. + Direct Install (Recommended) + Select a File + Install to Inactive Slot (After OTA) + Your device will be **FORCED** to boot to the current inactive slot after a reboot!\nOnly use this option after OTA is done.\nContinue? + Next + %1$s partition image is recommended + Select KMI + Minimize sparse image + Resize the sparse image where the module is located to its actual size. Note that this may cause the module to work abnormally, so please only use when necessary (such as for backup) + Uninstall + Uninstall Temporarily + Uninstall Permanently + Restore Stock Image + Temporarily uninstall KernelSU, restore to original state after next reboot. + Uninstalling KernelSU(Root and all modules) completely and permanently. + Restore the stock factory image (if a backup exists), usually used before OTA; if you need to uninstall KernelSU, please use \"Permanent Uninstall\". + Flashing + Flash success + Flash failed + Selected lkm: %s + Save Logs + \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/values/themes.xml b/KernelSU/manager/app/src/main/res/values/themes.xml new file mode 100644 index 000000000000..7d41d8ec77fc --- /dev/null +++ b/KernelSU/manager/app/src/main/res/values/themes.xml @@ -0,0 +1,10 @@ + + + + + \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/xml/backup_rules.xml b/KernelSU/manager/app/src/main/res/xml/backup_rules.xml new file mode 100644 index 000000000000..fa0f996d2c2a --- /dev/null +++ b/KernelSU/manager/app/src/main/res/xml/backup_rules.xml @@ -0,0 +1,13 @@ + + + + \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/xml/data_extraction_rules.xml b/KernelSU/manager/app/src/main/res/xml/data_extraction_rules.xml new file mode 100644 index 000000000000..9ee9997b0b47 --- /dev/null +++ b/KernelSU/manager/app/src/main/res/xml/data_extraction_rules.xml @@ -0,0 +1,19 @@ + + + + + + + \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/xml/filepaths.xml b/KernelSU/manager/app/src/main/res/xml/filepaths.xml new file mode 100644 index 000000000000..f8a9a5c545fb --- /dev/null +++ b/KernelSU/manager/app/src/main/res/xml/filepaths.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/KernelSU/manager/app/src/main/res/xml/network_security_config.xml b/KernelSU/manager/app/src/main/res/xml/network_security_config.xml new file mode 100644 index 000000000000..6dd26ccf046a --- /dev/null +++ b/KernelSU/manager/app/src/main/res/xml/network_security_config.xml @@ -0,0 +1,8 @@ + + + + 127.0.0.1 + 0.0.0.0 + ::1 + + diff --git a/KernelSU/manager/build.gradle.kts b/KernelSU/manager/build.gradle.kts new file mode 100644 index 000000000000..0e503df3b636 --- /dev/null +++ b/KernelSU/manager/build.gradle.kts @@ -0,0 +1,101 @@ +import com.android.build.api.dsl.ApplicationDefaultConfig +import com.android.build.api.dsl.CommonExtension +import com.android.build.gradle.api.AndroidBasePlugin +import java.io.ByteArrayOutputStream + +plugins { + alias(libs.plugins.agp.app) apply false + alias(libs.plugins.agp.lib) apply false + alias(libs.plugins.kotlin) apply false + alias(libs.plugins.compose.compiler) apply false + alias(libs.plugins.lsplugin.cmaker) +} + +cmaker { + default { + arguments.addAll( + arrayOf( + "-DANDROID_STL=c++_static", + ) + ) + val flags = arrayOf( + "-Wno-gnu-string-literal-operator-template", + "-Wno-c++2b-extensions", + ) + cFlags.addAll(flags) + cppFlags.addAll(flags) + abiFilters("arm64-v8a", "x86_64") + } + buildTypes { + if (it.name == "release") { + arguments += "-DDEBUG_SYMBOLS_PATH=${buildDir.absolutePath}/symbols" + } + } +} + +val androidMinSdkVersion = 26 +val androidTargetSdkVersion = 34 +val androidCompileSdkVersion = 34 +val androidBuildToolsVersion = "34.0.0" +val androidCompileNdkVersion = "26.3.11579264" +val androidSourceCompatibility = JavaVersion.VERSION_21 +val androidTargetCompatibility = JavaVersion.VERSION_21 +val managerVersionCode by extra(getVersionCode()) +val managerVersionName by extra(getVersionName()) + +fun getGitCommitCount(): Int { + val out = ByteArrayOutputStream() + exec { + commandLine("git", "rev-list", "--count", "HEAD") + standardOutput = out + } + return out.toString().trim().toInt() +} + +fun getGitDescribe(): String { + val out = ByteArrayOutputStream() + exec { + commandLine("git", "describe", "--tags", "--always") + standardOutput = out + } + return out.toString().trim() +} + +fun getVersionCode(): Int { + val commitCount = getGitCommitCount() + val major = 1 + return major * 10000 + commitCount + 200 +} + +fun getVersionName(): String { + return getGitDescribe() +} + +subprojects { + plugins.withType(AndroidBasePlugin::class.java) { + extensions.configure(CommonExtension::class.java) { + compileSdk = androidCompileSdkVersion + ndkVersion = androidCompileNdkVersion + buildToolsVersion = androidBuildToolsVersion + + defaultConfig { + minSdk = androidMinSdkVersion + if (this is ApplicationDefaultConfig) { + targetSdk = androidTargetSdkVersion + versionCode = managerVersionCode + versionName = managerVersionName + } + } + + lint { + abortOnError = true + checkReleaseBuilds = false + } + + compileOptions { + sourceCompatibility = androidSourceCompatibility + targetCompatibility = androidTargetCompatibility + } + } + } +} \ No newline at end of file diff --git a/KernelSU/manager/gradle.properties b/KernelSU/manager/gradle.properties new file mode 100644 index 000000000000..387da396166f --- /dev/null +++ b/KernelSU/manager/gradle.properties @@ -0,0 +1,3 @@ +android.experimental.enableNewResourceShrinker.preciseShrinking=true +android.enableAppCompileTimeRClass=true +android.useAndroidX=true diff --git a/KernelSU/manager/gradle/libs.versions.toml b/KernelSU/manager/gradle/libs.versions.toml new file mode 100644 index 000000000000..6ec08d63e90b --- /dev/null +++ b/KernelSU/manager/gradle/libs.versions.toml @@ -0,0 +1,78 @@ +[versions] +agp = "8.4.1" +kotlin = "2.0.0" +ksp = "2.0.0-1.0.21" +compose-bom = "2024.05.00" +lifecycle = "2.8.0" +accompanist = "0.34.0" +navigation = "2.7.7" +activity-compose = "1.9.0" +kotlinx-coroutines = "1.8.1" +coil-compose = "2.6.0" +compose-destination = "1.10.2" +sheets-compose-dialogs = "1.3.0" +markdown = "4.6.2" +webkit = "1.11.0" +appiconloader-coil = "1.5.0" +parcelablelist = "2.0.1" +libsu = "5.2.2" +apksign = "1.4" +cmaker = "1.2" + +[plugins] +agp-app = { id = "com.android.application", version.ref = "agp" } +agp-lib = { id = "com.android.library", version.ref = "agp" } + +kotlin = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } +compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } + +ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } + +lsplugin-apksign = { id = "org.lsposed.lsplugin.apksign", version.ref = "apksign" } +lsplugin-cmaker = { id = "org.lsposed.lsplugin.cmaker", version.ref = "cmaker" } + +[libraries] +androidx-activity-compose = { group = "androidx.activity", name = "activity-compose", version.ref = "activity-compose" } + +androidx-navigation-compose = { group = "androidx.navigation", name = "navigation-compose", version.ref = "navigation" } + +androidx-compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "compose-bom" } +androidx-compose-material-icons-extended = { group = "androidx.compose.material", name = "material-icons-extended" } +androidx-compose-material = { group = "androidx.compose.material", name = "material" } +androidx-compose-material3 = { group = "androidx.compose.material3", name = "material3" } +androidx-compose-ui = { group = "androidx.compose.ui", name = "ui" } +androidx-compose-ui-test-manifest = { group = "androidx.compose.ui", name = "ui-test-manifest" } +androidx-compose-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling" } +androidx-compose-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview" } + +androidx-lifecycle-runtime-ktx = { group = "androidx.lifecycle", name = "lifecycle-runtime-ktx", version.ref = "lifecycle" } +androidx-lifecycle-runtime-compose = { group = "androidx.lifecycle", name = "lifecycle-runtime-compose", version.ref = "lifecycle" } +androidx-lifecycle-viewmodel-compose = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-compose", version.ref = "lifecycle" } + +androidx-webkit = { module = "androidx.webkit:webkit", version.ref = "webkit" } + +com-google-accompanist-drawablepainter = { group = "com.google.accompanist", name = "accompanist-drawablepainter", version.ref = "accompanist" } +com-google-accompanist-navigation-animation = { group = "com.google.accompanist", name = "accompanist-navigation-animation", version.ref = "accompanist" } +com-google-accompanist-systemuicontroller = { group = "com.google.accompanist", name = "accompanist-systemuicontroller", version.ref = "accompanist" } +com-google-accompanist-webview = { group = "com.google.accompanist", name = "accompanist-webview", version.ref = "accompanist" } + +com-github-topjohnwu-libsu-core = { group = "com.github.topjohnwu.libsu", name = "core", version.ref = "libsu" } +com-github-topjohnwu-libsu-service = { group = "com.github.topjohnwu.libsu", name = "service", version.ref = "libsu" } +com-github-topjohnwu-libsu-io= { group = "com.github.topjohnwu.libsu", name = "io", version.ref = "libsu" } + +dev-rikka-rikkax-parcelablelist = { module = "dev.rikka.rikkax.parcelablelist:parcelablelist", version.ref = "parcelablelist" } + +io-coil-kt-coil-compose = { group = "io.coil-kt", name = "coil-compose", version.ref = "coil-compose" } + +kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kotlinx-coroutines" } + +me-zhanghai-android-appiconloader-coil = { group = "me.zhanghai.android.appiconloader", name = "appiconloader-coil", version.ref = "appiconloader-coil" } + +compose-destinations-animations-core = { group = "io.github.raamcosta.compose-destinations", name = "animations-core", version.ref = "compose-destination" } +compose-destinations-ksp = { group = "io.github.raamcosta.compose-destinations", name = "ksp", version.ref = "compose-destination" } + +sheet-compose-dialogs-core = { group = "com.maxkeppeler.sheets-compose-dialogs", name = "core", version.ref = "sheets-compose-dialogs" } +sheet-compose-dialogs-list = { group = "com.maxkeppeler.sheets-compose-dialogs", name = "list", version.ref = "sheets-compose-dialogs" } +sheet-compose-dialogs-input = { group = "com.maxkeppeler.sheets-compose-dialogs", name = "input", version.ref = "sheets-compose-dialogs" } + +markdown = { group = "io.noties.markwon", name = "core", version.ref = "markdown" } \ No newline at end of file diff --git a/KernelSU/manager/gradle/wrapper/gradle-wrapper.jar b/KernelSU/manager/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..e6441136f3d4ba8a0da8d277868979cfbc8ad796 GIT binary patch literal 43453 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 yu?e%!_ptzGB|8GrCfu%p?(_ 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

NnX)EH+Nua)3Y(c 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 '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/KernelSU/manager/gradlew.bat b/KernelSU/manager/gradlew.bat new file mode 100644 index 000000000000..25da30dbdeee --- /dev/null +++ b/KernelSU/manager/gradlew.bat @@ -0,0 +1,92 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/KernelSU/manager/settings.gradle.kts b/KernelSU/manager/settings.gradle.kts new file mode 100644 index 000000000000..2230bf48671a --- /dev/null +++ b/KernelSU/manager/settings.gradle.kts @@ -0,0 +1,21 @@ +@file:Suppress("UnstableApiUsage") + +enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") + +pluginManagement { + repositories { + google() + mavenCentral() + } +} + +dependencyResolutionManagement { + repositories { + google() + mavenCentral() + maven("https://jitpack.io") + } +} + +rootProject.name = "KernelSU" +include(":app") diff --git a/KernelSU/manager/sign.example.properties b/KernelSU/manager/sign.example.properties new file mode 100644 index 000000000000..bc70a60cae89 --- /dev/null +++ b/KernelSU/manager/sign.example.properties @@ -0,0 +1,4 @@ +KEYSTORE_FILE= +KEYSTORE_PASSWORD= +KEY_ALIAS= +KEY_PASSWORD= diff --git a/KernelSU/scripts/abi_gki_all.py b/KernelSU/scripts/abi_gki_all.py new file mode 100644 index 000000000000..d433634aec2f --- /dev/null +++ b/KernelSU/scripts/abi_gki_all.py @@ -0,0 +1,10 @@ +from xml.dom.minidom import parse +import xml.dom.minidom +import sys + + +DOMTree = xml.dom.minidom.parse(sys.argv[1]) +symbols = DOMTree.getElementsByTagName("elf-symbol") +print("[abi_symbol_list]") +for symbol in symbols: + print(" " + symbol.getAttribute("name")) diff --git a/KernelSU/scripts/add_device_handler.py b/KernelSU/scripts/add_device_handler.py new file mode 100644 index 000000000000..f18ad3a215e0 --- /dev/null +++ b/KernelSU/scripts/add_device_handler.py @@ -0,0 +1,50 @@ +import json +import sys +import os + + +def main(): + assert len(sys.argv) == 2 + file_name = sys.argv[1] + github = "https://github.com/" + issue_content = os.environ["ISSUE_CONTENT"] + lines = issue_content.split("\n\n") + assert len(lines) == 6 + url = lines[1] + print(url) + device = lines[3] + print(device) + code_of_conduct = lines[5] + print(code_of_conduct) + assert code_of_conduct.find("[X]") > 0 + tmp = url.removesuffix("/").replace(github, "").split("/") + print(tmp) + assert len(tmp) == 2 + maintainer = tmp[0] + print(maintainer) + maintainer_link = "%s%s" % (github, maintainer) + print(maintainer_link) + kernel_name = tmp[1] + print(kernel_name) + kernel_link = "%s%s/%s" % (github, maintainer, kernel_name) + print(kernel_link) + with open(file_name, "r") as f: + data = json.loads(f.read()) + data.append( + { + "maintainer": maintainer, + "maintainer_link": maintainer_link, + "kernel_name": kernel_name, + "kernel_link": kernel_link, + "devices": device, + } + ) + os.remove(file_name) + with open(file_name, "w") as f: + f.write(json.dumps(data, indent=4)) + os.system("echo success=true >> $GITHUB_OUTPUT") + os.system("echo device=%s >> $GITHUB_OUTPUT" % device) + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/KernelSU/scripts/allowlist.bt b/KernelSU/scripts/allowlist.bt new file mode 100644 index 000000000000..d95bb5ac49a9 --- /dev/null +++ b/KernelSU/scripts/allowlist.bt @@ -0,0 +1,89 @@ +// Define constants as per the provided structure. +#define KSU_MAX_PACKAGE_NAME 256 +#define KSU_MAX_GROUPS 32 +#define KSU_SELINUX_DOMAIN 64 + +// Define the root_profile structure with padding for 64-bit alignment. +struct root_profile { + uint32 uid; + uint32 gid; + + uint32 groups_count; + uint32 groups[KSU_MAX_GROUPS]; + char padding1[4]; // Padding for 64-bit alignment. + + struct { + uint64 effective; + uint64 permitted; + uint64 inheritable; + } capabilities; + + char selinux_domain[KSU_SELINUX_DOMAIN]; + + uint32 namespaces; + char padding2[4]; // Padding for 64-bit alignment. +}; + +// Define the non_root_profile structure with padding for 64-bit alignment. +struct non_root_profile { + byte umount_modules; + char padding[7]; // Padding to make the total size a multiple of 8. +}; + +// Define the rp_config structure with padding for 64-bit alignment. +struct rp_config_t { + byte use_default; + + char template_name[KSU_MAX_PACKAGE_NAME]; + char padding[7]; // Padding to make the total size a multiple of 8. + + struct root_profile profile; +}; + +// Define the nrp_config structure with padding for 64-bit alignment. +struct nrp_config_t { + byte use_default; + char padding1[7]; // Padding to make the total size a multiple of 8. + + struct non_root_profile profile; + char padding2[488]; // Padding to align the union +}; + +// Define the main app_profile structure +typedef struct { + uint32 version; + char key[KSU_MAX_PACKAGE_NAME]; + int32 current_uid; + int64 allow_su; + + // Based on allow_su, decide which profile to use + if (allow_su != 0) { + rp_config_t rp_config; + } else { + nrp_config_t nrp_config; + } + +} app_profile; + +// Define the file header with magic number and version +typedef struct { + uint32 magic; + uint32 version; +} file_header; + +// Main entry for parsing the file +file_header header; + +if (header.magic != 0x7f4b5355) { + Printf("Invalid file magic number.\n"); + return; +} + +FSeek(8); // Skip the header + + +// Continually read app_profile instances until end of file +while (!FEof()) { + app_profile profile; +} + diff --git a/KernelSU/scripts/bin2c.py b/KernelSU/scripts/bin2c.py new file mode 100644 index 000000000000..585131329b25 --- /dev/null +++ b/KernelSU/scripts/bin2c.py @@ -0,0 +1,51 @@ +#!/usr/bin/python3 + +import argparse +import os +import re + +line_size = 80 + + +def bin2c(filename, varname='data'): + if not os.path.isfile(filename): + print('File "%s" is not found!' % filename) + return '' + if not re.match('[a-zA-Z_][a-zA-Z0-9_]*', varname): + print('Invalid variable name "%s"' % varname) + return + with open(filename, 'rb') as in_file: + data = in_file.read() + # limit the line length + byte_len = 6 # '0x00, ' + out = 'unsigned int %s_size = %d;\n' \ + 'const char %s[%d] = {\n' % (varname, len(data), varname, len(data)) + line = '' + for byte in data: + line += '0x%02x, ' % byte + if len(line) + 4 + byte_len >= line_size: + out += ' ' * 4 + line + '\n' + line = '' + # add the last line + if len(line) + 4 + byte_len < line_size: + out += ' ' * 4 + line + '\n' + # strip the last comma + out = out.rstrip(', \n') + '\n' + out += '};' + return out + + +def main(): + """ Main func """ + parser = argparse.ArgumentParser() + parser.add_argument( + 'filename', help='filename to convert to C array') + parser.add_argument( + 'varname', nargs='?', help='variable name', default='data') + args = parser.parse_args() + # print out the data + print(bin2c(args.filename, args.varname)) + + +if __name__ == '__main__': + main() diff --git a/KernelSU/scripts/ksubot.py b/KernelSU/scripts/ksubot.py new file mode 100644 index 000000000000..c3b3672772ed --- /dev/null +++ b/KernelSU/scripts/ksubot.py @@ -0,0 +1,101 @@ +import asyncio +import os +import sys +from telethon import TelegramClient +from telethon.tl.functions.help import GetConfigRequest + +API_ID = 611335 +API_HASH = "d524b414d21f4d37f08684c1df41ac9c" + + +BOT_TOKEN = os.environ.get("BOT_TOKEN") +CHAT_ID = os.environ.get("CHAT_ID") +MESSAGE_THREAD_ID = os.environ.get("MESSAGE_THREAD_ID") +COMMIT_URL = os.environ.get("COMMIT_URL") +COMMIT_MESSAGE = os.environ.get("COMMIT_MESSAGE") +RUN_URL = os.environ.get("RUN_URL") +TITLE = os.environ.get("TITLE") +VERSION = os.environ.get("VERSION") +MSG_TEMPLATE = """ +**{title}** +#ci_{version} +``` +{commit_message} +``` +[Commit]({commit_url}) +[Workflow run]({run_url}) +""".strip() + + +def get_caption(): + msg = MSG_TEMPLATE.format( + title=TITLE, + version=VERSION, + commit_message=COMMIT_MESSAGE, + commit_url=COMMIT_URL, + run_url=RUN_URL, + ) + if len(msg) > 1024: + return COMMIT_URL + return msg + + +def check_environ(): + global CHAT_ID, MESSAGE_THREAD_ID + if BOT_TOKEN is None: + print("[-] Invalid BOT_TOKEN") + exit(1) + if CHAT_ID is None: + print("[-] Invalid CHAT_ID") + exit(1) + else: + CHAT_ID = int(CHAT_ID) + if COMMIT_URL is None: + print("[-] Invalid COMMIT_URL") + exit(1) + if COMMIT_MESSAGE is None: + print("[-] Invalid COMMIT_MESSAGE") + exit(1) + if RUN_URL is None: + print("[-] Invalid RUN_URL") + exit(1) + if TITLE is None: + print("[-] Invalid TITLE") + exit(1) + if VERSION is None: + print("[-] Invalid VERSION") + exit(1) + if MESSAGE_THREAD_ID is None: + print("[-] Invaild MESSAGE_THREAD_ID") + exit(1) + else: + MESSAGE_THREAD_ID = int(MESSAGE_THREAD_ID) + + +async def main(): + print("[+] Uploading to telegram") + check_environ() + files = sys.argv[1:] + print("[+] Files:", files) + if len(files) <= 0: + print("[-] No files to upload") + exit(1) + print("[+] Logging in Telegram with bot") + script_dir = os.path.dirname(os.path.abspath(sys.argv[0])) + session_dir = os.path.join(script_dir, "ksubot") + async with await TelegramClient(session=session_dir, api_id=API_ID, api_hash=API_HASH).start(bot_token=BOT_TOKEN) as bot: + caption = [""] * len(files) + caption[-1] = get_caption() + print("[+] Caption: ") + print("---") + print(caption) + print("---") + print("[+] Sending") + await bot.send_file(entity=CHAT_ID, file=files, caption=caption, reply_to=MESSAGE_THREAD_ID, parse_mode="markdown") + print("[+] Done!") + +if __name__ == "__main__": + try: + asyncio.run(main()) + except Exception as e: + print(f"[-] An error occurred: {e}") diff --git a/KernelSU/userspace/ksud/.gitignore b/KernelSU/userspace/ksud/.gitignore new file mode 100644 index 000000000000..3c71873d9fb4 --- /dev/null +++ b/KernelSU/userspace/ksud/.gitignore @@ -0,0 +1,2 @@ +/target +.cargo/ \ No newline at end of file diff --git a/KernelSU/userspace/ksud/Cargo.lock b/KernelSU/userspace/ksud/Cargo.lock new file mode 100644 index 000000000000..4e0b195fb99d --- /dev/null +++ b/KernelSU/userspace/ksud/Cargo.lock @@ -0,0 +1,1860 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "addr2line" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + +[[package]] +name = "adler32" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aae1277d39aeec15cb388266ecc24b11c80469deae6067e17a1a7aa9e5c1f234" + +[[package]] +name = "aes" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +dependencies = [ + "cfg-if 1.0.0", + "cipher", + "cpufeatures", +] + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "android-properties" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc7eb209b1518d6bb87b283c20095f5228ecda460da70b44f0802523dea6da04" + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_log-sys" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ecc8056bf6ab9892dcd53216c83d1597487d7dacac16c8df6b877d127df9937" + +[[package]] +name = "android_logger" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c494134f746c14dc653a35a4ea5aca24ac368529da5370ecf41fe0341c35772f" +dependencies = [ + "android_log-sys", + "env_logger 0.10.2", + "log", + "once_cell", +] + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anstream" +version = "0.6.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "418c75fa768af9c03be99d17643f93f79bbba589895012a80e3452a19ddda15b" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "038dfcf04a5feb68e9c60b21c9625a54c2c0616e79b72b0fd87075a056ae1d1b" + +[[package]] +name = "anstyle-parse" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c03a11a9034d92058ceb6ee011ce58af4a9bf61491aa7e1e59ecd24bd40d22d4" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a64c907d4e79225ac72e2a354c9ce84d50ebb4586dee56c82b3ee73004f537f5" +dependencies = [ + "windows-sys", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61a38449feb7068f52bb06c12759005cf459ee52bb4adc1d5a7c4322d716fb19" +dependencies = [ + "anstyle", + "windows-sys", +] + +[[package]] +name = "anyhow" +version = "1.0.86" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da" + +[[package]] +name = "arbitrary" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d5a26814d8dcb93b0e5a0ff3c6d80a8843bafb21b39e8e18a6f05471870e110" +dependencies = [ + "derive_arbitrary", +] + +[[package]] +name = "async-trait" +version = "0.1.80" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c6fa2087f2753a7da8cc1c0dbfcf89579dd57458e36769de5ac750b4671737ca" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.65", +] + +[[package]] +name = "autocfg" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" + +[[package]] +name = "backtrace" +version = "0.3.71" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26b05800d2e817c8b3b4b54abd461726265fa9789ae34330622f2db9ee696f9d" +dependencies = [ + "addr2line", + "cc", + "cfg-if 1.0.0", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "bitflags" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "514de17de45fdb8dc022b1a7975556c53c86f9f0aa5f534b98977b171857c2c9" + +[[package]] +name = "bzip2" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bdb116a6ef3f6c3698828873ad02c3014b3c85cadb88496095628e3ef1e347f8" +dependencies = [ + "bzip2-sys", + "libc", +] + +[[package]] +name = "bzip2-sys" +version = "0.1.11+1.0.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "736a955f3fa7875102d57c82b8cac37ec45224a07fd32d58f9f7a186b6cd4cdc" +dependencies = [ + "cc", + "libc", + "pkg-config", +] + +[[package]] +name = "cc" +version = "1.0.98" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "41c270e7540d725e65ac7f1b212ac8ce349719624d7bcff99f8e2e488e8cf03f" +dependencies = [ + "jobserver", + "libc", + "once_cell", +] + +[[package]] +name = "cfg-if" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "chrono" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits", + "wasm-bindgen", + "windows-targets", +] + +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", +] + +[[package]] +name = "clap" +version = "4.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90bc066a67923782aa8515dbaea16946c5bcc5addbd668bb80af688e53e548a0" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae129e2e766ae0ec03484e609954119f123cc1fe650337e155d03b022f24f7b4" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "528131438037fd55894f62d6e9f068b8f45ac57ffa77517819645d10aed04f64" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn 2.0.65", +] + +[[package]] +name = "clap_lex" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98cc8fbded0c607b7ba9dd60cd98df59af97e84d24e49c8557331cfc26d301ce" + +[[package]] +name = "colorchoice" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b6a852b24ab71dffc585bcb46eaf7959d175cb865a7152e35b348d1b2960422" + +[[package]] +name = "const_format" +version = "0.2.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3a214c7af3d04997541b18d432afaff4c455e79e2029079647e72fc2bd27673" +dependencies = [ + "const_format_proc_macros", +] + +[[package]] +name = "const_format_proc_macros" +version = "0.2.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7f6ff08fd20f4f299298a28e2dfa8a8ba1036e6cd2460ac1de7b425d76f2500" +dependencies = [ + "proc-macro2", + "quote", + "unicode-xid", +] + +[[package]] +name = "constant_time_eq" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" + +[[package]] +name = "core-foundation-sys" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + +[[package]] +name = "cpufeatures" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "crossbeam" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1137cd7e7fc0fb5d3c5a8678be38ec56e819125d8d7907411fe24ccb943faca8" +dependencies = [ + "crossbeam-channel", + "crossbeam-deque", + "crossbeam-epoch", + "crossbeam-queue", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-queue" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "deflate64" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83ace6c86376be0b6cdcf3fb41882e81d94b31587573d1cfa9d01cd06bba210d" + +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", +] + +[[package]] +name = "derive-new" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d150dea618e920167e5973d70ae6ece4385b7164e0d799fe7c122dd0a5d912ad" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.65", +] + +[[package]] +name = "derive_arbitrary" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67e77553c4162a157adbf834ebae5b415acbecbeafc7a74b0e886657506a7611" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.65", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", + "subtle", +] + +[[package]] +name = "displaydoc" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "487585f4d0c6655fe74905e2504d8ad6908e4db67f744eb140876906c2f3175d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.65", +] + +[[package]] +name = "either" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3dca9240753cf90908d7e4aac30f630662b02aebaa1b58a3cadabdb23385b58b" + +[[package]] +name = "encoding_rs" +version = "0.8.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b45de904aa0b010bce2ab45264d0631681847fa7b6f2eaa7dab7619943bc4f59" +dependencies = [ + "cfg-if 1.0.0", +] + +[[package]] +name = "env_filter" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a009aa4810eb158359dda09d0c87378e4bbb89b5a801f016885a4707ba24f7ea" +dependencies = [ + "log", +] + +[[package]] +name = "env_logger" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580" +dependencies = [ + "log", + "regex", +] + +[[package]] +name = "env_logger" +version = "0.11.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b35839ba51819680ba087cd351788c9a3c476841207e0b8cee0b04722343b9" +dependencies = [ + "env_filter", + "log", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1" +dependencies = [ + "errno-dragonfly", + "libc", + "winapi", +] + +[[package]] +name = "errno" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +dependencies = [ + "libc", + "windows-sys", +] + +[[package]] +name = "errno-dragonfly" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "extattr" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b59f8a77817ff1b795adafc535941bdf664184f5f95e0b6d1d77dd6d12815dc" +dependencies = [ + "bitflags 1.3.2", + "errno 0.2.8", + "libc", +] + +[[package]] +name = "flate2" +version = "1.0.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fuchsia-cprng" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba" + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getopts" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5" +dependencies = [ + "unicode-width", +] + +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if 1.0.0", + "libc", + "wasi", +] + +[[package]] +name = "gimli" +version = "0.28.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest", +] + +[[package]] +name = "hole-punch" +version = "0.0.4-alpha.0" +source = "git+https://github.com/tiann/hole-punch#11ab7a61bfb98682b72fd7f58a47d8e5d997328e" +dependencies = [ + "cfg-if 0.1.10", + "errno 0.2.8", + "libc", + "memmap", + "thiserror", + "winapi", +] + +[[package]] +name = "home" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +dependencies = [ + "windows-sys", +] + +[[package]] +name = "humansize" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6cb51c9a029ddc91b07a787f1d86b53ccfa49b0e86688c946ebe8d3555685dd7" +dependencies = [ + "libm", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.60" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "include-flate" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2e11569346406931d20276cc460215ee2826e7cad43aa986999cb244dd7adb0" +dependencies = [ + "include-flate-codegen-exports", + "lazy_static", + "libflate", +] + +[[package]] +name = "include-flate-codegen" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a7d6e1419fa3129eb0802b4c99603c0d425c79fb5d76191d5a20d0ab0d664e8" +dependencies = [ + "libflate", + "proc-macro-hack", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "include-flate-codegen-exports" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75657043ffe3d8280f1cb8aef0f505532b392ed7758e0baeac22edadcee31a03" +dependencies = [ + "include-flate-codegen", + "proc-macro-hack", +] + +[[package]] +name = "indexmap" +version = "2.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "168fb715dda47215e360912c096649d23d58bf392ac62f73919e831745e40f26" +dependencies = [ + "equivalent", + "hashbrown", +] + +[[package]] +name = "inout" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +dependencies = [ + "generic-array", +] + +[[package]] +name = "is_executable" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa9acdc6d67b75e626ad644734e8bc6df893d9cd2a834129065d3dd6158ea9c8" +dependencies = [ + "winapi", +] + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8478577c03552c21db0e2724ffb8986a5ce7af88107e6be5d2ee6e158c12800" + +[[package]] +name = "itoa" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b" + +[[package]] +name = "java-properties" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37bf6f484471c451f2b51eabd9e66b3fa7274550c5ec4b6c3d6070840945117f" +dependencies = [ + "encoding_rs", + "lazy_static", + "regex", +] + +[[package]] +name = "jobserver" +version = "0.1.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2b099aaa34a9751c5bf0878add70444e1ed2dd73f347be99003d4577277de6e" +dependencies = [ + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "jwalk" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2735847566356cd2179a2a38264839308f7079fa96e6bd5a42d740460e003c56" +dependencies = [ + "crossbeam", + "rayon", +] + +[[package]] +name = "ksud" +version = "0.1.0" +dependencies = [ + "android-properties", + "android_logger", + "anyhow", + "chrono", + "clap", + "const_format", + "derive-new", + "encoding_rs", + "env_logger 0.11.3", + "extattr", + "getopts", + "hole-punch", + "humansize", + "is_executable", + "java-properties", + "jwalk", + "libc", + "log", + "loopdev", + "nom", + "procfs", + "regex", + "retry", + "rust-embed", + "rustix 0.38.30", + "serde", + "serde_json", + "sha1", + "sha256", + "tempdir", + "which", + "zip 2.1.0", + "zip-extensions", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.155" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c" + +[[package]] +name = "libflate" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ff4ae71b685bbad2f2f391fe74f6b7659a34871c08b210fdc039e43bee07d18" +dependencies = [ + "adler32", + "crc32fast", + "libflate_lz77", +] + +[[package]] +name = "libflate_lz77" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a52d3a8bfc85f250440e4424db7d857e241a3aebbbe301f3eb606ab15c39acbf" +dependencies = [ + "rle-decode-fast", +] + +[[package]] +name = "libm" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ec2a862134d2a7d32d7983ddcdd1c4923530833c9f2ea1a44fc5fa473989058" + +[[package]] +name = "linux-raw-sys" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" + +[[package]] +name = "lockfree-object-pool" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9374ef4228402d4b7e403e5838cb880d9ee663314b0a900d5a6aabf0c213552e" + +[[package]] +name = "log" +version = "0.4.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" + +[[package]] +name = "loopdev" +version = "0.5.0" +source = "git+https://github.com/Kernel-SU/loopdev#7a921f8d966477a645b1188732fac486c71a68ef" +dependencies = [ + "errno 0.2.8", + "libc", +] + +[[package]] +name = "memchr" +version = "2.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c8640c5d730cb13ebd907d8d04b52f55ac9a2eec55b440c8892f40d56c76c1d" + +[[package]] +name = "memmap" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6585fd95e7bb50d6cc31e20d4cf9afb4e2ba16c5846fc76793f11218da9c475b" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "miniz_oxide" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87dfd01fe195c66b572b37921ad8803d010623c0aca821bea2302239d155cdae" +dependencies = [ + "adler", +] + +[[package]] +name = "nom" +version = "7.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", +] + +[[package]] +name = "object" +version = "0.32.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +dependencies = [ + "memchr", +] + +[[package]] +name = "once_cell" +version = "1.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" + +[[package]] +name = "password-hash" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7676374caaee8a325c9e7a2ae557f216c5563a171d6997b0ef8a65af35147700" +dependencies = [ + "base64ct", + "rand_core 0.6.4", + "subtle", +] + +[[package]] +name = "pbkdf2" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83a0692ec44e4cf1ef28ca317f14f8f07da2d95ec3fa01f86e4467b725e60917" +dependencies = [ + "digest", + "hmac", + "password-hash", + "sha2", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda66fc9667c18cb2758a2ac84d1167245054bcf85d5d1aaa6923f45801bdd02" + +[[package]] +name = "pkg-config" +version = "0.3.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de" + +[[package]] +name = "proc-macro-hack" +version = "0.5.20+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" + +[[package]] +name = "proc-macro2" +version = "1.0.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b33eb56c327dec362a9e55b3ad14f9d2f0904fb5a5b03b513ab5465399e9f43" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "procfs" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "731e0d9356b0c25f16f33b5be79b1c57b562f141ebfcdb0ad8ac2c13a24293b4" +dependencies = [ + "bitflags 2.5.0", + "chrono", + "flate2", + "hex", + "lazy_static", + "procfs-core", + "rustix 0.38.34", +] + +[[package]] +name = "procfs-core" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d3554923a69f4ce04c4a754260c338f505ce22642d3830e049a399fc2059a29" +dependencies = [ + "bitflags 2.5.0", + "chrono", + "hex", +] + +[[package]] +name = "quote" +version = "1.0.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fa76aaf39101c457836aec0ce2316dbdc3ab723cdda1c6bd4e6ad4208acaca7" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "rand" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293" +dependencies = [ + "fuchsia-cprng", + "libc", + "rand_core 0.3.1", + "rdrand", + "winapi", +] + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + +[[package]] +name = "rand_core" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b" +dependencies = [ + "rand_core 0.4.2", +] + +[[package]] +name = "rand_core" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc" + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "rayon" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa" +dependencies = [ + "either", + "rayon-core", +] + +[[package]] +name = "rayon-core" +version = "1.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" +dependencies = [ + "crossbeam-deque", + "crossbeam-utils", +] + +[[package]] +name = "rdrand" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2" +dependencies = [ + "rand_core 0.3.1", +] + +[[package]] +name = "regex" +version = "1.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c117dbdfde9c8308975b6a18d71f3f385c89461f7b3fb054288ecf2a2058ba4c" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56" + +[[package]] +name = "remove_dir_all" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7" +dependencies = [ + "winapi", +] + +[[package]] +name = "retry" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9166d72162de3575f950507683fac47e30f6f2c3836b71b7fbc61aa517c9c5f4" +dependencies = [ + "rand 0.8.5", +] + +[[package]] +name = "rle-decode-fast" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3582f63211428f83597b51b2ddb88e2a91a9d52d12831f9d08f5e624e8977422" + +[[package]] +name = "rust-embed" +version = "8.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19549741604902eb99a7ed0ee177a0663ee1eda51a29f71401f166e47e77806a" +dependencies = [ + "include-flate", + "rust-embed-impl", + "rust-embed-utils", + "walkdir", +] + +[[package]] +name = "rust-embed-impl" +version = "8.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb9f96e283ec64401f30d3df8ee2aaeb2561f34c824381efa24a35f79bf40ee4" +dependencies = [ + "proc-macro2", + "quote", + "rust-embed-utils", + "syn 2.0.65", + "walkdir", +] + +[[package]] +name = "rust-embed-utils" +version = "8.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38c74a686185620830701348de757fd36bef4aa9680fd23c49fc539ddcc1af32" +dependencies = [ + "sha2", + "walkdir", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + +[[package]] +name = "rustix" +version = "0.38.30" +source = "git+https://github.com/Kernel-SU/rustix.git?branch=main#0e270bce2d97466be6b987bb5f7ea5b1e8d84969" +dependencies = [ + "bitflags 2.5.0", + "errno 0.3.9", + "itoa", + "libc", + "linux-raw-sys", + "once_cell", + "windows-sys", +] + +[[package]] +name = "rustix" +version = "0.38.34" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70dc5ec042f7a43c4a73241207cecc9873a06d45debb38b329f8541d85c2730f" +dependencies = [ + "bitflags 2.5.0", + "errno 0.3.9", + "libc", + "linux-raw-sys", + "windows-sys", +] + +[[package]] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "serde" +version = "1.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "226b61a0d411b2ba5ff6d7f73a476ac4f8bb900373459cd00fab8512828ba395" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.202" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6048858004bcff69094cd972ed40a32500f153bd3be9f716b2eed2e8217c4838" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.65", +] + +[[package]] +name = "serde_json" +version = "1.0.117" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "455182ea6142b14f93f4bc5320a2b31c1f266b66a4a5c858b013302a5d8cbfc3" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if 1.0.0", + "cpufeatures", + "digest", +] + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if 1.0.0", + "cpufeatures", + "digest", +] + +[[package]] +name = "sha256" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18278f6a914fa3070aa316493f7d2ddfb9ac86ebc06fa3b83bffda487e9065b0" +dependencies = [ + "async-trait", + "bytes", + "hex", + "sha2", + "tokio", +] + +[[package]] +name = "simd-adler32" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "subtle" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" + +[[package]] +name = "syn" +version = "1.0.109" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "syn" +version = "2.0.65" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2863d96a84c6439701d7a38f9de935ec562c8832cc55d1dde0f513b52fad106" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "tempdir" +version = "0.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15f2b5fb00ccdf689e0149d1b1b3c03fead81c2b37735d812fa8bddbbf41b6d8" +dependencies = [ + "rand 0.4.6", + "remove_dir_all", +] + +[[package]] +name = "thiserror" +version = "1.0.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c546c80d6be4bc6a00c0f01730c08df82eaa7a7a61f11d656526506112cc1709" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46c3384250002a6d5af4d114f2845d37b57521033f30d5c3f46c4d70e1197533" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.65", +] + +[[package]] +name = "time" +version = "0.3.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +dependencies = [ + "deranged", + "num-conv", + "powerfmt", + "serde", + "time-core", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "tokio" +version = "1.37.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1adbebffeca75fcfd058afa480fb6c0b81e165a0323f9c9d39c9697e37c46787" +dependencies = [ + "backtrace", + "bytes", + "pin-project-lite", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "unicode-ident" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" + +[[package]] +name = "unicode-width" +version = "0.1.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68f5e5f3158ecfd4b8ff6fe086db7c8467a2dfdac97fe420f2b7c4aa97af66d6" + +[[package]] +name = "unicode-xid" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" + +[[package]] +name = "utf8parse" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasm-bindgen" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" +dependencies = [ + "cfg-if 1.0.0", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.65", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.65", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" + +[[package]] +name = "which" +version = "6.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8211e4f58a2b2805adfbefbc07bab82958fc91e3836339b1ab7ae32465dce0d7" +dependencies = [ + "either", + "home", + "rustix 0.38.34", + "winsafe", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" +dependencies = [ + "windows-sys", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets", +] + +[[package]] +name = "windows-targets" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f0713a46559409d202e70e28227288446bf7841d3211583a4b53e3f6d96e7eb" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_gnullvm", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7088eed71e8b8dda258ecc8bac5fb1153c5cffaf2578fc8ff5d61e23578d3263" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9985fd1504e250c615ca5f281c3f7a6da76213ebd5ccc9561496568a2752afb6" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88ba073cf16d5372720ec942a8ccbf61626074c6d4dd2e745299726ce8b89670" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87f4261229030a858f36b459e748ae97545d6f1ec60e5e0d6a3d32e0dc232ee9" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db3c2bf3d13d5b658be73463284eaf12830ac9a26a90c717b7f771dfe97487bf" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4e4246f76bdeff09eb48875a0fd3e2af6aada79d409d33011886d3e1581517d9" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "852298e482cd67c356ddd9570386e2862b5673c85bd5f88df9ab6802b334c596" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bec47e5bfd1bff0eeaf6d8b485cc1074891a197ab4225d504cb7a1ab88b02bf0" + +[[package]] +name = "winsafe" +version = "0.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d135d17ab770252ad95e9a872d365cf3090e3be864a34ab46f48555993efc904" + +[[package]] +name = "zip" +version = "0.6.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "760394e246e4c28189f19d488c058bf16f564016aefac5d32bb1f3b51d5e9261" +dependencies = [ + "aes", + "byteorder", + "bzip2", + "constant_time_eq", + "crc32fast", + "crossbeam-utils", + "flate2", + "hmac", + "pbkdf2", + "sha1", + "time", + "zstd 0.11.2+zstd.1.5.2", +] + +[[package]] +name = "zip" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2568cd0f20e86cd9a7349fe05178f7bd22f22724678448ae5a9bac266df2689" +dependencies = [ + "arbitrary", + "bzip2", + "crc32fast", + "crossbeam-utils", + "deflate64", + "displaydoc", + "flate2", + "indexmap", + "memchr", + "thiserror", + "time", + "zopfli", + "zstd 0.13.1", +] + +[[package]] +name = "zip-extensions" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cecf62554c4ff96bce01a7ef123d160c3ffe9180638820f8b4d545c65b221b8c" +dependencies = [ + "zip 0.6.6", +] + +[[package]] +name = "zopfli" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5019f391bac5cf252e93bbcc53d039ffd62c7bfb7c150414d61369afe57e946" +dependencies = [ + "bumpalo", + "crc32fast", + "lockfree-object-pool", + "log", + "once_cell", + "simd-adler32", +] + +[[package]] +name = "zstd" +version = "0.11.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20cc960326ece64f010d2d2107537f26dc589a6573a316bd5b1dba685fa5fde4" +dependencies = [ + "zstd-safe 5.0.2+zstd.1.5.2", +] + +[[package]] +name = "zstd" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d789b1514203a1120ad2429eae43a7bd32b90976a7bb8a05f7ec02fa88cc23a" +dependencies = [ + "zstd-safe 7.1.0", +] + +[[package]] +name = "zstd-safe" +version = "5.0.2+zstd.1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d2a5585e04f9eea4b2a3d1eca508c4dee9592a89ef6f450c11719da0726f4db" +dependencies = [ + "libc", + "zstd-sys", +] + +[[package]] +name = "zstd-safe" +version = "7.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cd99b45c6bc03a018c8b8a86025678c87e55526064e38f9df301989dce7ec0a" +dependencies = [ + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.10+zstd.1.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c253a4914af5bafc8fa8c86ee400827e83cf6ec01195ec1f1ed8441bf00d65aa" +dependencies = [ + "cc", + "pkg-config", +] diff --git a/KernelSU/userspace/ksud/Cargo.toml b/KernelSU/userspace/ksud/Cargo.toml new file mode 100644 index 000000000000..d031660307dc --- /dev/null +++ b/KernelSU/userspace/ksud/Cargo.toml @@ -0,0 +1,63 @@ +[package] +name = "ksud" +version = "0.1.0" +edition = "2021" +rust-version = "1.77.2" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +anyhow = "1" +clap = { version = "4", features = ["derive"] } +const_format = "0.2" +zip = { version = "2", features = [ + "deflate", + "deflate64", + "bzip2", + "time", + "zstd", +], default-features = false } +zip-extensions = "0.6" +java-properties = "2" +log = "0.4" +env_logger = { version = "0.11", default-features = false } +serde = { version = "1" } +serde_json = "1" +regex = "1" +encoding_rs = "0.8" +retry = "2" +humansize = "2" +libc = "0.2" +extattr = "1" +jwalk = "0.8" +is_executable = "1" +nom = "7" +derive-new = "0.6" +rust-embed = { version = "8", features = [ + "debug-embed", + "compression", # must clean build after updating binaries +] } +which = "6" +getopts = "0.2" +sha256 = "1" +sha1 = "0.10" +tempdir = "0.3" +chrono = "0.4" +hole-punch = { git = "https://github.com/tiann/hole-punch" } + +[target.'cfg(any(target_os = "android", target_os = "linux"))'.dependencies] +rustix = { git = "https://github.com/Kernel-SU/rustix.git", branch = "main", features = [ + "all-apis", +] } +# some android specific dependencies which compiles under unix are also listed here for convenience of coding +android-properties = { version = "0.2", features = ["bionic-deprecated"] } +procfs = "0.16" +loopdev = { git = "https://github.com/Kernel-SU/loopdev" } + +[target.'cfg(target_os = "android")'.dependencies] +android_logger = "0.13" + +[profile.release] +strip = true +opt-level = "z" +lto = true \ No newline at end of file diff --git a/KernelSU/userspace/ksud/bin/.gitignore b/KernelSU/userspace/ksud/bin/.gitignore new file mode 100644 index 000000000000..1464b7ed27b3 --- /dev/null +++ b/KernelSU/userspace/ksud/bin/.gitignore @@ -0,0 +1 @@ +**/*.ko \ No newline at end of file diff --git a/KernelSU/userspace/ksud/bin/aarch64/bootctl b/KernelSU/userspace/ksud/bin/aarch64/bootctl new file mode 100644 index 0000000000000000000000000000000000000000..cf5c61368467dace2edde81e880868f076cb2f5c GIT binary patch literal 154248 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

Nf7BS@ zc|Urfyntt#hUh@ZdpY{#uW3x=X}aNx2@V`7Wk! zyvy}KCAvV?T-E_=7!95D6G$ihmrN)9I;0VAB<;}y6@+rx`g7j+&awP`B=kVdL4I^k zN_wE!eW{&q8xi-u^gwy=`p42;1$1EHKEmW}V=!Qb=Ou+6DE5ZYwjQXqNGtR}twuRQ z57Zibr&V}&+B03P2dW3s3*Py5JF+ioUN0=Y--yLpK<8a0u_+Ow<_NE zR^xAbAEXYl0l?`da8c_Z8wh{WL6(ocrnB|$;kE~UDR@`Sbdcdq^)dLx=SWNk8HKBL zkgakty`MIxgDlwj{&bMFp!oNpgUpxW--iw|55#ADRy_2rS3(Dw6VfYnkg-0++-9PK zjL&bblBo`|6=*|Cx}nZhk^5m9wX;G88RpYUmp9!?d53vup{cECw3^)XYo7X|+fpRSAAbWx1a?1=3 zIgGBX<6xqLjN@QV2ibMxZ;8(OG92(0km2BwvBeB7eOP-Kb&!ok8rC1s>7)fs3%y&y z5AJ>IAbS#dQs2_O#SqNpX&NtPZ!8LOGk+p1kF7saxel^c@GH>J`sI-^;%3D)s}SKy zERAu^@`GQIg}XmDgb@#6O9xqd#8c`Z^979hf-Zb3wgvnUX1gs^I>@RbPfKm_A;Q#c zQS4-Fi<#hS)$8{Lq*1rUZ%AXQExtmSJ#BFn@szSlH0RMf(qG_DwtmMXWQR^fo05zW zYa_fX)uKJf{F zfqzZV;@;I2_pffa=dQ~1>L_ih340KdmfdBSEa30v>wvs#puF1nVP8*k zNCECzk?)mB&X4vSbY5Pz z2xsLuC#JJ<(2Z_1Y+A;m-Q9yDvr}ggK^)IiTjpJoR?=li{D)EBt9-(bRjr5 z7jI7Yj_sPhFYyt>jXxdJqk-FQ++pC&9>bgNH8!EF&56=6!hg$V>Dbv^*s0$vF+24$ z!52_j%uYSVSRC1@hfG~4+U0BT8?E=3tr>5DUiw?27rfWBN-qe1nDm0n_2r zlU`n^B)zn=gI;?77tzZTw&^9m!u*1}-G@OhO*p-HgI@YspqEaT=ml>UtkMg@A11wk zf3bglaWt++@0+1B_58BQOq~C#`Q@{p%+4>#SdWsi9wlQvO0GaJxD$97^s?4bo?n*l zD_fI|?+Wt^WQRV0znEWQ5^_R0|B_5HYD#)>j7tbr@GmT!=tYXl0q>F>>InYD7jgW+ zzxb>8mpfBku&!I?U+BC^>xBD%@CT4P>=20c+SLJiEgD1rH~1{#ZL*1ez`N+-=YTU9 zf|YlpBT)|uC%f&ZHImK|JdH$WHQ-qq5`7SFLc9=M;)Mc;UqSprtlz}@5MM+2wxWD^ zTpDlD8rbgRyh{{#CX@8_WPS(dQoATGSMWTPM*w&RrV|8wi8xEyh&vTEpL1vG6F37k z@;NO~-dU^%deo8eI$SPb7x6mqYr<*EYb4pk^k%${lCDO8wt~@iA>eg}gV&i4{Tk~b zPq%ME*YwYb*SYSPo`t&X0k0$BZi09;TfB~tQ)avl&cGytd{2*e4=JAmSDa@hL-r(- z$)0>so83X}Ks_$+EnCwBam>+N4fva-ImoYBr8$KElQc*DucSGGl{A;-V43FPDXpC} zr=xs$+*he>{z0019pzc0xmQof^VxmT9QdV&L388KP70dia(3Q~<~-5fPl4uMMI3W9 zHy!?FX%4b$R%s65|0K;(|0`*ZU?t5pCR(vD&z+&PcGBDp$r$$nwaq_BbJtLwHJZBs zy>Y~&TcNqk3iBLzu7^Q$U!k28G$+q<>pdCG%|m+D9LZPGjm59ff!#B(??339|6Q4XFdeeu$+iFLSz0Tnlg`(% z(TPUBnjgiFh229~p&Z6w$0tf_IR>-140Zd9HD?)0gh3?j{#0lz#Rc^QoxS`&QZW!0T(LZ2*8ey z8_Vwr*k1wn1{|S)p9CDEfCmCjP{2a~Z&JX+0p}>-QGg2-a13C_&c^be1MIJWCjpL7 zz*7LnDBu}@6BO_qz?&5COMr6}@XLS;6>tJz$53PWuK@N}z{>zfDBzWVV-)ZkfD;t( zYQUQm@H)Ub3iw^Xg$j5RV8<@T^0xx^SHKy7BNXsL?z0=@<~K>^bch{N&m_0pqTiZanrEdf}?$t;Hn<{T<=1I{Xaxmtz_KkIR$4w{Z6kcjtXA`(Na) z?_n99%w1y+@|U{2YDZ-MHr!Q*hjD*(K6|*ofx82a$}x^`SB+2Dw{m!#IwKBe^6)0# z$sW_V{}olgr}A*$d^tiK4;L;^CZ+N4HpgTiJub=VFU?VQeKoQh#ocM#UCUhqkC)Hg zHr&;6H;(0I`=6zHs8b63g{ux1aGdzC;fj2OYbm?T@QNOyMY1_*xaL#RVVz@nInYivJ6$%j10>E?em@wnTPc?Uz{ zUa1VHaCh-vGMviY#XR5G8gl;mf6Cz(xvRY*!v^kNxhlg&*JM|FU3LSw>&x*AveTQKRd#)<%I?r=vYT98cK1NAh5m-t zl-+3@j^g39c>GizeucZiIB=)GwcO2jli@J#PUG&$Dzbk7cZYH}iKTvc|Ds@wmi~U_ zZnY{htmo}5N}k2Taegnnth)1fdf|%5TX;Tw?aU|3S#B3SZ@;YCGMrjRcH6ki?obZT z@3{X(79Dtz_4yt?XvDlil?lWVc1I?4~^~y9QPNH0dJy zCv%q-V&z{FPcK{%wN_U-pA_y2e@m{V`BAj5Q-PdvK%wkLbN2>!g@4`|(|AQ3o_tpJ z7vVQ}zX?|keenOq{FueFR=2k(U%0mBMG;T9wlEg+oZ1cM{U%(IkH}ZJ!rzkn|7*Wl zs;}@D?Iv8|FWODG!rzi>tNqf(%i~DU_sQpEc=7~Oe?iwG-v2e-TdJ>UFX4)KqP>JG z{4Ke*+U>R1P1`3mS%%v~kdppHJN>t|n`j^5igpm~BV6Hc$+gu^meN($-@xZpiSu{1 z@)7kDu81GN(}&ubPnJmdfZQ-XKMJ?9*$V!)vgt)S_55uK7V+=bO}gI%|4{sSydQ*H z*<$~#Uu9daa_K~W3Ab{&NRlnS`+t=$wACI-7Wis0?+e#fKI(AwIa+>%ydK`*t~%T) zQVzG3kD za95qrEbecKFM3$#aeEfac&%R|yAS$2PV6&nox^4E^7FWBYrlDg$1`wOw7;!$INw*~ zdIoS;q!WBgFrVMlu<#f02k`XKs(dV+!{vL+=Qa5aWcPm0-)x<`1vixQO?yOkPjWZ9 zt_)}T$gZBd51a28H&$Y%3yeytiteyD;*W>MR zpXY8@csg6_|ARhvOBQs7M`HB%pwHb5obE+?&g12r;jZwv<$XB?+-;!%<9Q?2K zm!*0Ne@k>O+Do`1zP)Y*eqgCQZq{;F9iGPh)%mOA#VwQb*}`3Q_%7~mY1}<5z9aOQ zjF<2Cvio=W4l&Mb@fqEDd40KSYrM_k@fL7bw6`rjV+)V}p(>pihhp5RVc{>z`GKcD zqsqq;pAqFNuWLS!%C4>ZJzIRmw5EKWczAxwHt_M#;DkIb)Zs0-zdC<)Jg1-J z^a0#ehX-?iTlv&FDd#hkyXt)6xWBD@!cNKgBym@rPbT-bmCv+a<$U&VSDlZZ``gMV z^*1@6BJQg5sr9=YZY!UBy&TV{Kz7yngmHgc`E)-mr+U?%_e_Q$NIm_`rXC9vb z?r$rf7DaOUS=?3Qv!46&(xg66AWwe+9t(XJdaF*^%@uR1xXx$scYUUdh{|B&yT~kxLdazmc#3FIDor68!4ElZ=ec?JRNIqACBNX4xi*1V|iiWq8)hh za%b|6@=voLd&1?ES=`OzZh2%b|EA?~S5aIpE`ZC)rE$5cG#)O}MRPf~@cpU8&Wy8RI8TnK*0om>Dz1yePF&em@65 z_|F{fHe&zL!J>Xgv{Cr+6)e#SJZ)wnUU#!%W;Gp4dUX0$?b zo*Vm8q(f|E{o)I9X0c;t#u^LZ*ir15*%K#^YdLWoi$3OsiDRW!Gh>0#tT8cCt65Ya z@}DZZh(CJV_?X!fWRU&8+v%mD!?A)-^#84+qvYp6OJec7JJ65mHeynz6X!5}kjjK)?+wJ1wUs?~E|B^meU%khl zM?y-EhG?(X82$O_{06^#G3AfBv#VFzx%%l#3xkSUNqxVW+4An3zSp#y3cKfixjjJl z<%i?u-fjC@$jaEb=kD%ocDdP)Y2y|@-tyw2z12M8tG-*O-sb2_+C5^4S8?O;pqI{^@)2I;WeLrnl|3(!8e}q%iFg;v8(IRC)SRB_1N;*26v_pX!Mxx_Nv>Q{GP5os{h7S8IzMP ztn*r*HR#prkzsG0@{JhM?T4>6d%aSy+v8%LyT5dOe`1XpPQ{a;+NsX-=hohQ?Z&-V z-|DmL;GaeHp15mxdu9ChO@3LsSpQcGzdIi{cxyuB=~p}K*RG%Bv+RT0=eiEoz4F-5 zqwdpkhHTuNF?i26UI~pm9GdWH^VfTotY5q9Q|Hc7>JvG&rv(I!{nagU)86P3|1bZD z3UiyecK!R+??!(4O2pxFL5JTPeeA7^e{INnWN&2kDMxBG%}DZC62JVnBP(j1Js9xh zC(V~7RbS9`P>t1|wQ3wHdg0><@w434Wb9n>ahEF3Ts%`;Hh;+B+S6Aw2@E`&cw~C? zk|DpQz59K^y>WHiJG@gv^X?%x{gKZvf4*;Bi!T?Ry5{=yjP57KR(t#K=Q^$Tos-oz zx(_}yvBS{d56<50eCpK?mQQa#`QCS)Nof(&*C)P{Hu0sdH46OV$7kJGH_P*laX*Z! z@ms%J11@_e{->8?akCwbS`R;z^5pc$8{YSRe)ieV{C{0O>!~W|e7anEHO1q@YfHDD zJNe4FiDjSe9M&w@^T&-bpYQ+XE8ee6> z@ab3kER0&P(2qFJ5f*bMf6V zUo1UW=gSo*7uQ?xQvIMBhra0f!|p>>whtfq)b)%*pU}SUUp78IAr?^-HQjV-nD4N3#qzv*X3Eurq{la^Tj)ko{Lsod23b7%V+8rUF$Jx zhKJXB@AX@o&x@U%QM37z&qrVC7Ju&Q{HU_5B@3;Om zV!!9C&=$*zQd`9QyrkoTP9<||w~3vgJC+lDC^u4p+tqq|A_TNo?>-QgK#D#foY~C+qebrORYr-CL&Rg=?1nsMN z&L6ML_H>B%o7d#rh>P!jc5#-Ae^Ky_+FoVtt}gPdF=^_F1LKPRT3My~skU8f9}1a0 zui2!upA&BDb~Fr}zkOMq?YCZeHGlYp9!K9kc;v9d zl6H@*j%gi!eY$gItAX3Uo!5QFj_=yfZMfQb;d?lEqXrk z8|TG8xMX*KyVdp_r;*i5zPLQ~s>es2Q-eCb_31ZF+c&Qp@wC_XLslQ^yZq0Qhi+e* z>JwULN63pm=6pGP>{+!&#g16`#(QV=D{q`!yZ>YV*R&(Y8&1AHbM@V-b0dEA zTm4g=m^aq^9=tiYTh%+st9vE1oAz=GeT}_dy?W*KJkWCYw8tjo9oRnk!1C`(UjO#i zi`8AS6AK$Ye)(O^vbNzxpS+P7eSA)|;fVje@!v}AZ+NZxQkT+h-`k!?ADP{7Sbp-& z>Tmp3FgpGnX?6YHv2*;Y7QSA1rT<3PFQ*K;T&4SKIlmqEU)6i+lI)ViTYn8&{M^&E z#zigfa<^>Gh{xOlPeeVY*;9Mvq%of#h&bN-i=O&5XPi23>NF)IcVv1!Y0|Fgy%tT{ z*JRJduU;*RTce+Q@u$=^J)dh38Tnb9_uwi%F_-4K7naQ(KeP4?!`#{POMa*`VQt6D za}PW=xPRxlNAB((*r@rwDQ)s*1UdJg_?F@Gc^6yW|!#?)J*W^8Z&al6$mQm0Ou{Zo9o>vF3dDqs^Z3h<7Y%P}uqK&u_ecY{Z}23#V*2@>1=$f)2%Z zc=r9rr$2wL|AenMHmK3hC%RqR?e0sxjt|CPd(3$;zjQ*o zNx!(&dj9hf#VKdH3>XkGVb6)0-_H83dP1F_br*NP@7UmM@~SCQe(o~pFYhbg7Ckqs z)`InM`!8N^aC_qLyKYN=tTp@1VIimD_nkbqs!5Z~V{^X#f32KlP?cTVhUtz?x6+a# zEueHMARyhH5()y+(kb2Djg)jZ(%mUYBe3ZZUiKsR`}p$b`}3`td!K8qYn|&_v6(&0 z9CN4nca^jGhS2%S_6BFZRvHW;-1mof#LlJ>js6krb&Rj58fUDzJ-qcyljenzW!r%- zzEghz9rV)M_7g6>;Zf1b<`xcClip>_6Yjt@K~_uej&pY9dJE1_T)AO`@3n$cJ1Km$ z9pL(4u~Pk)Pv#o9gT_KhSX3=qcVke?U~2hBiF5Ti(+W?}goDm%jVi7w1~IrAY-0G` z>|7dF*BV9zqN;ul5y2p7ndI^1a7#+m#k{}3bmiLq6$ohmHJ7WRkb@1cYiT~eq%Sr%&qxKU`e&w4OI3HU6= z3g+ElH5KT{m^kKd{`qzbMXSfEyi&DQg1_vnhAW$G-&k+o3Qq0nP{m4gjDBlt+;D($ zE%`bM*Po(3!ug59Al+sk+)=E;{(O)!Scl=)7uZ!zc?l`0+3j3iQtdDsr-Y6Fz_3(sm zVc7LtZzeJ6nmPy|G12?jt=zF%l=~XC6#+5_on~o z5p$i^gsLMx%S_P7L7O4mc7OZV6uo5o8dLWUJDN__)s$)``>6OE?I|W?nA^ggI^!tNUB9W*=9p52^LM(Ez)c3SP6klGIrha?|U0g7UO;N^*NJ1>^bi==PxQR(*fY8m8*8ia~jVsE#n^aKk#)4#~(Irrk1QMi(o zxMKD!jU2sPjLPJlC%=DIb4c1-HLWt0jM9b~{UXoq758-ERoMqRaQsT>G zS287i8z6PV=AcueYxWSzc}=u8aZBDk{Yfg0{n8qVFvX8!5`wboFP@RvITxpqYf`-f zH&%d=BSc~x?Q=Qv2e&&u*R61x<3vCk|1K-}aO#p!pEg{zI&O9Rk;N2|IwC;I>?KJQ zK@s#o~wXK|ct7)#k2ua!YN$lH+dV2`@X|qo1X1+*Rj2 zhQh0VAtIiJm88ELpJkWWHf7P-*%)u0daY0q-KIyRKy#ZW^Mpj-nUps_!R;Vx?MoQV z$Mean%Xg15maobc`h0o))9I5s z;(M!c@BXq4p?O^?x&j3&&AZd z3032MPH+ZdPCj?waFITTpR`D{eCI!9#_{r;d{FS6+J2uE-=##;el#*n3lm1T#HSJg z>)Bdo5*FG_7O7sscdkZOiE>DW{1 zT`?5<_V7-$T4Jeu%Ci=)kDh{!C2;@NII~J??LJUK*GXLKNlsxw1cu%ScKj+!tOwdh zqdGG>IYD7QI*Bec4HAA^T>>rKhc)F!Frtd2nr32U&Mf7cTAzG_Q>PG--S<0?&0ai5 zQ0p*y+c3>7X4@tJb!#|sUah)2T!^zs!AkOilNcU>JcE-Y1BR>6THli@N4Ng~>mwLb zp%cUvQj=m0XClHi%=IiLJb{`HpT7=Q`&3PF(M;J*#kKP3;ZW0n$q#vLva(*2^@+T> z+{ckIlC{1d`Ag&REotz@vh~Tg9MdDNEX!ljWyWun1GX@JhcV)sQ-Mk2=t}sRn>Ca_ z)obcKLTQt8BZo}1&S(sO54KOFrm)MPZ>KPccHW$;^9gc%xH;X_?2j^6@>K}1nmdC% z%PZl%T74mgo447*-7Ms2T0Gz!Z=@x-p>~im!aJuD$X2VVX2fp5S>UT}K7@r-%wc&RkIdDjer zn79kEzW+d+CML5aO1avDxhVzy(O zr3=MNirnO$NS6k#uC)p$Ji-Ck{D5>F-CrJNdC&x4odA^xU+7JgpLIiWD-Mr|OKIG7 zs9vYf;eEC@iMf5WgB0c}R-H4A+$xLr^g|1ez?7#|WS<5-6{cNM!_OyM17CJXsMy~2 zXa&De5FL5>w%Q?oG6C+^T?$J}?y`F$^s4Lkm+HP8Ps4aQ(6Y2>67}^S1*sz#)q^cW z$SiC%&000C679ldvJ6RD798v=vbrnUKTzU>$!`?X{lSOfhJzuCz0CQOj=;Coh_ELy zE0#ysshNxhyL)b*XlE=pNfep&=LN@N_+hqIaDEel37E)p3;4-#KQ^IJwvEEz@pH$_ zt7n>!zk}hNQvQNQ!7%lA7&xhc_cQr?LKrPs!r$tR^38S%trJ@}EE7r0u_qLi}) zj4l~ZM|7MgQXw*nZ!?c%=4`G`Gtxy}GsOBCmfGSJ3wC*R`h+!kD3V5DZg;D*%7l$A zE_!F1pRt0?Hb6m;6m?93e0{1TT~7nLz1 zkoQL!+`fxu)Lzhr#89`~F@KxOMqoM)h^5w{(}>03TztrHlM zNA+tMt4U^10JFvN*$88H^qaDHOWu^kU(?=(C)G4h!O_>Rzu8tdWKVhWev;1gF6fO- zPugO_q>p8xYopFbIVZ62q)PLtzH#4|As{x{ewwpjSYrNzR=eHqfTOG;Il_l|SV7Tw zS!13&9@(fdB@CY>-2jH;#W)k?x#^@~G(Z1izq1Doh5*+B3^rftQC zm3Qo4xwKNlqWPgG+(_tuyRCjyCLc9bG>ac0X!^D`yCi{8GfqRk$K0LPNjZ-h(SX+& zGoNUhL_2~>-CHRHJNZ`^p>aRrMQ6D^-0?L>9R}aC3ESM;B%|lOSt~fT^_Wt zZsGx9fx{QY<>_5>6mkT*<= z4uTB`w8C)EjdYkRe%Y~56K=9Hgc}|oG}N;!Nm}Dh!XzL`7}TlhA9n^i1+LPp?X=J< z#3uX-87exQcT@174<PxfgKi@s)BqDYIQ6{7L`Q|D^@&bu)hA0`|eMU&cyte z8o06#UsB6>q_2!E)gn!0Iw6DG$WwXW(MOMpx+zCR+~qv3IwR{)G$;HoVMl4JqRLVy z;rTLnSfqUw8h4(xX=2BdzYO)tMle$TF4 zKJrYmtbHu&50v&3V1lQ<{M&!C#HC;NoFx z!NrQSZDO3-%{Ny}t=Jw^Y{FTNpRnm07zoAsOTMZ7{l$Aa6Bj~(XW_nT(ZR0vM;=4B zQ)?%>hEwH&QasgaX=j2C!V93z+Abt!w%Y@ut`Y0yhT4&uX^2MkO^*Mu&k-CX!+cFOW5^_%+xdbL8>Z(rPhGD?yDMT5?WHpIFs$M z&=e5MqPt+4V3YPP?eBv<#0)G;T-;jWp3UCpL43g#w0tY^G9qT8_VJsux2R+*CaRj| zE5v*UV|y4A8wqpI)|-l>NmoywU%n8yM95Vy*1=SyEDy;s`fTrwh^gfC!Eu_g#GG;0 zf11qk+OEyrTcMoU^!$mv_nT%yjHb(AX*Wxr%WZT8!5frMJUt;HkK3`+CrI6S#E%)> za{KczJDx~xD-9;@Pi3vAKd*(=&u7}n3Q^Q%Y_VZNMYcE1qFbbB9e2T--E`}cWe|`+ z){uy1Y)OFv`C|mJF7`9~{ex%5oGs7)DTD*?>n8>a*LYK-4D_ZUPjQhA$jH^-R zWG~tBL^QKcJ?os)t{k`IETUp|I&L|ozZl%d3Z?g2Q@zrMX>N`t-(n&CNLkjidWl(5 z1bXJ=Xzhp9V}x}K%C^n{GnSy$TDg6Z^_O3Ojz6y-YR+r%RHjOX$>$ z@N$@WbRum(m+21*cN9{eF2j-iK+55su|Y6FzKyJWGJuJ-D*LF(ZFHo(c1g9o$yrev z`?`l<6gPOpV4Ee#_p9#lJTqN|oDc0+TNMk#{5R^MDihDQ(=Sz4p5#~~%A*VNEJw6# z{l0kh%Z{ug$C%D-L(~&A?9Gq+%GUf_(5WGuT+xJ;(1pW16@S9Q1R>LbG+ts)1Pf8C zjWbUivb=4c(aO_IPBuA1%~CDS89 z#DtROGwFBci>rDnyG*#S{S;k>(;;;4=6u((@QJE7-@Mw;iyZGR2$ugE>8VH|cNKXa zjsmlijoe5N;yg*=IAY^C(OxIq2|FWEv9YmGSi^%NmC>mUD{IMbWk4O9cmQqx4Zg?tJu&{iZ$~Y1{^U18uPyOd9^z> z9j_l_+dPYiLqFsu-n!&kxv)rHhpTGUAVRDf()sp%GR>{o8Id`|4x0rC%#InU68L4b zLHvD2nD6(U<;(Ed=lShM;643{w5pSWFj7RajfgN^)E1`ZFS<=zfeonCRku1rrXFR- zOnDB2?|e~E%2+RL7}hcn2jlt~CBiE8qcXg3WZ({oBs2V8FJ^*px?4=*EzMa&2)qp? z9P^!6+SzD%eGSaZ+@&UiL0z4x%3}#aWRCgD=<8jl>F6n+r2_MJhvbkj*ou;xZKl`I z*H2~0IQbkr$?PN2Aol9sh`6;(DKaN?hlj$$q9vUNtJLGJWexLs;WS)Kn{d1Kab&JmK~TC+htJWW;J#yj{tQ!q zcK0zwboUX7bO6Er^wl}>=xmZe{~&qLYIjJ&|3h)Vn*&0y06g6CeFe~myy73)<=@2Y zcU1^02>8$MD}Vx=AmF&i8i6Jhs7&|i7i4Pg?2`~as2=;l4p z2;m_iYX`VUU|o54eGn!P@B`c+piTE12J!;q0DXVwhcJdf8{iB96}*c>3M4ON3@{I* z4^kTMp3}el04E7(&p)I7^#SX@?}mbW3m``ZQ;Hvs2w--Lp^9`{Eca^{W0LKmJG_bIH!$Uvbo%wG+z&F>h{#gg`cLwBp=-;~w kJV^1+(BXSO$%FMjXhI>}=LhBobcgN!9La&6Kl;%BAM-XSPXGV_ literal 0 HcmV?d00001 diff --git a/KernelSU/userspace/ksud/bin/aarch64/busybox b/KernelSU/userspace/ksud/bin/aarch64/busybox new file mode 100755 index 0000000000000000000000000000000000000000..1ddf3f73aa53cf0cd694ddec34c2f940c6e1ef12 GIT binary patch literal 2149248 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

|=?8+~z2&%&~h{KXB&v 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 z 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Πkl9+pqHFb7O>G|F0F1f4L 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≪rQg0a6h0n(x?q)As!CtsL1RVu`@E?Zs5jb4Hv6VgT2u?M890acl zc%|)AN8|-tmfzfkh9iM&IwGIz?V6*XW z1rNKPI5@b;#eYT$G0E7i<=Lmh&oX)TJMbeuw_ATPxJl~UKR9D<4s8g$8-}0R&yJpB zho-vmHHZ%3`!l45_Wo&b6LQg5eH`AO7yJohpyNCxJ2z5p*;wN(%V~_*BWRBx67d#3+-oQV>1zuTGon57_NY#6To5W8=aMXRh*oC#u z-~5!l7}xW82b|75d}A1=tX#ynYxA@!J9=haN1I_=S&Sdze#Z9@9PB6?x%4tuul}&>7UqnUZUTN$<@2WaDC`b{y&4Sbc2(l*nJj#3p)w> z!bMlohRnOINx>HUkK~?tcuILyazJX%$9VQhAGTxkHIm0v$Enz~FUt>Z6T5GlE%*iP z)Zm*UdYcSrWyDr|ALF9eot_;0oH9*!UJ;XhumxK#D(9sfIU=7@ZZ-w~_z&e&y_~K8 z&5jG3YS{0O(hv-=q_=psK098u0+ljoAhPv-JDqZal6cg?w>xwbf0o$&16k>5e)w8$lTzCU0r z0(WKa6a;L03;Gn+Alb)>?oigegVbG5|3s%c@=V?{{->0#{NQEKo3wd5u$-RGyry1V zZlhk85xJ5vDn$n0M%!QAbX#aTYr^2_$`IollyzQ#*DD`Rg@0!`PvWoGML*aBJCD=u zB%$Mf$Twfj8m5ieSZNxwp;CNouxoDq$`}W3jmX*t64j*B?jQ+(qpiL#`2r;9gzY}`5WV<5cvt0vy(5#<*Y76|U z^;@op?7Jin)1T1?5pxy3lzZ8O26B}MGH_i!KA`!FDk>c5Nc0Om! z{4ZYT=rcN<<>axmsTN<$^wADZB3bCqh1b3i7n+Q(7Wzo%rTjB5(b=VkRbt;iKnK!M zw!X4y4!&B3ttOqxAGLL*yt9+DZhu_t-L@?J zKaoSWW+}51soP(He1m>oo5dWZ9slA~{K#mF@r>e=_B!oJ`?5Ea`1f;pmf%m-dR^|4 zGV~q!p?;2^z0$3n^9p26D#*;>CiO^?vN8ub_u~?5OC{XDZLIs6c=ofD=|iU=?JNS1 zo2f&a0I$eUX1+56`xfoVeqQ?DlQ%jjd!;65>Ehf2@@+SM3IV>&p3Z)QvxmOHe^=*S zd)uwwK)Zu{dxp6!Il*e+4U%JeyYwA;ASYJPM$Bvg_?YkM9lrVk(`e;%C+&neBa%E? zVfX3k0yjEwv0wM#6BW%HU1;}SSs<} zw2k^jk1V>#ao7W@$&s}e8MGJQa@$Spi6+I$6;n?1rZ lfKBhuBo;$8u``8U$#K( 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%0D`D{$2FXwIAN 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

8;K^?lyw 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𝔅J+sxUg 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
N8C!G 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 IN<3lzCoO~|#Q*>R literal 0 HcmV?d00001 diff --git a/KernelSU/userspace/ksud/bin/aarch64/ksuinit b/KernelSU/userspace/ksud/bin/aarch64/ksuinit new file mode 100755 index 0000000000000000000000000000000000000000..8d3ba057f9de3933e8e4e507d9b6a3de6e653fa5 GIT binary patch literal 466288 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