
在某些情况下,开发或测试移动应用程序时,有必要查看应用程序的网络流量。 仍通过在IDE控制台中显示来查看移动应用流量吗? 有更有效的工具可以完成此任务,例如代理。 在本文中,我们将分析最流行的HTTP(S)代理,学习如何在iOS开发中使用它们,并根据各种标准进行比较。
进一步,我们将讨论在iOS开发中使用代理的情况,但是许多事情在Android开发中也适用。
注意下切了很多照片。
分析移动应用程序网络流量的工具可以分为:
- 不需要集成到被测应用程序的源代码中-代理:
- 需要集成到被测应用程序的源代码中。 这些主要包括调试框架:
这是本文的第一部分,我们将在其中考虑代理的使用并根据各种标准进行比较。 在本文的第二部分,我们将彻底调试框架。
三甲氧基

Mitmproxy是一个免费的开放源代码(在github上〜12,000星)-HTTP(S)-proxy,由Mitmproxy本身,用于代理流量的控制台实用程序,mitmdump(一个提供与tcpdump类似的功能,但用于HTTP(S)的附加控制台实用程序)组成流量以及mitmweb(Mitmproxy的Web界面)。
您可以使用Homebrew安装Mitmproxy:
brew install mitmproxy
或从官方网站的发布页面下载所需版本。
成功安装后,要分析来自模拟器或设备的HTTP通信,您需要在网络设置中指定代理。
对于模拟器,您需要在Mac OS网络设置(系统偏好设置->网络->高级->代理)中激活HTTP和HTTPS代理:

一个小型bash脚本,用于在Mac上的Wi-Fi网络设置中快速激活/停用代理。 (一旦我们在设置中注册了IP和代理端口,然后从控制台使用proxy on
或proxy off
命令)。
要拦截来自真实设备的流量,您需要在iOS网络的设置中指定代理,同时将运行Mitmproxy的计算机的IP地址设置为代理IP地址和端口8080。(可以在“设置”>“网络”中查看计算机的IP地址)

在此阶段,我们已经可以拦截HTTP流量,但是要拦截HTTPS流量,您需要在模拟器/设备上安装Mitmproxy证书。
为此,请在模拟器上执行以下操作(对于实际设备,步骤相似):
- 如上所述,请确保Mitmproxy正在运行,并且代理已被激活并在网络设置中注册(对于模拟器-macOS设置,对于设备-iOS设置)。 现在转到浏览器mitm.it ,然后单击Apple图标以下载Mitmproxy证书。 将显示一条警报,提示您该网站正在尝试打开iOS设置:单击允许。


- 最后一点-对于iOS版本10.3和更高版本,您必须启用对Mitmproxy根证书的完全访问权限。 为此,请转到设置>常规>关于>证书信任设置,然后激活Mitmproxy证书的完全访问权限。

现在我们可以分析来自模拟器的HTTPS流量。 还有一点需要澄清:证书是为特定的模拟器安装的,也就是说,如果我们仅为iPhone X模拟器安装了证书,那么在iPhone 8模拟器上,我们需要这样做,以便代理拦截HTTPS通信。 要拦截来自真实设备的HTTPS流量,所有步骤都是相似的,主要是它与使用Mitmproxy的计算机连接到同一局域网。
之后,您可以从控制台运行mitmproxy 感觉像个黑客 或mitmweb网络客户端。
控制台客户端通过Tube接口与我们见面(对于GUI爱好者来说,甚至还提供了鼠标支持),其中显示了所有被拦截的请求。

您可以查看每个请求的详细信息(请求参数,标头,响应等)

Mitmproxy具有功能强大的查询过滤系统,并支持正则表达式。 您可以按代码,请求/响应正文,标头,域等过滤请求。 通过单击调用有关可用快捷方式和过滤表达式的帮助?
。 例如,要清除当前会话的查询列表,只需按z
,然后按其中有单词“ apple”的URL过滤查询列表,您需要按f
并通过~u apple
编写过滤表达式,该表达式带有一个正则表达式。

