The only way to deal with an unfree world is to become so absolutely free that your very existence is an act of rebellion.
— Albert Camus
Detect captive portals and automatically get liberated on Android and Linux.
Features:
- Foreground service watching network state and trying to log in when a portal is detected.
- Optional Xposed integration to hint Android to re‑evaluate/accept the connection after liberation.
- Settings screen.
- Export for submitting new portals.
- Download the APK from GitHub Releases
- Install the APK on your Android device
- Grant the required permissions
- Open the app
- Grant permissions
- Toggle on the Service Status switch to enable the background monitoring service
- The service will automatically detect and liberate captive portals when you connect to Wi-Fi networks
You can manually trigger a liberation attempt:
- Open the app or view the notification
- Tap "Liberate me now" to attempt liberation on the current network
- The notification will show whether the attempt was successful
To help add support for new portals:
- Connect to a captive portal network
- Open the app and tap "Capture portal"
- Liberate the portal manually
- Upload the captured data
The Linux module is a JVM CLI that listens to NetworkManager via nmcli and runs the liberator when connectivity
changes to portal.
Build a fat jar:
./gradlew :linux:shadowJar- Artifact:
linux/build/libs/linux-shadow.jar
Run:
- One‑shot check:
java -jar linux/build/libs/linux-shadow.jar --oneshot - As a service (keeps monitoring):
java -jar linux/build/libs/linux-shadow.jar --service - Options:
--force: run without checking connectivity first (implies one‑shot)--experimental: enable experimental/incomplete portal handlers--restartNetworking: toggle NetworkManager off/on at start;- at runtime: press
rto restart networking,qto quit
HAR files contain the HTTP traffic needed to liberate a portal. If you find a new portal, please capture the traffic (via app or browser: Chrome or Firefox DevTools) and submit it (via app, Telegram, or GitHub; will contain all personal information you send to the portal). This will help me add support for it.
Portal support lives under liberator/src/main/kotlin/de/binarynoise/liberator/portals. To add a portal:
- Copy the
_Templateclass and rename it. - Implement
PortalLiberatorwithcanSolve(...)andsolve(...)methods. - Optionally annotate with
@SSID("ssid1", "ssid2", ...). - Submit a Pull Request.