From 65b0ea792e0d2e0a33dc30ca5403d7744367c88b Mon Sep 17 00:00:00 2001 From: topjohnwu Date: Sun, 12 Sep 2021 12:40:34 -0700 Subject: [PATCH] MagiskHide is no more --- .../java/com/topjohnwu/magisk/core/Config.kt | 4 - .../java/com/topjohnwu/magisk/core/Const.kt | 8 +- .../java/com/topjohnwu/magisk/core/Info.kt | 15 +- .../com/topjohnwu/magisk/core/Receiver.kt | 2 +- .../com/topjohnwu/magisk/ui/MainActivity.kt | 5 +- .../HideInfo.kt => deny/AppProcessInfo.kt} | 30 ++-- .../DenyListFragment.kt} | 36 ++-- .../HideRvItems.kt => deny/DenyListRvItem.kt} | 59 ++++--- .../DenyListViewModel.kt} | 18 +- .../magisk/ui/settings/SettingsItems.kt | 12 +- .../magisk/ui/settings/SettingsViewModel.kt | 5 +- .../com/topjohnwu/magisk/view/Shortcuts.kt | 14 +- .../magisk/view/TappableHeadlineItem.kt | 2 +- ...de_hide_filter.xml => app_list_filter.xml} | 14 +- ...ent_hide_md2.xml => fragment_deny_md2.xml} | 12 +- app/src/main/res/layout/item_hide_md2.xml | 6 +- .../main/res/layout/item_hide_process_md2.xml | 8 +- .../res/layout/item_tappable_headline.xml | 2 +- app/src/main/res/menu/menu_bottom_nav.xml | 4 +- app/src/main/res/navigation/main.xml | 12 +- app/src/main/res/values-ar/strings.xml | 1 - app/src/main/res/values-az/strings.xml | 1 - app/src/main/res/values-be/strings.xml | 1 - app/src/main/res/values-bg/strings.xml | 1 - app/src/main/res/values-ca/strings.xml | 1 - app/src/main/res/values-cs/strings.xml | 1 - app/src/main/res/values-de/strings.xml | 1 - app/src/main/res/values-el/strings.xml | 15 +- app/src/main/res/values-es/strings.xml | 1 - app/src/main/res/values-et/strings.xml | 1 - app/src/main/res/values-fa/strings.xml | 1 - app/src/main/res/values-fr/strings.xml | 1 - app/src/main/res/values-hi/strings.xml | 1 - app/src/main/res/values-hr/strings.xml | 1 - app/src/main/res/values-in/strings.xml | 1 - app/src/main/res/values-it/strings.xml | 1 - app/src/main/res/values-iw/strings.xml | 3 +- app/src/main/res/values-ja/strings.xml | 1 - app/src/main/res/values-ka/strings.xml | 1 - app/src/main/res/values-ko/strings.xml | 1 - app/src/main/res/values-lt/strings.xml | 1 - app/src/main/res/values-mk/strings.xml | 1 - app/src/main/res/values-nb/strings.xml | 1 - app/src/main/res/values-nl/strings.xml | 1 - app/src/main/res/values-pa/strings.xml | 1 - app/src/main/res/values-pl/strings.xml | 1 - app/src/main/res/values-pt-rBR/strings.xml | 1 - app/src/main/res/values-pt-rPT/strings.xml | 1 - app/src/main/res/values-ro/strings.xml | 1 - app/src/main/res/values-ru/strings.xml | 1 - app/src/main/res/values-sk/strings.xml | 1 - app/src/main/res/values-sq/strings.xml | 1 - app/src/main/res/values-sr/strings.xml | 1 - app/src/main/res/values-sv/strings.xml | 3 +- app/src/main/res/values-ta/strings.xml | 1 - app/src/main/res/values-th/strings.xml | 1 - app/src/main/res/values-tr/strings.xml | 1 - app/src/main/res/values-uk/strings.xml | 1 - app/src/main/res/values-vi/strings.xml | 1 - app/src/main/res/values-zh-rCN/strings.xml | 1 - app/src/main/res/values-zh-rTW/strings.xml | 1 - app/src/main/res/values/resources.xml | 1 - app/src/main/res/values/strings.xml | 3 +- native/jni/Android.mk | 6 +- native/jni/core/applets.cpp | 2 +- native/jni/core/bootstages.cpp | 8 +- native/jni/core/daemon.cpp | 8 +- native/jni/core/db.cpp | 21 ++- native/jni/core/magisk.cpp | 5 +- native/jni/deny/cli.cpp | 154 +++++++++++++++++ native/jni/deny/deny.hpp | 43 +++++ .../hide_policy.cpp => deny/revert.cpp} | 12 +- .../hide_utils.cpp => deny/utils.cpp} | 94 +++++------ native/jni/include/daemon.hpp | 11 +- native/jni/include/db.hpp | 4 +- native/jni/include/magisk.hpp | 3 +- native/jni/magiskhide/magiskhide.cpp | 158 ------------------ native/jni/magiskhide/magiskhide.hpp | 43 ----- native/jni/zygisk/entry.cpp | 16 +- 79 files changed, 433 insertions(+), 486 deletions(-) rename app/src/main/java/com/topjohnwu/magisk/ui/{hide/HideInfo.kt => deny/AppProcessInfo.kt} (80%) rename app/src/main/java/com/topjohnwu/magisk/ui/{hide/HideFragment.kt => deny/DenyListFragment.kt} (70%) rename app/src/main/java/com/topjohnwu/magisk/ui/{hide/HideRvItems.kt => deny/DenyListRvItem.kt} (62%) rename app/src/main/java/com/topjohnwu/magisk/ui/{hide/HideViewModel.kt => deny/DenyListViewModel.kt} (88%) rename app/src/main/res/layout/{include_hide_filter.xml => app_list_filter.xml} (94%) rename app/src/main/res/layout/{fragment_hide_md2.xml => fragment_deny_md2.xml} (92%) create mode 100644 native/jni/deny/cli.cpp create mode 100644 native/jni/deny/deny.hpp rename native/jni/{magiskhide/hide_policy.cpp => deny/revert.cpp} (84%) rename native/jni/{magiskhide/hide_utils.cpp => deny/utils.cpp} (78%) delete mode 100644 native/jni/magiskhide/magiskhide.cpp delete mode 100644 native/jni/magiskhide/magiskhide.hpp diff --git a/app/src/main/java/com/topjohnwu/magisk/core/Config.kt b/app/src/main/java/com/topjohnwu/magisk/core/Config.kt index 85898b064..a7e817fe7 100644 --- a/app/src/main/java/com/topjohnwu/magisk/core/Config.kt +++ b/app/src/main/java/com/topjohnwu/magisk/core/Config.kt @@ -59,9 +59,6 @@ object Config : PreferenceModel, DBConfig { const val BOOT_ID = "boot_id" const val ASKED_HOME = "asked_home" const val DOH = "doh" - - // system state - const val MAGISKHIDE = "magiskhide" } object Value { @@ -133,7 +130,6 @@ object Config : PreferenceModel, DBConfig { var suTapjack by preference(Key.SU_TAPJACK, true) var checkUpdate by preference(Key.CHECK_UPDATES, true) var doh by preference(Key.DOH, false) - var magiskHide by preference(Key.MAGISKHIDE, true) var showSystemApp by preference(Key.SHOW_SYSTEM_APP, false) var customChannelUrl by preference(Key.CUSTOM_CHANNEL, "") diff --git a/app/src/main/java/com/topjohnwu/magisk/core/Const.kt b/app/src/main/java/com/topjohnwu/magisk/core/Const.kt index 69b6973d8..edd10c3f5 100644 --- a/app/src/main/java/com/topjohnwu/magisk/core/Const.kt +++ b/app/src/main/java/com/topjohnwu/magisk/core/Const.kt @@ -27,6 +27,7 @@ object Const { // Misc val USER_ID = Process.myUid() / 100000 + val APP_IS_CANARY get() = Version.isCanary(BuildConfig.VERSION_CODE) object Version { const val MIN_VERSION = "v20.4" @@ -34,7 +35,9 @@ object Const { fun atLeast_21_0() = Info.env.magiskVersionCode >= 21000 || isCanary() fun atLeast_21_2() = Info.env.magiskVersionCode >= 21200 || isCanary() - fun isCanary() = Info.env.magiskVersionCode % 100 != 0 + fun isCanary() = isCanary(Info.env.magiskVersionCode) + + fun isCanary(ver: Int) = ver > 0 && ver % 100 != 0 } object ID { @@ -49,7 +52,7 @@ object Const { const val PATREON_URL = "https://www.patreon.com/topjohnwu" const val SOURCE_CODE_URL = "https://github.com/topjohnwu/Magisk" - val CHANGELOG_URL = if (BuildConfig.VERSION_CODE % 100 != 0) Info.remote.magisk.note + val CHANGELOG_URL = if (APP_IS_CANARY) Info.remote.magisk.note else "https://topjohnwu.github.io/Magisk/releases/${BuildConfig.VERSION_CODE}.md" const val GITHUB_RAW_URL = "https://raw.githubusercontent.com/" @@ -76,7 +79,6 @@ object Const { object Nav { const val HOME = "home" const val SETTINGS = "settings" - const val HIDE = "hide" const val MODULES = "modules" const val SUPERUSER = "superuser" } diff --git a/app/src/main/java/com/topjohnwu/magisk/core/Info.kt b/app/src/main/java/com/topjohnwu/magisk/core/Info.kt index cb2b89e41..98816dea8 100644 --- a/app/src/main/java/com/topjohnwu/magisk/core/Info.kt +++ b/app/src/main/java/com/topjohnwu/magisk/core/Info.kt @@ -51,25 +51,22 @@ object Info { private fun loadState() = Env( fastCmd("magisk -v").split(":".toRegex())[0], - runCatching { fastCmd("magisk -V").toInt() }.getOrDefault(-1), - Shell.su("magiskhide status").exec().isSuccess + runCatching { fastCmd("magisk -V").toInt() }.getOrDefault(-1) ) class Env( val magiskVersionString: String = "", - code: Int = -1, - hide: Boolean = false + code: Int = -1 ) { - val magiskHide get() = Config.magiskHide val magiskVersionCode = when { code < Const.Version.MIN_VERCODE -> -1 else -> if (Shell.rootAccess()) code else -1 } val isUnsupported = code > 0 && code < Const.Version.MIN_VERCODE val isActive = magiskVersionCode >= 0 - - init { - Config.magiskHide = hide - } + var denyListEnforced = if (Const.Version.isCanary(code)) + Shell.su("magisk --denylist status").exec().isSuccess + else + false } } diff --git a/app/src/main/java/com/topjohnwu/magisk/core/Receiver.kt b/app/src/main/java/com/topjohnwu/magisk/core/Receiver.kt index bfc44accb..d500f91b8 100644 --- a/app/src/main/java/com/topjohnwu/magisk/core/Receiver.kt +++ b/app/src/main/java/com/topjohnwu/magisk/core/Receiver.kt @@ -42,7 +42,7 @@ open class Receiver : BaseReceiver() { getUid(intent)?.let { rmPolicy(it) } } Intent.ACTION_PACKAGE_FULLY_REMOVED -> { - getPkg(intent)?.let { Shell.su("magiskhide rm $it").submit() } + getPkg(intent)?.let { Shell.su("magisk --denylist rm $it").submit() } } Intent.ACTION_LOCALE_CHANGED -> Shortcuts.setupDynamic(context) } diff --git a/app/src/main/java/com/topjohnwu/magisk/ui/MainActivity.kt b/app/src/main/java/com/topjohnwu/magisk/ui/MainActivity.kt index 339b85506..274fae8ff 100644 --- a/app/src/main/java/com/topjohnwu/magisk/ui/MainActivity.kt +++ b/app/src/main/java/com/topjohnwu/magisk/ui/MainActivity.kt @@ -60,7 +60,7 @@ open class MainActivity : BaseUIActivity( R.id.homeFragment, R.id.modulesFragment, R.id.superuserFragment, - R.id.hideFragment, + R.id.denyFragment, R.id.logFragment -> true else -> false } @@ -170,7 +170,6 @@ open class MainActivity : BaseUIActivity( private fun getScreen(name: String?): NavDirections? { return when (name) { Const.Nav.SUPERUSER -> MainDirections.actionSuperuserFragment() - Const.Nav.HIDE -> MainDirections.actionHideFragment() Const.Nav.MODULES -> MainDirections.actionModuleFragment() Const.Nav.SETTINGS -> HomeFragmentDirections.actionHomeFragmentToSettingsFragment() else -> null @@ -183,7 +182,7 @@ open class MainActivity : BaseUIActivity( R.id.modulesFragment -> MainDirections.actionModuleFragment() R.id.superuserFragment -> MainDirections.actionSuperuserFragment() R.id.logFragment -> MainDirections.actionLogFragment() - R.id.hideFragment -> MainDirections.actionHideFragment() + R.id.denyFragment -> MainDirections.actionDenylistFragment() else -> null } } diff --git a/app/src/main/java/com/topjohnwu/magisk/ui/hide/HideInfo.kt b/app/src/main/java/com/topjohnwu/magisk/ui/deny/AppProcessInfo.kt similarity index 80% rename from app/src/main/java/com/topjohnwu/magisk/ui/hide/HideInfo.kt rename to app/src/main/java/com/topjohnwu/magisk/ui/deny/AppProcessInfo.kt index bd3d46317..a9cdd5ff6 100644 --- a/app/src/main/java/com/topjohnwu/magisk/ui/hide/HideInfo.kt +++ b/app/src/main/java/com/topjohnwu/magisk/ui/deny/AppProcessInfo.kt @@ -1,4 +1,4 @@ -package com.topjohnwu.magisk.ui.hide +package com.topjohnwu.magisk.ui.deny import android.annotation.SuppressLint import android.content.pm.ApplicationInfo @@ -13,7 +13,7 @@ import com.topjohnwu.magisk.ktx.getLabel import com.topjohnwu.magisk.ktx.isIsolated import com.topjohnwu.magisk.ktx.useAppZygote -class CmdlineHiddenItem(line: String) { +class CmdlineListItem(line: String) { val packageName: String val process: String @@ -27,19 +27,19 @@ class CmdlineHiddenItem(line: String) { const val ISOLATED_MAGIC = "isolated" @SuppressLint("InlinedApi") -class HideAppInfo(info: ApplicationInfo, pm: PackageManager, hideList: List) - : ApplicationInfo(info), Comparable { +class AppProcessInfo(info: ApplicationInfo, pm: PackageManager, denyList: List) + : ApplicationInfo(info), Comparable { val label = info.getLabel(pm) val iconImage: Drawable = info.loadIcon(pm) - val processes = fetchProcesses(pm, hideList) + val processes = fetchProcesses(pm, denyList) - override fun compareTo(other: HideAppInfo) = comparator.compare(this, other) + override fun compareTo(other: AppProcessInfo) = comparator.compare(this, other) private fun fetchProcesses( pm: PackageManager, - hideList: List - ): List { + denylist: List + ): List { // Fetch full PackageInfo val baseFlag = MATCH_DISABLED_COMPONENTS or MATCH_UNINSTALLED_PACKAGES val packageInfo = try { @@ -58,9 +58,9 @@ class HideAppInfo(info: ApplicationInfo, pm: PackageManager, hideList: List