Releases: Bouteillepleine/DuckUSB
Release list
v1.4.0
Full Changelog: v1.3.3...v1.4.0
v1.3.3
v1.3.2
1.3.0
Framework mode now works, and it is the recommended way to use DuckUSB: one hook in system_server covers every app at once, with no per-app scope.
⚠️ Scope the right entry
In LSPosed → DuckUSB → Scope, tick "Cadre du sous-système" / package system.
Not "Système Android" / package android — that one does not inject into system_server. Picking it gives you a module that looks enabled and silently does nothing. This release declares an xposedscope recommendation so LSPosed highlights the correct entries. Reboot after scoping.
What's new
- Framework mode, hooking
ContentProvider.attachInfoand then only the settings provider'scall(), matched by authority so ROMs that subclassSettingsProviderstill work. Callers below uid 10000 (root / system / shell) always see the truth, soadband the Settings toggle keep working. - Diagnostics that prove it. A small binder service inside
system_server(never registered withServiceManager) reports the hook count, uptime, and every caller that was lied to since boot with per-key counts. A mis-scoped module used to look identical to a working one. - Live config. Toggles push to
system_serverover that binder and apply immediately, no reboot. - Pause switch — stops all spoofing at once. It does not uninstall hooks or unload the native library; LSPosed's own switch remains the real off.
- Property spoof is now automatic in scoped non-core apps — the toggle is gone. Scoping an app already states the intent.
- Mutually exclusive settings layers. Framework mode and per-app spoof cover the same ground; whichever is on greys out the other.
- UI: merged status card, collapsible caller list, light/dark toggle, regrouped sections, optional verbose logging.
Fixed
sys.usb.ffs.readyis no longer spoofed. It is the USB function-filesystem ready flag — machinery the USB stack acts on, not telemetry a detector reads. Claiming0could take the whole USB gadget down: no MTP and no adb.- Core processes are properly protected.
handleLoadPackagefires once per package hosted in a process, not once per process — with thesystemscope,system_serverreportsandroid,com.android.providers.settings,com.android.location.fused,com.android.server.telecomand more, all at uid 1000. The old package-name check caught only the first, so the property spoof could install insidesystem_server. Now guarded three ways: uid, process name, and package name. - OS file-transfer plumbing is spared from both spoofs —
com.android.mtpand friends run at app uids, so the uid guard alone does not reach them.
Upgrading
Signed with the same key as 1.1, so this installs as an in-place update — no uninstall, and your LSPosed enable/scope is preserved.
Tested on
OnePlus 15 (CPH2747) / OxygenOS / Android 16 with LSPosed + KernelSU. Framework mode is verified there and nowhere else; other ROMs are unknown, though the provider is matched by authority and the guards key off uid and process name rather than OEM-specific package names.
1.1
What's new
- USB system-property spoof —
sys.usb.*/init.svc.adbdnow spoofed via JavaSystemPropertiesand native libc hooks, catching detectors that read raw properties instead of the Settings provider. - Redesigned Material 3 app UI.
- Native hooks skip core OS processes (system_server / SystemUI) and publish their override map lock-free.
Install the APK, enable DuckUSB in LSPosed, then scope your detector apps. See the README.
1.0
First release under the DuckUSB name (renamed from DuckADB).
- Spoof USB debugging / wireless debugging / Developer Options as off to scoped apps, while they stay genuinely on.
- Hide the persistent "USB debugging enabled" notification (needs System Framework + System UI scoped).
- Two live toggles, both on by default, applied without a reboot.
- Core OS is hard-skipped for the spoof half.
Functionally identical to DuckADB v1.1, which was verified on-device (spoof + notification A/B + live toggles all confirmed working).