ProxyPin 抓包工具深度盘点|请求重写、屏蔽、证书绕过一次看全

系统工具 ·约 11 分钟 ·記筆記的貓:團子

ProxyPin 是什么

ProxyPin 是一款面向开发者与逆向爱好者的移动端网络调试工具,目前主平台是 Android APK(35.69MB,包名 com.network.proxy,最新 1.3.0)。它的核心定位不是"又一个 VPN",而是一个功能完整的 HTTP/HTTPS MITM 代理——在常规抓包基础上叠加了请求重写、请求屏蔽、Hosts 映射、JS 脚本引擎、AES 解密等调试能力,甚至对 Flutter 的证书固定做了原生绕过。

这款工具的开发者是 Flutter 社区活跃贡献者,所以对 Flutter App 的抓包体验特别好。传统工具(Charles、mitmproxy)在系统层做 MITM,碰不到 Flutter Dart HttpClient 的证书验证层;ProxyPin 则识别 Flutter 的 JA3 指纹后直接在 Dart 层 Hook 证书校验逻辑,无需 Frida、无需改源码、无需 Xposed 框架——扫码连接就能解密 Flutter App 的 HTTPS 流量,这是它最独特的卖点。

ProxyPin 主界面

安装

ProxyPin下载 的安装包体积 35.69MB,属于典型的 Android APK 安装流程,但有几个专属注意事项。

平台前置条件:Android 7.0(API 24)及以上均可正常运行。ProxyPin 内部会创建本地 VPN 通道接管系统流量,所以安装后首次启动会弹出 VPN 授权对话框——这一步必须点"允许",否则抓包功能完全不可用。有些国产 ROM(MIUI、ColorOS)会在 VPN 创建时额外弹权限提示,同样放行即可。

HTTPS 根证书安装是整个流程中最关键的一步。ProxyPin 在「我的」→「HTTPS 代理」中提供证书安装入口,安装方式是导出根证书后跳转到系统证书安装页面手动导入。Android 10 及以上版本将用户证书隔离存储,不会影响系统安全性,但需要你在安装完成后回到 ProxyPin 确认证书已被信任——没信任的话 HTTPS 请求会以"证书错误"状态显示在请求列表里,看不到明文内容。

首次启动后建议立即配置代理过滤——进入「我的」→「代理过滤」,把目标 App 的域名加到白名单里。ProxyPin 默认抓所有流量,不加白名单的话请求列表会被系统自带的推送服务、应用商店后台请求等噪音淹没,真正想看的 API 调用反而找不到。

能力域一:请求重写——在 HTTP 语义层操作流量

请求重写是 ProxyPin 最常用的调试工具,本质上是在请求/响应链路中做静态替换操作。它和 JS 脚本的关系是"能用请求重写解决的就不用脚本"——配置更简单、性能更好,适合固定规则的场景。

重定向(Redirect):支持 301 永久、302 临时、307 临时(保留请求方法)三种状态码。最常见的用法是把生产 API 整体转到测试环境,匹配 https://api.example.com/* 替换为 https://staging-api.example.com/$1,$1 是正则捕获组引用,通配符匹配的路径自动填入新 URL。

请求头与响应头重写:支持添加、删除、替换三种操作。调试时给 API 注入测试 Token 就是典型场景——匹配所有 API 请求,往 Authorization Header 里加 Bearer test-token-for-debug。响应头重写主要用来解决跨域问题,本地开发时给响应补上 Access-Control-Allow-Origin: *。

请求体与响应体替换:这是最灵活也最强大的功能。请求体替换可以把 POST 里的生产 API Key 替换成测试值,用正则 pk_live_[a-zA-Z0-9]+ 匹配替换。响应体替换则是"假数据注入"——比如把 https://api.example.com/user/profile 的响应完全改掉,返回一个余额为 0 的测试用户对象,用来测试边界条件。

多条规则同时启用时按列表顺序从上到下独立执行,可以组合出复杂效果。建议把高频规则放前面,减少匹配次数。

能力域二:请求屏蔽——让请求根本发不出去

请求屏蔽和域名过滤是互补关系:域名过滤在 TLS 握手前拦截(粗粒度,整域名),请求屏蔽在请求发出前阻断(细粒度,特定 URL 或 URL 模式)。

典型的屏蔽场景有三类:

屏蔽广告与追踪 SDK:Google Analytics、Facebook 追踪像素、友盟、AppsFlyer、Adjust、Crashlytics 等第三方 SDK 经常在后台发追踪请求,既浪费带宽又侵犯隐私。用 glob 通配符 **/*google-analytics.com/* 就能屏蔽整组追踪域名。

屏蔽不想执行的操作:调试时不希望支付、订单确认等真实请求发出去,匹配 **/payment/** 或 **/order/**/confirm 直接阻断。App 侧收到的是连接失败或超时错误,不会产生真实业务影响。

