返回博客

通过代理绕过SSL Pinning:如何截获移动应用流量而不破坏测试

SSL Pinning 阻止了拦截移动应用程序的流量——我们将讨论如何通过代理在没有深厚技术知识的情况下绕过它。

📅2026年8月6日
```html

您正在设置代理,连接设备——但应用程序仍然不显示流量或因错误而崩溃。问题很可能出在SSL Pinning上:开发人员故意将其嵌入应用程序中,以阻止拦截HTTPS请求。这对分析竞争应用程序行为、测试广告集成或研究市场API的所有人来说都是一个头痛问题。

在本指南中,我们将讨论什么是SSL Pinning,它为什么会妨碍代理的工作,以及如何逐步绕过它,而不涉及多余的理论。

什么是SSL Pinning,为什么将其嵌入应用程序

SSL Pinning(或证书Pinning)是一种安全机制,移动应用程序提前“嵌入”特定的SSL证书或服务器的公钥。每次连接时,应用程序都会检查:服务器的证书是否与内部嵌入的证书匹配?如果不匹配——连接将被中断。

在普通的HTTPS方案中,浏览器或应用程序信任任何由受信任的证书颁发机构(CA)签署的证书。这正是Charles Proxy或mitmproxy等代理工具所利用的:它们插入自己的证书,解密流量并将其转发。用户可以看到所有数据交换的明文。

SSL Pinning破坏了这一方案。应用程序看到代理工具的证书,意识到它与服务器的“原生”证书不匹配,因此拒绝工作。这就是为什么您会看到诸如SSL handshake failedCertificate verification failed或应用程序中仅显示空白屏幕的错误。

开发人员出于几个原因实施SSL Pinning:

  • 防止中间人攻击(MITM)
  • 防止API的逆向工程
  • 防止机器人和自动化请求
  • 隐藏内部的货币化和广告集成逻辑

积极使用SSL Pinning的应用程序包括:银行应用程序、市场(Wildberries、Ozon)、广告SDK(Facebook、TikTok)、支付系统和大型电商平台。这就是为什么绕过SSL Pinning对营销人员、套利者和竞争分析专家如此重要。

如果应用程序中有SSL Pinning,为什么代理不起作用

当您在手机上设置代理(例如,通过Wi-Fi设置)时,所有HTTP和HTTPS流量都通过代理服务器。对于HTTP,这没有问题——流量本身就是明文的。但对于HTTPS,代理工具必须“伪装”成服务器,插入自己的证书。

这就是冲突出现的地方。普通应用程序会接受此证书,如果您已将代理工具的根证书安装到设备的系统存储中。但带有SSL Pinning的应用程序会忽略系统存储——它们只检查自己的“嵌入”证书。

这在实践中是怎样的:

您连接Charles Proxy,在iPhone上安装其根证书,启动市场应用程序——然后看到错误或空白屏幕。在Charles的日志中——空白或SSL错误的记录。这是SSL Pinning在行动中的经典场景。

重要的是要理解:问题不在于代理服务器(驻留、移动或数据中心)。代理在这里充当流量路由的中间节点。问题在于应用程序本身,它拒绝接受被替换的证书。因此,解决方案需要在应用程序或设备级别寻找,而不是在代理服务器级别。

SSL Pinning有几种类型,它们在绕过的难度上有所不同:

Pinning类型 检查内容 绕过难度
证书Pinning 服务器的完整证书 中等
公钥Pinning 证书中的公钥
哈希Pinning 证书或密钥的哈希值
网络安全配置 Android的配置文件(XML) 低–中等

流量拦截工具:Charles、mitmproxy、Burp Suite

在绕过SSL Pinning之前,需要选择一个流量拦截工具。它们都基于一个原理:建立一个本地代理服务器,流量通过该服务器。区别在于便利性、功能和价格。

Charles Proxy

在没有深厚技术背景的营销人员和测试人员中最受欢迎的工具。具有图形用户界面,适用于Windows和macOS。可以方便地查看所有请求和响应,按域过滤,实时编辑请求。收费,但有试用期。非常适合分析市场API和广告SDK。

mitmproxy

一款免费的开源工具。通过命令行工作,但有Web界面(mitmweb)。非常灵活:支持脚本以自动修改流量。非常适合希望自动化分析或将拦截集成到测试管道中的人。设置上比Charles稍微复杂。

Burp Suite

一款专业的安全测试工具。具有免费的Community版本,功能基本。特别适合详细分析请求、处理cookies和会话。在分析竞争对手的API和研究广告集成时被广泛使用。界面比Charles复杂,但功能更强大。

工具 界面 价格 适合谁
Charles Proxy GUI(方便) 付费(约$50) 营销人员,分析师
mitmproxy CLI + Web UI 免费 技术专家
Burp Suite GUI(复杂) 免费/专业版 安全测试人员

对于大多数营销人员或套利者的任务——分析广告请求、研究市场API、监控应用流量——Charles Proxy将是最佳选择。如果需要自动化或无GUI工作——则选择mitmproxy。

绕过SSL Pinning的方法:从简单到高级

绕过SSL Pinning有几种方法。它们在复杂性、对设备的要求和可靠性上有所不同。我们将逐一讨论——从最简单到最强大。

方法1:将证书安装到系统存储中(仅限Android)

最简单的方法——但仅适用于使用系统证书存储的应用程序。在Android 7.0之前,用户证书与系统证书同等被接受。从Android 7.0开始,应用程序默认忽略用户CA。如果应用程序在network_security_config.xml中明确允许用户证书——此方法将有效。对于大多数现代应用程序带有SSL Pinning——无效。

方法2:Frida——动态补丁应用程序

Frida是一个用于动态插桩应用程序的工具。它允许“实时”拦截应用程序内部的函数调用并替换其行为。为了绕过SSL Pinning,存在现成的脚本,可以在不修改APK的情况下禁用证书检查。需要在Android上获取root权限或在iOS上越狱。这是最可靠和通用的方法。

方法3:补丁APK(Android)

使用apktool反编译APK文件,删除或修改SSL Pinning代码,重新构建并签名应用程序。不需要root,但需要处理smali代码的技术技能。对于通过网络安全配置简单实现Pinning的应用程序效果良好。对于具有本机代码(C/C++)的应用程序——复杂得多。

方法4:Objection——Frida的初学者封装

Objection是基于Frida的工具,具有更简单的命令行界面。包含内置命令,通过一条命令绕过SSL Pinning:android sslpinning disable。适合那些不想手动编写Frida脚本的人。需要root或越狱。

方法5:使用带有root的模拟器

可以使用Android模拟器(例如Genymotion或Android Studio中的标准AVD)替代物理设备,并启用root访问。这允许安装系统证书并运行Frida,而不会有“砖化”真实手机的风险。对于在工作环境中定期测试来说,这是一个方便的选择。

Android上逐步绕过SSL Pinning

我们将讨论最实用的场景:具有root权限的Android设备或模拟器,Objection + Frida工具,代理工具Charles Proxy或mitmproxy。

需要准备:

  • 具有root权限的Android设备或Genymotion模拟器
  • 安装了Python 3的计算机
  • Android的Frida-server(从GitHub下载)
  • Objection(通过pip安装)
  • 计算机上的Charles Proxy或mitmproxy
  • ADB(Android调试桥)

步骤1:在计算机上设置代理工具

启动Charles Proxy或mitmproxy。默认情况下,它们监听8888端口(Charles)或8080端口(mitmproxy)。记下您在本地网络中计算机的IP地址——这将在设备上设置代理时需要。

步骤2:在Android设备上设置代理

进入Wi-Fi设置→选择您的网络→点击“更改”→“高级选项”→代理:手动。输入计算机的IP和工具的端口。现在,设备的所有流量都通过您的代理。

步骤3:安装代理工具的证书

在设备上打开浏览器,访问chls.pro/ssl(对于Charles)或mitm.it(对于mitmproxy)。下载并安装证书。在具有root权限的Android上,额外将证书移动到系统存储中——这对于某些应用程序是必要的。

步骤4:在设备上启动Frida-server

从GitHub下载所需版本的frida-server(版本应与计算机上的Frida版本匹配)。通过ADB将文件上传到设备:

adb push frida-server /data/local/tmp/
adb shell "chmod 755 /data/local/tmp/frida-server"
adb shell "su -c /data/local/tmp/frida-server &"

步骤5:通过Objection连接并禁用SSL Pinning

在计算机上通过pip安装Objection并启动它,指定应用程序的包名:

pip install objection
objection -g com.example.app explore

连接后,在Objection控制台中执行禁用SSL Pinning的命令:

android sslpinning disable

之后,打开应用程序并开始与之交互。流量将以解密形式出现在Charles或mitmproxy中。

步骤6:对于使用网络安全配置的应用程序

如果应用程序使用network_security_config.xml,可以通过apktool反编译APK,找到该文件并添加对用户证书的权限,然后重新构建并重新签名APK。这在不需要root的情况下有效,但需要禁用应用程序的签名检查。

iOS上逐步绕过SSL Pinning

在iOS上,情况更复杂:大多数方法需要越狱。没有越狱,功能受到限制。我们将讨论两种选择。

选项A:带越狱(iOS 14-16,checkra1n / palera1n)

步骤1:设置代理

在iPhone上,进入设置→Wi-Fi→您的网络→设置代理→手动。输入计算机的IP和Charles/mitmproxy的端口。

步骤2:安装证书

打开Safari并访问chls.pro/ssl。通过设置→通用→VPN和设备管理安装配置文件。然后在设置→通用→信任证书中激活它。

步骤3:通过Cydia/Sileo安装SSL Kill Switch 2

SSL Kill Switch 2是一个针对越狱iOS的工具,可以全局禁用所有应用程序的SSL Pinning。在Cydia或Sileo中找到它,安装后重启设备。之后,大多数应用程序将停止检查证书,流量将在Charles中可见。

步骤4:替代方案——Frida + Objection在iOS上

类似于Android:通过Cydia安装frida-server,通过Objection在计算机上连接并执行ios sslpinning disable。此方法更灵活,适用于SSL Kill Switch 2未覆盖的应用程序。

选项B:无越狱(功能有限)

在没有越狱的情况下,绕过iOS上的SSL Pinning要复杂得多。一个选项是使用Proxyman,它具有无越狱的SSL代理功能。Proxyman在设备上安装特殊配置文件,并使用VPN接口拦截流量。适用于许多应用程序,但并非所有具有严格Pinning的应用程序。

另一个选项是在Xcode中使用iOS模拟器。模拟器在操作系统级别没有SSL Pinning,许多应用程序可以在其中运行(如果它们支持模拟器)。但这仅适用于测试,而不适用于分析生产应用程序。

选择哪种类型的代理来测试移动应用程序

绕过SSL Pinning后,应用程序的流量通过您的代理工具(Charles、mitmproxy)。但对于某些任务,您还需要将流量通过外部代理服务器——例如,使应用程序“看到”另一个地区或另一个IP地址。在这里,正确选择代理类型非常重要。

住宅代理

住宅代理使用真实家庭用户的IP地址。移动应用程序,尤其是广告SDK和市场,对这些IP的信任程度远高于数据中心的地址。如果您分析应用程序在不同地区的行为——住宅代理将提供最“干净”的画面,接近真实用户。

移动代理

移动代理通过真实的移动网络(3G/4G/5G)工作。这在测试移动应用程序时尤其重要:来自移动网络的IP在Facebook Ads SDK、TikTok和其他广告平台中具有最高的信任级别。如果您的目标是分析应用程序的广告请求或测试SDK在移动环境中的行为,移动代理是最佳选择。

数据中心代理

数据中心代理适用于速度重要而非“自然”IP的任务:例如,大规模解析开放API或性能测试。对于分析广告SDK和受保护的应用程序,它们的优先级较低,因为容易被反欺诈系统识别。

代理类型 应用程序信任度 速度 最佳场景
住宅 中等 区域分析,市场
移动 最高 中等 广告SDK,Facebook,TikTok
数据中心 解析开放API,负载测试

实际场景:套利、电商、营销

我们将讨论营销人员和套利者绕过SSL Pinning的具体任务。

场景1:分析Facebook和TikTok的广告SDK

从事Facebook Ads和TikTok Ads的套利者通常希望了解SDK向服务器传递了哪些数据:记录了哪些事件,如何形成归因请求,哪些参数影响广告活动的优化。没有绕过SSL Pinning,这是不可能的——这两个SDK都使用证书Pinning。

通过Frida/Objection绕过后,可以在Charles中看到所有SDK事件:安装、购买、注册——并确保跟踪设置正确。这在设置CAPI(Conversions API)和检查事件去重时尤其重要。

场景2:通过应用程序监控Wildberries和Ozon的价格

Wildberries和Ozon应用程序使用SSL Pinning来保护其API。希望通过移动应用程序(而不是Web版本)监控竞争对手价格的卖家会遇到这种保护。绕过SSL Pinning后,可以研究API请求的结构,了解哪些端点用于获取价格、库存和商品评级数据。

重要的是:获取的数据只能用于个人分析。通过重放API请求进行自动化解析违反了平台的使用条款。

场景3:测试来自不同地区的广告创意

测试Facebook Ads和TikTok Ads的营销人员希望看到应用程序在通过特定国家的IP连接时的表现。绕过SSL Pinning + 来自所需地区的住宅代理的组合可以看到该地区用户显示的内容和价格。

场景4:QA测试自己的应用程序

如果您正在开发自己的移动应用程序或与开发团队合作,流量拦截与绕过SSL Pinning是QA的标准实践。这可以检查请求的正确性,发现数据泄露,验证分析和广告SDK在发布前的实际工作情况。

场景5:分析移动游戏和应用程序领域的竞争对手

移动游戏的营销人员使用流量拦截来分析竞争对手的货币化:展示了哪些优惠,内购系统如何运作,使用了哪些广告网络。这有助于制定更有效的用户获取(UA)和货币化策略。

检查清单:测试前检查设置

在开始拦截流量之前,请确保一切设置正确。以下是完整的检查清单:

✅ 设置检查清单

  • 代理工具(Charles/mitmproxy)在计算机上运行并监听所需端口
  • 计算机和设备在同一Wi-Fi网络中
  • 在设备的Wi-Fi设置中指定了正确的计算机IP和代理端口
  • 代理工具的根证书已安装在设备上
  • 在Android上:证书已移至系统存储(如果有root权限)
  • 在iOS上:证书在“信任证书”部分已激活
  • Frida-server在设备上运行(如果使用Frida/Objection)
  • 计算机上的Frida版本与设备上的frida-server版本匹配
  • Objection成功连接到应用程序进程
  • 命令android sslpinning disable无错误执行
  • 在Charles/mitmproxy中出现应用程序工作时的记录
  • HTTPS请求被解密(未显示SSL错误)

常见问题及解决方案

问题 原因 解决方案
流量未出现在Charles中 代理的IP/端口错误 检查计算机的IP和端口
Charles中的SSL错误 证书未安装或未激活 重新安装并激活证书
Frida无法连接 frida/frida-server版本不匹配 同步版本
Objection未禁用Pinning 带有Pinning的本机代码(C/C++) 使用自定义Frida脚本
应用程序在绕过后崩溃 应用程序检查完整性 通过Objection禁用root检测

结论

SSL Pinning是一种严密的保护,但并非不可逾越。对于大多数营销人员或套利者的实际任务,Android模拟器与root + Frida/Objection + Charles Proxy的组合就足够了。在iOS上——在越狱的情况下使用SSL Kill Switch 2,或在没有越狱的情况下使用Proxyman。关键是正确设置链条:计算机上的代理工具→流量通过它→设备上的Pinning绕过。

请记住,绕过第三方应用程序中的SSL Pinning仅适用于个人分析和研究。自动化解析和重放API请求违反了大多数平台的使用条款。

如果您的任务是分析不同地区的移动应用程序流量或测试特定国家的广告SDK行为,您不仅需要绕过SSL Pinning,还需要高质量的代理服务器。对于与广告平台(Facebook Ads、TikTok Ads)和市场的合作,建议使用移动代理——它们在反欺诈系统中具有最高的信任级别,并能够正确模拟真实的移动环境。

```