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

# 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。
## 功能
### 截图
### 双引擎
- **出口代理 (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, 流量抓包, 网络流量代理