dmatscheko/pivot-proxy-android

GitHub: dmatscheko/pivot-proxy-android

一款 Android 渗透测试枢纽代理应用,通过本地 VPN 捕获全部设备流量并转发至外部检查代理,同时保持流量从手机自身网络出口发出以还原真实来源。

Stars: 2 | Forks: 0

Pivot Proxy logo # Pivot Proxy
一款用于渗透测试的 Android 应用,可将手机变成一个透明的 **枢纽 (pivot)**:它通过本地 VPN 捕获设备上的所有流量,将其路由至 外部检查代理(例如 **Burp Suite**),然后再发送回手机自带的 SOCKS5 代理,从而使流量最终通过手机自身的网络接口流出。 结果是:你可以在 Burp 中检查 100% 的设备流量,同时源 服务器看到的仍然是**手机自身**的 IP(同一运营商/Wi-Fi 网络),并且 DNS 域名解析 在手机上进行,而不是在运行 Burp 的笔记本上。 ``` apps on phone ─▶ VPN capture ─▶ upstream proxy (Burp) ─▶ phone's egress proxy ─▶ internet (resolves DNS on-device, egresses via phone) ``` 该应用使用纯 Kotlin + Jetpack Compose 编写,**没有自定义的 native 二进制文件** —— tun 与 SOCKS 之间的桥接是一个用 Kotlin 编写的用户态 TCP/IP 协议栈。它使用了 [SocksDroid](https://github.com/bndeff/socksdroid) 和 [MicroSocks](https://github.com/rofl0r/microsocks) 的代码,并将其转换为 Kotlin。 ## 功能 ### 截图

Setup tab — status dashboard and how-to screenshot      VPN tab — capture via upstream proxy screenshot      Egress tab — on-device SOCKS5 proxy screenshot

### 双引擎 - **出口代理 (Egress proxy)** —— 一个设备端的 SOCKS5 服务器,最终将捕获的流量 通过手机自身的网络接口发出,因此源服务器看到的是**手机自身**的 IP, 并且 DNS 在设备上进行解析。支持自定义端口、绑定地址和身份验证。 - **捕获 VPN** —— 一个本地 `VpnService`,通过用户态、纯 Kotlin 编写的 tun 与 SOCKS 桥接器提取所有设备流量,并将其转发到你的上游检查 代理,支持 DNS-over-SOCKS5。 同时运行这两者**正是**枢纽(pivot)的核心所在。 ### 通过四个标签页进行控制 | 标签页 | 用途 | | --- | --- | | **Setup** | 实时状态仪表盘(Egress + VPN)以及枢纽配置指南。 | | **Egress** | 设备端 SOCKS5 代理,最终将流量发出。包含主开关 + 端口/绑定/身份验证设置。 | | **VPN** | 捕获 VPN:包含上游代理、代理类型、DNS 模式、域名绕过以及按应用捕获设置。包含主开关。 | | **Options** | 设置在开机时启动出口代理和/或 VPN 捕获,并提供电池优化设置的快捷方式。 | Egress 和 VPN 的导航图标带有一个小的状态点:**绿色 = 运行中**, **灰色 = 已停止**。 ### 定义拦截范围 - **绕过域名** —— 直接连接到互联网、跳过代理的主机 (匹配子域名)。适用于在拦截下会失效的固定依赖项。 - **按应用捕获** —— 捕获所有应用、仅捕获选定应用(仅限你的目标应用),或 捕获除选定应用外的所有应用。被排除的应用永远不会进入 VPN,因此它们的流量和 TLS 保持 不变。 ### 从 PC 自动化控制 - **adb 控制** —— 这两个引擎都可以通过已连接的 PC 使用 `adb` 广播进行配置和开关切换,非常适合用于编写测试任务的脚本。控制接收器受 `android.permission.DUMP` 权限限制,因此只有 adb/`shell`(以及系统)可以驱动它。请参阅 **[docs/adb-control.md](docs/adb-control.md)** 获取完整的操作列表和键位说明。 ## 权限与说明 - **通知** —— 两个引擎均作为前台服务运行,并带有持续 通知(Android 系统要求)。拒绝该权限只会隐藏通知; 代理/VPN 仍可正常工作。 - **VPN 同意** —— 首次启动 VPN 捕获时,Android 会显示一个系统对话框。 这对于任何 VPN 应用都是强制性的,并且无法通过广播显示 —— 因此在通过 adb 驱动它之前,请先从应用中 启动一次 VPN。 - **电池优化**(可选)—— 部分厂商会杀掉后台服务;如果服务 总是自动停止,Options 标签页可为你提供指向排除项设置的链接。 ## 安装 从 [Releases 页面](https://github.com/dmatscheko/pivot-proxy-android/releases/latest) 获取最新的 **`pivot-release.apk`**,并在设备上打开该文件进行安装(“安装未知应用”),或者通过 adb 安装: ``` adb install -r pivot-release.apk ``` 更倾向于自己构建?只需一步即可构建并安装 debug 版本: ``` ./gradlew installDebug ``` 如果希望转而使用 adb 安装,请先构建 APK,然后进行安装: ``` ./gradlew assembleDebug adb install -r app/build/outputs/apk/debug/pivot-debug.apk ``` 有关工具链和架构,请参阅 [DEVELOPMENT.md](DEVELOPMENT.md)。 此应用为**侧载 (sideload)** 安装 —— 不在 Play Store 上架。 ## 配置枢纽 简而言之:启动 **Egress** 代理,将 **VPN** 的上游指向你的 Burp 代理,将 Burp 链回至手机的出口,然后启动 **VPN 捕获** — 流量随后将按照 应用 → VPN → Burp → 手机出口 → 互联网 的路径流动。 完整的操作指南 —— 包括信任 Burp 的 HTTPS CA 证书、定义要捕获的应用和域名 范围,以及通过 Wi-Fi 或 USB 连接到手机 —— 可在 **[docs/pivot-setup.md](docs/pivot-setup.md)** 中找到。 ## 许可证 Copyright (C) 2026 David Matscheko 本程序为自由软件:你可以根据自由软件基金会发布的 **GNU Affero General Public License** 的条款进行 重新分发和/或修改;适用该许可证的第 3 版,或(由你选择)任何更高版本。 分发本程序的目的是希望它有用,但**不提供任何保证**;甚至不包括 适销性或特定用途适用性的默示保证。有关更多详细信息,请参阅 GNU Affero General Public License。 你应该已经随本程序收到了一份 GNU Affero General Public License 的副本。 如果没有,请访问 。全文请见 [LICENSE](LICENSE)。
标签:Android, DSL, Kotlin, SOCKS5代理, VPN, 流量抓包, 网络流量代理