Hide a fixed set of well-known root and hook packages

With per-app configuration gone, the hidden list is the same for every app
and can't be edited at runtime, so it carries the well-known names instead
of only KernelSU, Magisk and Veil. 28 packages plus Veil, grouped in
Features.kt:

- root managers: Magisk, Magisk Delta, Magisk Alpha, KernelSU, KernelSU
  Next, SukiSU Ultra, APatch
- module managers and helpers: MMRL (both variants), Magisk Module
  Manager, KsuWebUI
- hook frameworks and managers: Vector, LSPosed, LSPatch, EdXposed,
  Xposed installer, Taichi, VirtualXposed, Substrate
- older su apps and one-click root tools

Packages that aren't installed match nothing, so a name that's wrong or
absent is harmless. Most names were not checked against an install; only
KernelSU and MMRL were present on the test device. Xposed modules in
general have no common package name, so they stay uncovered by name.

The settings screen shows the count and puts the list behind a toggle.
Verified on device with Veil Probe: the installed ones (KernelSU and both
MMRL packages) report HIDDEN across all ten lookups, no LEAK/FAIL/ERROR,
and a scoped app still starts.

Co-Authored-By: agent <agent@bdeshi.space>
This commit is contained in:
bdeshiandagent committed 2026-11-03 20:37:23 +06:00
1 parent cfed7989f2
commit 62549d7741
3 files changed
+60 -6

No files matched your search

@@ -35,9 +35,48 @@ object Features {
// Fixed at build time; edit and rebuild to change. Veil itself is here too: an installed
// hooking module is as much a tell as a root manager.
//
// Well-known root managers, module managers, hook frameworks and older su apps, by package
// name. Packages that aren't installed match nothing, so a name that's wrong or absent is
// harmless. Not covered: Xposed modules in general (they have no common package name;
// detectors find them by manifest metadata).
val HIDDEN_PACKAGES: Set<String> = setOf(
"me.weishu.kernelsu",
"com.topjohnwu.magisk",
SELF_PACKAGE,
// Root managers: Magisk and forks, KernelSU and forks, APatch
"com.topjohnwu.magisk",
"io.github.huskydg.magisk",
"io.github.vvb2060.magisk",
"me.weishu.kernelsu",
"com.rifsxd.ksunext",
"com.sukisu.ultra",
"me.bmax.apatch",
// Module managers and helpers
"com.dergoogler.mmrl",
"com.dergoogler.mmrl.wx",
"com.fox2code.mmm",
"io.github.a13e300.ksuwebui",
// Hook frameworks and their managers
"org.matrix.vector.manager",
"org.lsposed.manager",
"org.lsposed.lspatch",
"de.robv.android.xposed.installer",
"org.meowcat.edxposed.manager",
"com.solohsu.android.edxp.manager",
"me.weishu.exp",
"io.va.exposed",
"com.saurik.substrate",
// Older su apps and one-click root
"eu.chainfire.supersu",
"com.koushikdutta.superuser",
"com.noshufou.android.su",
"com.noshufou.android.su.elite",
"com.thirdparty.superuser",
"com.yellowes.su",
"me.phh.superuser",
"com.alephzain.framaroot",
)
}
@@ -105,14 +105,16 @@ class SettingsActivity : AppCompatActivity() {
}
root.addView(featureCard, marginTop(dp(8)))
root.addView(sectionTitle("Hidden packages"), marginTop(dp(16)))
root.addView(sectionTitle("Hidden packages (${Features.HIDDEN_PACKAGES.size})"), marginTop(dp(16)))
root.addView(TextView(this).apply {
text = "Fixed in this build — edit Features.HIDDEN_PACKAGES and rebuild to change."
text = "Fixed in this build — edit Features.HIDDEN_PACKAGES and rebuild to change. " +
"Packages that aren't installed match nothing."
textSize = 13f
alpha = 0.8f
setPadding(0, dp(4), 0, dp(8))
})
root.addView(ChipGroup(this).apply {
val packageChips = ChipGroup(this).apply {
visibility = View.GONE
for (pkg in Features.HIDDEN_PACKAGES.sorted()) {
addView(Chip(this@SettingsActivity).apply {
text = pkg
@@ -120,7 +122,16 @@ class SettingsActivity : AppCompatActivity() {
isCheckable = false
})
}
}
root.addView(MaterialButton(this).apply {
text = "Show list ▾"
setOnClickListener {
val show = packageChips.visibility != View.VISIBLE
packageChips.visibility = if (show) View.VISIBLE else View.GONE
text = if (show) "Hide list ▴" else "Show list ▾"
}
})
root.addView(packageChips)
setContentView(ScrollView(this).apply { addView(root); fitsSystemWindows = true })
}