Vim粉丝也会对hjkl的支持感到满意。 我们几乎忘记了一个非常重要的快捷键q
在屏幕之间移动时,它就像一个“后退”按钮,在单击该快捷方式的主屏幕上带有查询列表,Mitmproxy将提供退出该程序的功能。
尽管具有控制台界面,但由于方便的快捷方式和简单的直观控件,使用Mitmproxy仍然是一种乐趣。 以下是带有主要快捷方式的小表格。
捷径 | 内容描述 |
---|
? | 帮忙 |
ž | 清除当前会话列表 |
˚F | 会话过滤 |
q | 返回(在主屏幕上退出) |
d | 从会话列表中删除请求 |
[R | 重复要求 |
Ë | 将请求保存到文件 |
g ^ | 热门会议清单 |
g ^ | 在会话列表末尾 |
如果您仍然是控制台的热心反对者,并且仅识别GUI应用程序,那么mitmweb会急于为我们提供帮助,我们暂时也将从控制台启动它,稍后我们可以为桌面创建快捷方式。

该Web客户端仍处于beta测试中,仅包含基本的mitmproxy功能(足以完成95%的任务),每个新发行版都逐步为其添加了新功能,尽管如此,它现在仍可以使用,并且非常方便。 控制台版本的某些快捷方式在这里也起作用,例如,只需按z
即可清除当前会话的请求列表。 您也可以通过“搜索”字段过滤掉被拦截的请求,就像我们在应用~u apple
过滤器时在控制台应用程序中所做的那样。

Mitmproxy声称支持Websocket标准,但是不幸的是,尚未在UI中实现Websocket框架的显示,并且据开发人员称,Websocket功能仅可用于mitmdump实用程序。
查尔斯

查尔斯也许是MacOS上最受欢迎的HTTP(S)代理,它的唯一缺点是它是有偿的,在撰写本文时,许可证的费用为50美元。 但是,有一个试用版-它可以工作30分钟,然后需要重新启动该应用程序,并且整个查询历史记录都将丢失。 还有五秒钟的启动延迟。
安装并首次启动后,Charles会要求您授予访问权限以自动配置系统代理,选择“授予特权”或每次手动更改系统代理设置。 因此,Charles本人将在运行时更改并激活系统代理设置-这在模拟器上调试时非常方便,但是在实际设备上,您必须手动设置网络的代理服务器设置,因为代理服务器指定了运行计算机的IP地址查尔斯(Charles),港口-8888。
在此阶段,我们只能查看HTTP流量,以分析来自模拟器或真实设备的HTTPS流量,我们需要在其上安装Charles证书,该过程类似于安装Mitmproxy证书。 确保在iOS网络设置(对于真实设备)或macOS网络设置(对于模拟器)中运行并激活了代理。 然后,我们将在chls.pro/ssl的浏览器中转到模拟器/设备,将显示一条警报 , 提示您该网站正在尝试打开iOS设置:选择允许。 接下来,选择“安装”以安装证书。 在安装适用于iOS 10.3和更高版本的证书后,必须启用对Charles根证书的完全访问权限。 为此,请转到设置>常规>关于>证书信任设置,然后激活对Charles证书的完全访问权限。

最后,您需要在Charles中配置SSL代理,默认情况下,即使您已安装所有必需的证书,它也不会解密HTTPS流量。 要激活SSL代理,请转到“代理”>“ SSL代理设置”并激活SSL代理(如果已禁用),那么我们有两个选项-为所有域或仅为特定域启用SSL代理。 要为所有域启用SSL代理,您需要添加一个通配符位置:单击“添加”按钮,并在所有字段中指定*
,因此SSL设置应如下所示。

要仅对特定域启用SS1代理,您需要将它们添加到列表中,并确保禁用通配符位置。 在这种情况下,Charles仍然会拦截所有流量,但是对不在列表中的域的HTTPS请求将不会被解密。
使用Charles时,使用流量拦截过滤器非常方便,可以在“代理”>“记录设置”菜单中对其进行配置:您可以指定协议,URL,端口。

现在,我们可以查看HTTPS流量。

Charles还支持Websocket协议,并以iMessage样式显示消息,看起来很方便。

值得一提的是iOS的首个此类代理Charles-移动版本的Charles,在撰写本文时,其在App Store中的价格为9美元。 该应用程序包含桌面版本的基本功能:代理HTTP(S)通信,查看请求/响应的内容以及方便的Wi-Fi网络代理设置的自动设置。


Burp Suite是渗透测试人员和黑客的瑞士刀,其中包含不雅的工具和功能。 Burp Suite中的模块之一是代理,我们将使用它来分析HTTP(S)流量。 该应用程序有两个版本:专业版和社区版。 社区版本是免费的,它没有漏洞扫描程序,并且每单位时间的请求数量受到限制,但是尽管如此,该应用程序的免费版本还是一个完善的测试工具。
启动应用程序后,您需要通过转到代理>选项来添加和激活代理。

然后,您需要确保Intercept请求拦截器已关闭,否则它将拦截请求并保留它们,直到您告诉他该请求的处理方式-取消或转发给服务器。 因此,将其关闭,现在我们不需要它。

接下来,您需要在模拟器/设备上安装Burp Suite证书,安装Mitmproxy和Charles证书后,我们已经非常熟悉此过程。 我们启动Burp Suite,并且不要忘记在模拟器的MacOS网络设置中或在真实设备的iOS中激活代理(有关方法,请参见Mitmproxy部分),指定运行Burp Suite作为代理服务器的计算机的IP地址,作为端口8080。然后转到模拟器上的浏览器,然后输入地址http:// burp 。 接下来,单击“ CA证书”站点上的按钮并下载证书。

然后安装证书。 在安装适用于iOS 10.3和更高版本的证书之后,必须启用对Burp Suite根证书的完全访问权限。 为此,请转到设置>常规>关于>证书信任设置,然后激活Burp Suite证书的完全访问权限。

通过转到代理-> HTTP历史记录选项卡,您可以查看来自移动应用程序的HTTP(S)流量。 值得注意的是,这里的缺点是请求/响应的主体中缺少JSON格式。

JSON格式问题可以通过安装JSON Beautifier插件来解决。 要安装,请转到Extender> BApp Store选项卡,在插件列表中找到JSON Beautifier,然后单击安装。

现在,还有一个带有美丽JSON的JSON Beautifier选项卡。

Burp Suite支持Websocket协议。 Websocket消息可在特殊选项卡“代理”>“ WebSockets历史记录”中找到。

OWASP ZAP

Owasp ZAP是举世闻名的网络安全社区Owasp的创意,此外,代理是开源的。 Owasp ZAP通常与Burp Suite相比,但后者的流行度较低。 Owasp ZAP是完全免费的,与Burp Suite相比,没有PRO版本。
启动应用程序后,您需要检查代理设置“首选项”>“本地代理”,默认设置应如下所示。

然后转到“首选项”>“动态SSL证书”以导出SSL证书。 单击“保存”按钮,然后将证书保存到桌面。

接下来,只需将证书文件拖到模拟器中,就会打开一个窗口,供您安装证书,我们同意并安装。 在安装适用于iOS 10.3和更高版本的证书之后,必须启用对OWASP ZAP根证书的完全访问权限。 为此,请转到设置>常规>关于>证书信任设置,然后激活OWASP ZAP证书的完全访问权限。

现在,我们可以查看HTTPS流量。 不幸的是,JSON在这里没有精美的格式,到目前为止,我们还无法解决这种情况,在极端情况下,您可以使用第三方JSON格式器,例如this 。

OWASP ZAP支持Websocket协议。 Websocket消息可以在特殊的WebSockets选项卡中找到,也很方便选择按域进行过滤的“通道”。

SSL固定
如果在您的应用程序中实现了SSL固定,那么您将看不到代理的应用程序流量,因为代理使用自己的SSL证书,在这种情况下,有4个选项:
- 使用代理调试网络请求时,暂时禁用SSL Pinning。
- 将代理证书/公钥添加到调试证书的已调试证书/密钥中。
- 将服务器证书用于代理,而不是由代理生成的证书。
- 除了使用外部代理之外,还可以使用调试框架(在本文开头指出框架的列表),该框架将直接在应用程序本身中拦截并显示请求和答案,但这需要集成到现有的应用程序源代码中,在下一篇文章中将详细介绍这些工具。
总结
让我们从查尔斯开始。 也许对于那些希望一切开箱即用并尽可能使用户友好的人来说是最好的代理,尽管Charles可能会在某些时候使用户感到惊讶,但代理功能非常广泛,它也具有本文中所描述的所有macOS的最漂亮和本机界面。代理。 如果您不介意花50美元购买这种乐器,那是您的选择。
让我们继续到Burp Suite。 根据某些功能乃至易用性,最强大的工具在某些情况下很容易给Charles带来麻烦,此外,还有一个用于以插件形式扩展功能的系统。 Burp Suite早已确立了自己在右手的可靠和准确工具的地位。 如果您缺乏当前代理的功能,那么我建议您注意该实例。
现在轮到Mitmproxy了-一个年轻且有前途的代理,正在积极获得普及,由开源社区开发。 我们查看过的最具争议的代理,但同时也同样有趣。 Mitmproxy凭借其便捷,简单和功能强大的控制台UI在竞争对手中脱颖而出。 也可以使用Mitmweb Web界面,但是现在它处于beta测试中,这就是为什么它很少见,但是却出现了bug,没有Mitmproxy高级功能的任何部分(正在逐步完成),并且在便利性方面也较其他本地竞争对手略逊一筹的原因。 尽管对Websocket协议的支持也令人失望,但UI中没有显示或者我们只是没有学习如何准备它,因为尽管其他代理没有这样的问题,但我们无法让Mitmproxy显示Websocket消息。
名单上的最后一个,但同样有趣的是Owasp ZAP。 这些优点中有一个可扩展的插件系统(主观上,其数量少于Burp Suite的插件系统),但是不幸的是,我们无法在请求/响应主体中配置漂亮的JSON显示,这在选择用于移动开发的代理时是一个非常关键的标准。 但是,Owasp ZAP拥有用于测试Websocket流量的高级系统,还有背后的Owasp社区开发人员的全名,因此我不反对使用它,并且考虑到罕见和复杂的情况。
以下是我们分析的代理的主观汇总表。
标准/代理 | 三甲氧基 | 查尔斯 | Burpsuite(CE) | 猫头鹰黄蜂 |
---|
JSON格式 | + | + | + | -- |
编辑和重复查询 | + | + | + | + |
Websocket支持 | -- | + | + | + |
免费软件 | + | -- | + | + |
我们将在这里结束,希望本文会有所帮助,如果您在测试和监视移动应用程序流量方面的经验与您分享,我们也将乐于评论。