NO NETWORK · NO TELEMETRY · FAILS CLOSED · v0.3.0

A01

Rooted Android with MagiskValidated

A Magisk-rooted phone reports compromised with four signals: bootloader_unlocked and three root signals.

Validatedandroid

How to read this page

A scenario is one test case: prepare the environment, run the steps, then compare the expected result (written before the run) with the observed result (copied from the run, with screenshots).

A01 · A
Run on a real phone that's been attacked or modified — rooted, jailbroken, hooked or hidden.
Validated
Run, and the result matched what was expected.

Why it matters

Proves detection, not just the absence of false positives.

Environment

App
Example app, library 0.3.0
Device
OnePlus Nord 3 (CPH2493), Android 15 (CPH2493_15.0.0.1601, patch 2026-01-01)
Root
Magisk 31.0, bootloader unlocked (verified boot: orange)

Setup

Prepare the environment.Then run the steps.

  1. 01Root the device with Magisk (see the Android testing guide).
  2. 02Install the example app.
  3. 03Leave the app out of the DenyList (no hiding).

Steps

What to run.What to read.

  1. 01Open the app.
  2. 02Read the status badge and the signal list.

Expected result · written before the run

Status: compromised4 signals.

root_magisk_files fires through the app's own mount table (Magisk's magisk tmpfs mounts). bootloader_unlocked fires with the default bootloaderUnlocked setting.

Observed result · copied from the run

Status: compromisedObserved 2026-10-06.

su was found at /product/bin/su (Magisk's mount), com.topjohnwu.magisk is installed, /proc/self/mountinfo lists Magisk's tmpfs mounts, and ro.boot.verifiedbootstate is orange. On library 0.2.1 (2026-10-02, second screenshot) the same phone reported only root_su_binary and root_management_apps: root_magisk_files checked fixed paths only, and /data/adb/magisk is unreadable to an app — the gap 0.3.0 fixed. Re-run on 2026-10-06 after the Android speed-up (library 0.3.2: system properties read in-process instead of spawning getprop, one /proc/self/maps read, no per-line regex on /proc/mounts), A/B on the same phone, release build, three cold starts each: 0.3.0 took 124–140 ms, 0.3.2 36–46 ms, with the same four signals every time (first screenshot). The 235 ms above is a debug build.

evidence
Status: COMPROMISED · Duration: 235 ms · Ignored: 0 · Signals (4) · [environment] bootloader_unlocked: The device bootloader is unlocked · [root] root_su_binary: A privileged elevation binary was found · [root] root_management_apps: A root or privilege-management app is installed · [root] root_magisk_files: Root framework artifacts were detected
Example app release build on the rooted OnePlus with library 0.3.2: status COMPROMISED, Duration 42 ms, the same four signals — bootloader_unlocked, root_su_binary, root_management_apps, root_magisk_files.
Library 0.3.2 · Android speed-up · release build · 42 ms, same four signals
Example app on a rooted OnePlus with library 0.3.0: status COMPROMISED, four signals — bootloader_unlocked (Environment, Strong), root_su_binary (Strong), root_management_apps (Medium), root_magisk_files (Strong).
Library 0.3.0 · OnePlus Nord 3 · Android 15 · Magisk 31.0 · no hiding
The same phone on library 0.2.1: status COMPROMISED, two signals, root_su_binary marked Strong and root_management_apps marked Medium.
Library 0.2.1 (2026-10-02) · before the root_magisk_files fix and bootloader_unlocked

Checks this scenario covers

Every check this test case touches — including ones that aren't expected to fire here. The expected and observed results above say which ones should and did. Each links to how the check works.