Captures all traffic of an Android emulator or rooted device in ZAP, with one click.
Pick a device in Tools > Android Devices… (or click the phone button in the toolbar) and click Intercept. The add-on then, over adb:
127.0.0.1:<port> to ZAP’s proxy with adb reverse;Proxy.NO_PROXY, raw sockets, …);There’s nothing to export, push or configure by hand.
adb root; the add-on runs adb root for you), or a rooted phone with su (e.g. Magisk). Grant root to “Shell” when asked.localhost or all interfaces, which is the default: adb reverse connects to localhost.adb reverse rule.The system CA injection lives in RAM, so it’s lost when the device reboots: click Intercept again after a reboot. Start or restart the app you want to capture after clicking Intercept : an app that’s already running keeps the CA store it started with.
adb logcat -s zaptun shows lines like TLS api.example.com:443 → ZAP.proxy said: HTTP/1.1 502 ... means ZAP couldn’t reach the destination; Connection refused means ZAP isn’t listening on that port.Certificate pinning isn’t bypassed: apps that pin still need Frida or objection.
With lockdown (“Block connections without VPN” in Android’s settings), apps get no network at all while the VPN is down, so ZAP misses nothing while zaptun reconnects, restarts or hasn’t started yet after a boot. Only system code may change this setting, so the add-on runs a small tool from zaptun’s own APK as root.
adb reverse rule are gone, so nothing gets through until you click Intercept again.dev.davidjosearaujo.zaptun), installed from the APK bundled in the add-on, and granted WRITE_SECURE_SETTINGS (so it can switch Android’s global proxy off while connected, and back on after) and POST_NOTIFICATIONS./data/local/tmp: inject_ca.sh (system store) and install_user_ca.sh (user store).| Options | where zaptun finds adb | |
| API | intercepting devices from scripts and CI |
The add-on, the VPN app it installs and the CA scripts: https://codeberg.org/davidjosearaujo/zaptun