有时,您可能需要测试您的移动应用程序并检查与其关联的所有网络请求。在网络上,此任务非常简单,只需按Ctrl + Shift + I
打开开发人员工具即可。从那里,您可以导航到网络选项卡并检查与网页相关的所有 HTTP 请求,如下所示:
然而,在移动开发方面,过程并不那么简单。与网络不同,没有内置机制可以通过打开开发人员工具轻松检查 HTTP 请求。
在这篇博文中,我们将探索通过使用代理来拦截网络请求的迷人世界。我们将指导您逐步设置和配置代理服务器,该服务器将充当您的设备和网络之间的中介。
通过利用代理服务器的功能,我们能够拦截、检查和分析所有传入的网络请求。这为应用程序的调试、性能优化和安全分析开辟了无限可能。
为了更容易理解,我将这个过程分为五个步骤。这些都是:
要开始此过程,您需要安装 Android Studio。
成功安装后,启动 Android studio。在窗口顶部的工具栏上,找到并单击菜单Tools。之后Device Manager从下拉菜单创建所需要的设备并运行设备。
首先,使用该命令emulator -list-avds
显示系统上所有已安装模拟器的列表。此命令将为您提供可用设备的名称。从列表中确定您要运行的设备的名称。
一旦确定了要启动的设备,就可以使用该emulator -avd deviceName
命令。deviceName
将命令中的名称替换为所需设备的实际名称。该命令将使用指定的设备启动模拟器。
确保您已设置模拟器命令正常工作所需的所有环境变量非常重要。这将确保命令被识别并成功执行。
列出设备
设置 Android 模拟器后,您可以选择从APKMirror下载并安装所需应用程序的 APK 文件。APKMirror 是一个信誉良好的网站,您可以在其中找到各种 Android 应用程序的各种 APK 文件。下载 APK 文件后,您可以继续将其安装在 Android 模拟器上。您可以将下载的 APK 文件拖放到模拟器窗口中,也可以使用模拟器的文件传输机制导入 APK 文件。
在继续安装代理之前,必须确保 OpenSSL 和 Android 调试桥 (ADB) 已正确设置。以下是您应该遵循的步骤:
如果您尚未安装OpenSSL ,请先在您的系统上安装OpenSSL 。有关安装过程,请参阅特定于您的操作系统的文档。openssl version安装后,您可以通过在终端或命令提示符中运行命令来验证安装。如果安装正确,这将显示 OpenSSL 版本。
检查 OpenSSL 版本
接下来,确认您可以从终端或命令提示符访问 Android 调试桥 (ADB),这一点很重要。使用该命令adb version
检查 ADB 是否可访问且配置正确。如果命令返回ADB版本,则表示设置正确。
成功设置 OpenSSL 并确认对 ADB 的访问权限后,您可以继续安装代理。在本教程中,我们将下载并使用Proxyman
作为示例工具。但是,您可以将相同的原则应用于其他类似的工具,例如Charles Proxy
或mitmProxy
。
https://proxyman.io/
https://www.charlesproxy.com/
为了解密应用程序请求,Proxyman 生成自定义 SSL 证书。要获取此证书并将其配置为与 Android 操作系统一起使用,请执行以下步骤:
打开您的网络浏览器并访问以下链接。您可以通过此链接下载 Proxyman SSL 证书。下载证书后,找到保存证书的文件夹:
hashed_name=`openssl x509 -inform PEM -subject_hash_old -in proxyman-ca.pem | head -1` && cp proxyman-ca.pem $hashed_name.0This command uses OpenSSL to generate a hashed name for the certificate and then renames the file accordingly. By following these steps, you obtain the custom SSL certificate from Proxyman and rename it to the format expected by Android OS. This certificate is essential for decrypting app requests and enabling Proxyman to intercept and analyze the network traffic.
此命令使用 OpenSSL生成证书的哈希名称, 然后相应地重命名文件。通过执行以下步骤,您可以从Proxyman获取自定义SSL 证书,并将其重命名为Android 操作系统所需的格式。此证书对于解密应用程序请求并使Proxyman能够拦截和分析网络流量至关重要。
此命令在 Windows Power shell 上不起作用,因此我在 Git Bash 终端上运行了此命令:
命令执行成功,并.0在同一文件夹中生成了一个扩展名的文件:
我们在上一步中生成的文件.0是将要添加到 Android 模拟器中的证书。为此,我们首先打开终端并列出可用的 AVD:
emulator -list-avds
从可用的 AVD 中,我们将使用以下命令运行所需的 AVD:
emulator -avd <avd_name_here> -writable-system
请注意,我们使用-writable-system
标志来启动具有可写系统权限的 AVD,从而允许修改。之后我们需要打开另一个终端并运行以下命令:
adb root
此命令以 root 权限重新启动 ADB 守护进程。之后,我们运行此命令以禁用设备上的安全启动验证:
adb shell avbctl disable-verification
接下来我们使用以下命令重新启动设备:
adb reboot
设备重新启动后,运行以下命令以 root 身份重新启动 ADB:
adb root
通过执行以下命令将分区重新挂载为读写:
adb remount
如果 ADB 提示您重新启动设备,请adb reboot
再次运行,然后运行adb root
和adb remount
。现在我们准备.0
使用以下命令将重命名的 SSL 证书文件(我们之前生成的文件)推送到设备,并替换
为证书文件的实际路径:
adb push <path_to_certificate> /system/etc/security/cacerts
此命令将证书文件复制到设备上的相应目录。现在我们将通过运行以下命令为证书文件设置正确的权限:
adb shell chmod 664 /system/etc/security/cacerts/<name_of_pushed_certificate>
现在我们需要使用以下命令最后一次重新启动设备:
adb reboot
设备将重新启动,并将部署 SSL 证书。我们已成功将 SSL 证书部署到您的 Android 模拟器中。这将允许模拟器识别并信任该证书,从而使 Proxyman 能够拦截和分析来自设备的网络流量。
现在要验证 Android 设备上的证书,您可以导航到Android 设备设置Trusted Credentials
中的System
部分,您可以找到选项卡下列出的证书。这确认证书已成功安装并被您的 Android 设备识别:Encryption & CredentialsProxyman
LLCSystem
最后一步涉及我们配置 Android 模拟器以使用我们设置的 Proxyman 代理。为此,请在您的计算机上启动 Proxyman。在 Proxyman 中,导航至Certificate菜单。Install Certificate on Android从下拉列表中选择。Physical Devices从子菜单中选择。请注意,您无需担心该术语Physical Devices,因为我们不会遵循该特定指南。我们只需要此菜单中的一些基本细节:
在Android setup guide
中,确保复制 IP 地址和端口号。该过程的后续步骤将需要这些详细信息:
接下来是转到 Android 模拟器并单击菜单图标,如屏幕截图所示:
单击Settings侧栏中的选项。单击后,Settings,您可以继续导航到该Proxy选项卡:
在代理选项卡中,选中该Manual proxy configuration
选项。之后粘贴我们从 Proxyman
Android setup guide步骤复制的 IP 地址和端口并点击apply按钮:
我们已经成功完成了拦截来自 Android 设备的 HTTP 请求的所有必要设置步骤。现在,我们可以启动 Proxyman
并在 Android 模拟器上运行应用程序。当我们使用应用程序时,Proxyman
将捕获并显示与网络请求相关的所有相关详细信息和数据,为我们提供有关应用程序通信的宝贵见解和可见性。