Releases: Enginex0/zeromount
Releases · Enginex0/zeromount
v2.0.216-dev
Features
Mount Engine
- Replace BFS planner with SAR-aware partition-root resolver — one overlay per resolved partition, aligns mount IDs with partition boundaries to defeat stat-based detection
- Handle >50 overlay layers via staging pyramid — intermediate read-only overlays on
/devprevent kernel layer limit failures (64 on older kernels, 128 on 5.10+) - Narrow-dir overlay deferral — dirs like
lib,lib64,fontsforce BFS descent; shallow files fall back to individual bind mounts, preventing overlay from masking GPU drivers and shared libs - Add
mount.exclude_hosts_modulesto skip modules containing/system/etc/hosts(prevents global DNS breakage, default: true) - Add
mount.module_blacklist— CSV list of module IDs to exclude from scanning - Add
mount.ext4_image_size_mb— override auto-calculated sparse image size (0 = auto, min 64MB) - Add
mount.restart_framework— stop/start Android framework after mounting for modules that need it - Pre-mount script execution — run other modules'
post-fs-data.shbefore mount pipeline in metamodule mode so dynamically created files are visible to the scanner - Per-module overlay fallback to MagicMount — one bad overlay no longer takes all mounts down
- VFS executor pre-injects directory rules for missing ancestor paths before leaf file rules
- Reflink (FICLONE) copy for f2fs CoW acceleration during overlay staging
Stealth & Anti-Detection
- Migrate prop spoofing from persistent daemon to short-lived CLI calls via
resetprop-rs— no persistent mmap handle visible to detection apps - Stealth property writes — no serial counter bump, no futex wake, no global serial broadcast
- Count-preserving nuke operations for PIF-leaking and custom ROM properties with arena compaction
- Defer all BRENE path hiding to boot-completed, matching real BRENE timing — paths and mounts aren't stable at post-fs-data
- Bridge susfs4ksu multi-value fields:
hide_sus_mnts0/1/2 (off-after-boot),emulate_vold_app_data0/1/2 (sus_path_loop),skip_legit_mounts,hide_cusromlevels 0-5,sus_open_redirect.txt, kstat JSON - Remove verified boot hash (
ro.boot.vbmeta.digest) spoofing — conflicts with other root modules handling the same property
Module Management
- Auto-skip modules that perform their own mounts — heuristic scan of
post-fs-data.shandservice.shfor mount/bind commands prevents double-mount conflicts - Hot install support for script-only modules via
MODULE_HOT_INSTALL_REQUEST="true"— activates without reboot - Module exclusions UI — checkbox list on Status tab with optimistic update and rollback
- Stop calling other modules' post-fs-data scripts from metamount — trust KSU to handle script orchestration, preventing double-execution of non-idempotent modules
Safety & Recovery
- Unify boot guard into single bootcount with self-disable — one failed boot disables zeromount only, replacing the dual competing shell+Rust system
- Disable SystemUI monitor by default — prevents false-positive recovery lockouts
- Volume-key config preservation on reinstall — stash config on uninstall, 60s prompt to preserve or reset on upgrade
- Atomic
module.propwrites via tmp+rename to prevent corruption on OOM kill or watchdog timeout - Panic hook and mount-error handler surface crash context in KSU/APatch manager description field
WebUI
- Migrate shell execution layer from
kernelsutokernelsu-altwith proper stderr preservation - Browser locale detection with device-hint fallback via
__ZM_LOCALE_CODE__injected at boot - Guard module whitelist — protect specific modules from bootloop recovery disabling
- Complete internationalization across 36 locales (391 keys each) — activity log, capabilities, engine options, scenario descriptions all translated
- Mode-positive status display — all 3 mount modes shown as equally functional; no false "Degraded" warnings for non-VFS users
- Warn when MagicMount selected without SUSFS — contextual hint nudging toward OverlayFS
- Module exclusions section — checkbox list to blacklist modules,
meta-zeromountlocked to prevent self-exclusion - Collapse Performance and Emoji toggles into collapsible "More" subgroup
- Bootstrap ADB toggles from live Android state on every init, not stale cache
- Drop Orange and Lime from accent color palette
- Polish UI component styles across all tabs
Build & Deploy
--deployand--rebootflags forpackage.sh— push ZIP to device, install via ksud/apd, and reboot in one command--release/--debugdeploy profile selection
Bug Fixes
- Fix vol-key timeout during install —
choose_config 0blocked indefinitely over ADB sincegeteventhas no stdin; now 60s timeout - Fix metamount.sh using hardcoded filename instead of iterated
$_pfdvariable for post-fs-data script paths - Harden input validation, error propagation, and boot script safety — 19 findings fixed across Rust core, WebUI, and shell scripts (path traversal rejection, shell interpolation sanitization, timeout restoration, stale artifact cleanup)
- Wire overlay executor to partition-root resolver — SAR alias paths (
system/vendor/*) now correctly map to the vendor partition overlay - Fix deploy script calling
su -cwhich doesn't exist on KSU — call ksud/apd binaries directly - Stage
resetprop-rsbinary andprop_table.shin ZIP packaging pipeline - Add missing
install_i18n.shandinstall_func.shto SCRIPTS array — install was failing on device - Fix SELinux context in overlay mode — copies context from real system path instead of module source on
/data - Clean up
skip_mountflags from previous boots — prevents permanent module orphaning on Magisk - Hijack sweep no longer treats KSU bind mounts as rogue when they fall under ZeroMount-managed paths
Performance
- Eliminate all root shell I/O from WebUI init —
service.shpre-generateszm-init.jsat boot containing thewebui-initJSON blob, system accent color, and all 36 locale bundles; WebUI loads data synchronously at parse time, cutting 5+ shell round-trips (200-500ms each) on every open
Refactors
- Remove unused
notify_module_mountedtrait method and all impls — notification handled entirely from shell - Switch WebUI packaging from npm to pnpm to match lockfile
CI/CD
- Full release pipeline — build all 4 ABIs (debug+release), build WebUI and axon from source, package ZIPs, extract changelog, publish GitHub release with both ZIPs attached
- Switch build triggers to manual dispatch only — no unnecessary CI on every push
Documentation
- Rewrite README body — concise grouped features, orchestration pipeline overview, mount strategy comparison table, dual Telegram links (group + channel)
Dependencies
- Bump resetprop-rs to v0.2.1 — corrupt data hardening, futex wake, per-process prop isolation, persistent property support, protobuf bounds checks
- Upgrade resetprop-rs to v0.4.0 — stealth writes, nuke operations, arena compaction
- Switch resetprop to remote git dependency (no local submodule checkout required)