Skip to content

Releases: Enginex0/resetprop-rs

v0.4.0

24 Mar 19:36

Choose a tag to compare

feat(core): add context, appcompat, bionic, and wait

Property area lookup now parses the property_info binary trie for
O(depth) resolution instead of linear scanning all areas. Falls back
to text property_contexts on Android 8-9, then to linear scan if
neither is available.

Android 14+ appcompat_override areas are detected and dual-written
automatically, preserving the write mode (stealth, init, standard)
on the mirror area.

Bionic __system_property_* functions are loaded via dlsym as a read
fallback when direct mmap access is unavailable. Entire bionic module
is cfg-gated to Android targets only.

New --wait flag blocks until a property exists or matches a value,
with optional --timeout. Uses bionic __system_property_wait when
available, falls back to futex_wait on the property serial or the
global serial for properties that don't exist yet.

New modules: context.rs (643 LOC), bionic.rs (202 LOC),
appcompat.rs (52 LOC), wait.rs (115 LOC). All 60 tests pass.

v0.3.1

23 Mar 23:01

Choose a tag to compare

build: add x86_64 and x86 Android targets

Extends from 2 ABIs to all 4 Android ABIs so emulator users
and x86 devices get prebuilt binaries too.

v0.3.0

22 Mar 22:57

Choose a tag to compare

v0.3.0

  • Persistent property support via -p and -P flags
  • -p writes to both prop_area (memory) and /data/property/persistent_properties (disk)
  • -P reads directly from the persist file without requiring prop_area access
  • Hand-rolled proto2 encode/decode matching AOSP's PersistentProperties schema
  • Atomic write with SELinux xattr preservation, matching AOSP's temp+rename+fsync pattern
  • Legacy format read support for pre-Android 9 devices (one file per property)
  • PersistStore public API: load, get, set, delete, list
  • PropSystem::set_persist() and PropSystem::delete_persist() for dual memory+disk writes

v0.2.1

22 Mar 20:30

Choose a tag to compare

v0.2.1: add set_init() and --init CLI for init-style serial writes

v0.2.0

10 Mar 22:43

Choose a tag to compare

resetprop-rs v0.2.0 — Stealth Harvest Overhaul

Major hexpatch-delete rework. Replacement names now come from the device's own property vocabulary instead of a static dictionary.

What changed

Runtime segment harvesting — hexpatch scans all properties on the device and builds a per-length word pool. Replacements are drawn from segments that already exist on that specific device, making them indistinguishable from real properties.

Randomized selection — pool picks use OS-seeded entropy instead of deterministic first-match. Same device, different mangled names each run.

Dot-split compound generation — when harvest pool and static dict are exhausted, the fallback now joins short stems with dots (e.g. cfg.hw.svc) instead of cyclic underscore patterns. Produces more natural-looking segment names for long replacements.

Plausible value — mangled properties now show value 0 instead of empty string. Serial field encodes length=1 with counter bits preserved. Indistinguishable from a boot-time property via the public API.

Name consistency fix — trie segments and prop_info name are now written from the same source vector. Previously they could diverge, creating a detectable mismatch between __system_property_find and __system_property_foreach.

Shared segment protection — trie nodes that have children with their own properties are no longer renamed, preventing corruption of sibling properties.

3-tier replacement strategy

  1. Harvest pool (device vocabulary, randomized)
  2. Static dictionary (~95 words, lengths 1-16)
  3. Dot-split compound (stem combinations with dots)

Testing

  • 29 unit tests (mock property areas)
  • 20 on-device tests (OnePlus, Android 14, KSU Next) — all pass
  • Verified against Magisk resetprop: property counts match within 3

Binaries

ABI File
arm64-v8a resetprop-arm64-v8a
armeabi-v7a resetprop-armeabi-v7a

Static, stripped, zero runtime dependencies beyond libc.

v0.1.0

10 Mar 14:41

Choose a tag to compare

resetprop-rs v0.1.0

Pure Rust Android property manipulation. No Magisk dependency.

Features

  • Get/Set/Delete — direct mmap writes, bypasses property_service
  • Hexpatch Delete — trie-aware name destruction with dictionary words, serial preserved
  • Batch Load-f flag loads name=value pairs from file
  • Library cratePropArea and PropSystem with typed errors

Hexpatch Stealth

Unlike magiskboot's blind byte substitution, resetprop-rs walks the actual property prefix trie:

  • Segments renamed with same-length dictionary words (thermal, display, sensor, codec)
  • Trie structure intact — no enumeration gaps
  • Serial counters preserved — no NativeTest detection
  • Shared prefixes (ro, persist) automatically skipped

Binaries

ABI Size
arm64-v8a 322 KB
armeabi-v7a 237 KB

Static, stripped, zero runtime dependencies beyond libc.

Testing

  • 16 off-device unit tests (mock property areas)
  • 17 on-device tests (Redmi, Android 14, KSU Next) — all pass
  • Verified against Magisk resetprop: property count and values match