测试离线降级逻辑:屏蔽商品列表接口,看 App 在网络异常时的降级表现——是显示空页面、缓存数据还是友好提示。

屏蔽规则的通配符语法值得注意:* 匹配单路径段,** 匹配任意多层路径。比如 **/*.gif 能屏蔽所有 GIF 格式的追踪像素,https://cdn.example.com/images/ads/* 只屏蔽特定路径下的广告图片。

ProxyPin 设置面板

能力域三:Hosts 映射与域名过滤

Hosts 映射是 DNS 层的域名重定向——在请求发出前直接把域名解析到指定 IP,相当于代理层的自定义 Hosts 文件。它比请求重定向更底层,因为发生在 TCP 连接建立之前,完全不影响 HTTP 请求本身。

典型场景是把某域名指向本地 Mock 服务 IP,或者绕过 DNS 污染。和请求重定向的区别是:Hosts 映射只改 DNS 解析结果,URL 本身不变;请求重定向是真的改了 HTTP 请求的 URL。两者可以组合使用。

域名过滤则是 ProxyPin 的第一道流量闸门——白名单模式只抓列表内域名,黑名单模式排除列表内域名。对于多 App 调试场景,强烈建议用白名单模式,只把目标 App 的 API 域名加进去,避免系统服务和其他 App 的噪音干扰。

能力域四:Flutter 证书固定绕过——ProxyPin 独有的杀招

Flutter 的 HTTPS 栈完全独立于系统层——Dart 的 HttpClient 自己做证书校验,只信任通过 SecurityContext 显式配置的根证书,根本不信任系统里手动安装的用户证书。更严格的 App 还会做证书固定(Certificate Pinning),比对服务器证书的 SHA-256 指纹,只接受预定义的那几个证书。

传统工具(Charles、mitmproxy)在系统层做 MITM,碰不到 Dart 层的证书验证,所以 Flutter App 抓包一直是难点。常见的绕路方案包括:Frida + Objection Hook、Xposed 的 SSLUnpinning 模块、给 Flutter 代码加 badCertificateCallback 空实现、改 network_security_config.xml 配置——但这些方案要么需要 Root、要么需要重新编译 APK、要么只能改自己的 App。

ProxyPin官网 的解法是识别 Flutter HTTPS 握手的 JA3 指纹特征,然后在 TLS 握手环节直接在 Dart 层 Hook 证书验证逻辑,把服务器证书替换成 ProxyPin 自签发的受信任版本。整个过程对用户完全透明——扫码连接后 Flutter App 的流量自动出现在请求列表里,HTTPS 响应体直接明文可见,不需要任何额外操作。

短板也要说

ProxyPin 目前的短板主要集中在三个方面。

平台覆盖不完整:Android 端功能最完善,桌面端有客户端但功能比移动端精简,iOS 端(通过 PC 连接)功能也有限。如果你的主力调试平台是 iOS,可能需要搭配 Charles 或 mitmproxy 使用。

脚本引擎生态弱:JS 脚本功能存在但文档和示例不多,社区也不够活跃。相比 mitmproxy 的 addon 体系和 Charles 的 Map Remote,ProxyPin 在复杂脚本调试场景下的体验有差距。能用请求重写解决的尽量用,真需要脚本时可能要自己摸清楚 API。

AES 解密规则配置门槛高:有些 App 会在请求体里做 AES 加密,ProxyPin 提供了自动解密规则配置,但需要你知道加密算法、密钥来源、加密模式(CBC/ECB/GCM)、Padding 方式——这些信息往往需要逆向 App 才能拿到,对于纯前端开发者来说门槛不低。

什么样的人该用它

移动应用开发者(Android/Flutter):这是 ProxyPin 的核心用户群。HTTPS 抓包是日常工作,Flutter 证书固定绕过直接解决了一个老痛点——以前可能要在 Frida 上折腾半小时,现在扫码就能看明文。请求重写也比自己搭 Mock 服务器省很多事,前后端并行开发时直接把生产 API 重定向到本地 Mock。

移动安全研究者与逆向爱好者:请求屏蔽、响应体替换、AES 解密这三板斧组合起来,足够做大部分安全测试场景。尤其是 Flutter App 的逆向场景,ProxyPin 提供了最快的起步路径。

前端工程师(配合移动端调试):如果你的 App 里嵌入了 WebView 或者需要和 App 原生层联调,ProxyPin 能帮你看清真实的网络请求全貌——WebView 的 fetch/XHR 请求和原生层的 Dio 调用都能抓。相比浏览器 DevTools,ProxyPin 能看到完整的 TLS 握手和加密前的明文数据。

本文為個人基於網路公開資料整理編寫,非官方內容,僅供學習交流參考;軟體版權歸原作者所有,請支持正版;使用過程中遇到問題請查閱官方管道,本文不承擔任何責任。

團子還試過這些