在现代移动优先的世界中,移动应用程序的流行度呈爆炸式增长,并取代了传统网站的许多服务。目前主要应用商店中有超过 5 万个应用程序可供使用。智能手机用户平均安装了 80 多个应用程序。与移动网络相比,移动应用程序占据了应用程序在线时间的 90%。
这是什么意思? 在日益数字化的世界中,移动应用程序正在成为最有价值、最丰富的数据来源之一。 可以从移动应用程序流量中提取位置数据、使用统计数据、个人资料、交易等。
这为企业、研究人员和开发人员提供了巨大的机会。但收集这些数据需要拦截应用程序及其后端 API 之间的通信。这是因为移动应用程序使用加密的 HTTPS 连接来安全地传输数据。
简单地嗅探网络流量不会泄露内容。您需要一种解密流量的方法。
输入中间人 (MITM) 代理服务器。
在这本 4,000 字的综合指南中,您将学到:
- MITM 代理到底是什么及其工作原理
- 分步如何设置您自己的 MITM 代理以进行移动应用流量分析
- 如何使用代理来观察和逆向工程移动应用程序 API
- 从移动应用 API 中抓取有价值数据的工具和技术
- MITM 代理负责任数据收集的最佳实践
如果您想亲身体验从 Tinder、Airbnb、Yelp 等应用程序中提取数据,那么您来对地方了。让我们开始吧!
什么是中间人 (MITM) 代理?
要了解 MITM 代理如何抓取移动应用程序数据,您首先需要了解 HTTPS 加密的作用。
HTTPS 使用 SSL/TLS 证书来加密客户端(例如移动应用程序)和服务器(例如 API 后端)之间的通信。这可以防止任何监视网络的人查看或篡改流量。
但是,如果您可以通过将自己置于客户端和目标服务器之间的中间位置来拦截该流量,该怎么办?
这正是 MITM 代理的作用。代理充当所有流量经过的中介:
客户端 <----> MITM 代理 <----> 目标服务器
代理与客户端和服务器建立单独的 SSL 连接以解密其流量。然后,它可以检查、分析甚至修改明文请求,然后重新加密并发送它们。
通过将代理的根证书安装为受信任的颁发机构,它可以有效地模拟任何域。这允许无缝拦截,而不会触发浏览器安全警告。
一些流行的 MITM 代理包括:
代理 | 应用平台 | |
---|---|---|
中间件 | Mac,Windows,Linux | 强大的基于控制台的工具 |
查尔斯代理 | Mac,Windows,Linux | GUI、设备配置支持 |
提琴手 | Windows | 可以调试来自 Windows 应用程序的流量 |
在本指南中,我们将演示如何使用 中间件 因为它是免费、开源且设置速度快的。
现在让我们看看如何配置移动设备以通过 MITM 代理路由其流量。
第 1 步:在计算机上安装 mitmproxy
第一步是在台式机或笔记本电脑上安装并启动 mitmproxy 代理服务器。它将拦截来自配置为通过它路由的设备的请求。
在 macOS 上安装
如果您使用的是 Mac,安装 mitmproxy 最简单的方法是通过 Homebrew:
$ brew install mitmproxy
在 Linux 上安装
在 Linux 上,使用发行版的包管理器,例如:
$ sudo apt install mitmproxy # Debian/Ubuntu
$ sudo dnf install mitmproxy # Fedora
在 Windows 上安装
Windows 用户可以从以下位置下载官方二进制版本 mitmproxy.org。请务必选择最新的 mitmproxy 版本,而不是 mitmdump 实用程序。
启动代理
安装后,在默认端口 8080 上启动 mitmproxy:
$ mitmproxy
您应该会看到拦截的请求出现在 mitmproxy 控制台中:
当您配置移动设备以使用代理时,请使其在后台运行。
步骤 2:配置移动设备通过 mitmproxy 进行路由
现在我们需要配置移动设备通过 mitmproxy 代理路由其流量以进行拦截。
以下是常见移动操作系统的步骤:
在 iPhone/iOS 上
将您的 iPhone 连接到与运行 mitmproxy 的计算机相同的 Wi-Fi 网络。
前往“设置”>“Wi-Fi”并选择您当前的网络。
向下滚动并点按 配置代理.
选择 用户手册 设置您自己的代理详细信息:
服务器:您的计算机在网络上的IP地址(例如192.168.1.10)
端口:8080的
这将通过您的计算机和 mitmproxy 路由所有设备流量!
在Android上
将您的 Android 设备连接到与代理相同的 Wi-Fi 网络。
转至设置 > Wi-Fi > 高级选项 > 代理并选择 用户手册.
在主机名字段中输入计算机的 IP 地址,并在端口中输入 8080。
点击保存以应用代理配置。
在 Windows Phone 上
从开始屏幕向左滑动至应用程序列表,然后点击 个人设置.
敲打 无线网络 并长按您连接的网络。选择 编辑.
敲打 显示高级选项 然后 设置代理 至手动。
输入计算机的 IP 地址和端口 8080。
敲打 保存 通过代理连接。
就是这样!您的移动设备现在应该通过 mitmproxy 路由所有流量以进行拦截。
步骤 3:在移动设备上安装 mitmproxy 证书
此时,您将在移动设备的 mitmproxy 控制台中看到流量。但是,大多数应用程序都使用 HTTPS,因此您将无法查看内容。
要解密 HTTPS 流量,您需要在移动设备上安装 mitmproxy 证书作为受信任的根证书颁发机构。
Mitmproxy 提供了一个方便的站点: http://mitm.it 这将为您的特定设备平台生成证书。
只要到 http://mitm.it 在移动设备的浏览器上,然后单击适用于您的操作系统的链接:
然后在您的设备上安装下载的证书:
在iOS上
转至设置 > 常规 > 关于 > 证书信任设置
启用 中间件 证书
在Android上
拯救
mitmproxy-ca-cert.pem
文件位于设备存储上的某处转至设置 > 安全 > 从存储安装
点击
mitmproxy-ca-cert.pem
文件
在 Windows Phone 上
进入系统 > 加密 > 导入证书
选择下载的
mitmproxy-ca-cert.crt
您可能需要将 mitmproxy 证书设置为受 VPN 或应用程序信任。现在 mitmproxy 甚至可以拦截来自设备的 HTTPS 加密流量。
仅在需要调试流量时启用证书,并在完成后禁用!不必要时不要暴露其他应用程序数据。
好的,是时候开始有趣的部分了……让我们看看如何观察流量以进行逆向工程和抓取移动应用程序 API!
第 4 步:观察并逆向移动应用 API
在配置为使用代理的设备上打开您要研究的移动应用程序。例如,我将使用 Swiggy 食品配送应用程序。
在计算机上的 mitmproxy 控制台中,您应该会看到来自移动设备 IP 地址的请求。
按您要分析的 API 的域过滤视图。对于 Swiggy 来说,这是 prod-api.swiggy.com
:
当您与移动应用程序交互时,请查找 API 请求中的模式。您可以展开请求以查看完整详细信息:
测试不同的应用程序流程可以揭示后端 API 上存在哪些端点以及它们返回哪些数据。对于抓取,我们感兴趣的是 的GET 返回 JSON 数据的请求。
通过观察 Swiggy 的流量,我们可以看到:
/restaurants/list/v5
返回某个位置的餐厅列表/menu/v4
获取特定餐厅的菜单/geocode/v1
将地址转换为纬度/经度坐标
等等。这使我们能够理解并绘制 API 端点。
现在我们可以复制 API 请求来提取数据。例如,调用 /restaurants/list/v5
与 lat
和 lng
参数返回餐厅的 JSON 列表:
import requests
api_url = ‘https://prod-api.swiggy.com/restaurants/list/v5‘
params = {
‘lat‘: 12.972442,
‘lng‘: 77.580643
}
response = requests.get(api_url, params=params)
data = response.json()
for restaurant in data:
print(restaurant[‘name‘], restaurant[‘area‘])
这会打印给定位置附近 Swiggy 餐厅的名称和区域。通过代理,我们可以了解应用程序的功能并对抓取 API 进行逆向工程。
移动应用 API 的抓取策略
检查应用程序的 API 流量以了解端点和参数后,您就可以开始以编程方式收集数据。
以下是一些最佳做法:
使用代理 – 轮换不同的住宅IP以避免速率限制造成的阻塞。
随机化输入 – 改变地理坐标、用户 ID 等,使其显得更加人性化。
限制请求 – 在请求之间添加延迟以限制数量。
缓存数据 – 存储响应以避免重复请求。
处理错误 – 重试失败的请求并妥善处理 HTTP 错误。
对数据进行分页 – 按照响应中的分页链接提取所有数据。
需要时使用 POST – 某些操作(例如下订单)需要 POST 请求。
快速解析 – 仅提取您需要的数据,而不是解析所有内容。
清理元数据 – 删除可以识别记录的唯一 ID、时间戳等。
保持最新 – 应用程序更新后检查 API 更改。
凭借一些创造力,您可以构建抓取工具来从移动应用程序 API 中提取各种有价值的数据。请务必仔细遵守服务条款并负责任地使用数据!
负责任的移动 API 抓取
与任何形式的网络抓取一样,从移动 API 收集数据需要考虑一些道德因素:
不要让服务器超载 – 限制请求量以尽量减少影响。
限制使用 – 仅收集您可以证明需要的数据。
尊重服务条款 – 避免违反服务条款或保密协议。
保护数据 – 安全地存储数据并最大限度地缩短保留期限。
去识别化数据 – 删除您的目的不需要的个人信息。
检查法律 – 某些地点规定数据收集的类型。
明智地使用 – 数据应该提供价值,而不仅仅是因为可以而收集。
透明度和道德至关重要。伟大的数据伴随着巨大的责任!
结论
我希望本指南能让您全面了解如何使用中间人代理拦截移动应用程序数据。关键要点:
MITM 代理允许您通过安装代理证书来拦截来自移动应用程序的 HTTPS 流量。
mitmproxy 等工具可以轻松检查此流量,以了解应用程序如何与 API 后端通信。
对 API 端点进行逆向工程可以复制请求以抓取移动应用程序数据。
代理、限制和其他技术可用于有效地大规模收集移动应用程序数据。
确保您以合乎道德和合法的方式抓取移动 API。
移动应用程序提供了大量等待被挖掘的数据。现在您已经知道如何使用 MITM 代理来访问它,可能性是无限的!
您将从哪些很酷的应用程序开始抓取数据?如果您还有其他移动代理抓取问题,请告诉我!