
2.38 MB
Android 10.0+
46
Universal
Verified safeScanned with ClamAV, APKiD, and Quark-Engine. No threats detected.
What's New
https://github.com/sogonov/anubis/compare/0.1.4...0.1.4.1/
Description
Android app manager with VPN integration. Manages groups of apps by freezing/unfreezing them based on VPN connection state.
Unlike sandbox-based solutions (Island, Insular, Shelter), which only isolate apps in a work profile where they can still detect VPN through the shared network stack, Anubis uses pm disable-user to completely disable apps at the system level. A disabled app cannot run any code, detect any network interfaces, or send any data.
Features
- App groups with different network policies:
- Local — apps frozen when VPN is active, launched without VPN
- VPN Only — apps frozen when VPN is inactive, launched through VPN
- Launch with VPN — never frozen, but launching triggers VPN activation
- Home screen launcher — tap app icons to launch with correct VPN state
- Grayscale icons for frozen/disabled apps
- Long press for freeze/unfreeze, shortcut creation, group management
- VPN client orchestration — auto start/stop for supported clients, any client works in manual mode
- Custom VPN client — select any installed app as VPN client from the app list
- Active VPN client detection — identifies which app owns the VPN via dumpsys connectivity owner UID
- Pinned shortcuts — home screen shortcuts that orchestrate freeze/VPN/launch in one tap
- Network check — ping, country, city (IP hidden by default for privacy)
- Quick Settings tile — toggle from notification shade
- Auto-freeze on boot and on app launch if VPN is already active
- VPN disconnect — multi-step: API → dummy VPN takeover → force-stop → kill
How It Works
Freeze Mechanism
Uses Shizuku to execute pm disable-user --user 0 <package> which completely disables an app at the OS level. The app cannot:
- Run any background services
- Receive broadcasts
- Access network interfaces
- Detect VPN or proxy
This is fundamentally different from sandboxing, which still allows the app to run and inspect the network stack.
VPN Start
For clients with known API, sends shell commands via Shizuku:
- SEPARATE (NekoBox): am start to exported QuickEnable/QuickDisable activities
- TOGGLE (v2rayNG, Happ, v2rayTun, V2Box): am broadcast to widget receiver
- MANUAL (any other client): opens the app, user connects manually
VPN Stop
Toggle commands are unreliable for stopping (can re-enable immediately), so Anubis uses a multi-step approach:
- API stop — only for SEPARATE clients with explicit stop command
- Dummy VPN — establish our own VPN to revoke theirs, then close ours
- am force-stop — kill the detected VPN app process
Apps are never unfrozen while VPN is still active.
VPN Detection
Extracts the VPN network owner UID from dumpsys connectivity by matching type: VPN[ pattern, then resolves UID → package name via pm list packages --uid. Works with any VPN client, including unknown/custom ones.
Supported VPN Clients
- v2rayNG
Package: com.v2ray.ang
Control: Auto toggle
Method: Widget broadcast
- NekoBox
Package: moe.nb4a
Control: Full start/stop
Method: Exported activities
- Happ
Package: com.happproxy
Control: Auto toggle
Method: Widget broadcast
- v2rayTun
Package: com.v2raytun.android
Control: Auto toggle
Method: Widget broadcast
- V2Box
Package: dev.hexasoftware.v2box
Control: Auto toggle
Method: Widget broadcast
- Any app
Control: Manual
Method: Accessibility service
Discovering VPN Client APIs
For closed-source clients, broadcast actions can be discovered via APK analysis using jadx:
1. Resources → find app_widget_name in strings.xml (resources are not obfuscated)
2. Manifest → find <receiver> with android.appwidget.provider metadata → get class name
3. Receiver code → find setAction("...") → this is the broadcast action
4. Verify → check onReceive() for the isRunning ? stop : start toggle pattern
All v2ray/xray forks share the same pattern:
Action: <package>.action.widget.click
Receiver: <package>.receiver.WidgetProvider
Shell command to toggle:
am broadcast -a <package>.action.widget.click -n <package>/.receiver.WidgetProvider
This is standard Android IPC discovery, not reverse engineering of protected code. Broadcast actions are public interfaces by design.
Requirements
- Android 10+ (API 29)
- Shizuku installed and running
- At least one VPN client installed
Setup
1. Install and start Shizuku (via ADB or Wireless Debugging)
2. Install Anubis
3. Grant Shizuku permission when prompted
4. Grant VPN permission when prompted (needed for dummy VPN disconnect)
5. Go to Apps tab, assign apps to groups
6. Select your VPN client in Settings (known or custom)
7. Toggle stealth mode on the Home screen
License
MIT
Rate this app
Ratings & reviews
No reviews yet.