使用Proxyman抓取Android的https请求
使用Proxyman抓取Android的https请求

有时,您可能需要测试您的移动应用程序并检查与其关联的所有网络请求。在网络上,此任务非常简单,只需按Ctrl + Shift + I打开开发人员工具即可。从那里,您可以导航到网络选项卡并检查与网页相关的所有 HTTP 请求,如下所示:

然而,在移动开发方面,过程并不那么简单。与网络不同,没有内置机制可以通过打开开发人员工具轻松检查 HTTP 请求。
在这篇博文中,我们将探索通过使用代理来拦截网络请求的迷人世界。我们将指导您逐步设置和配置代理服务器,该服务器将充当您的设备和网络之间的中介。
通过利用代理服务器的功能,我们能够拦截、检查和分析所有传入的网络请求。这为应用程序的调试、性能优化和安全分析开辟了无限可能。
为了更容易理解,我将这个过程分为五个步骤。这些都是:
- 设置 Android 模拟器
- 代理设置
- 准备证书
- 部署证书
- 在 Android 模拟器上设置代理
让我们详细探讨每个步骤。
1. 设置Android模拟器
要开始此过程,您需要安装 Android Studio。
成功安装后,启动 Android studio。在窗口顶部的工具栏上,找到并单击菜单Tools。之后Device Manager从下拉菜单创建所需要的设备并运行设备。

首先,使用该命令emulator -list-avds显示系统上所有已安装模拟器的列表。此命令将为您提供可用设备的名称。从列表中确定您要运行的设备的名称。
一旦确定了要启动的设备,就可以使用该emulator -avd deviceName命令。deviceName将命令中的名称替换为所需设备的实际名称。该命令将使用指定的设备启动模拟器。
确保您已设置模拟器命令正常工作所需的所有环境变量非常重要。这将确保命令被识别并成功执行。

列出设备
设置 Android 模拟器后,您可以选择从APKMirror下载并安装所需应用程序的 APK 文件。APKMirror 是一个信誉良好的网站,您可以在其中找到各种 Android 应用程序的各种 APK 文件。下载 APK 文件后,您可以继续将其安装在 Android 模拟器上。您可以将下载的 APK 文件拖放到模拟器窗口中,也可以使用模拟器的文件传输机制导入 APK 文件。
2. 代理设置
在继续安装代理之前,必须确保 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/
3. 准备证书
为了解密应用程序请求,Proxyman 生成自定义 SSL 证书。要获取此证书并将其配置为与 Android 操作系统一起使用,请执行以下步骤:
打开您的网络浏览器并访问以下链接。您可以通过此链接下载 Proxyman SSL 证书。下载证书后,找到保存证书的文件夹:
http://proxy.man/ssl
- 为了确保证书文件具有 Android 操作系统所需的正确格式,您需要对其进行重命名。打开命令提示符并导航到证书所在的文件夹。之后运行此命令:
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在同一文件夹中生成了一个扩展名的文件:

4. 部署证书
我们在上一步中生成的文件.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 证书文件(我们之前生成的文件)推送到设备,并替换<path_to_certificate>为证书文件的实际路径:
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

5. 在Android模拟器上设置代理
最后一步涉及我们配置 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 将捕获并显示与网络请求相关的所有相关详细信息和数据,为我们提供有关应用程序通信的宝贵见解和可见性。

相关文章:
使用Proxyman抓取Android的https请求
使用Proxyman抓取Android的https请求 有时,您可能需要测试您的移动应用程序并检查与其关联的所有网络请求。在网络上,此任务非常简单,只需按Ctrl Shift I打开开发人员工具即可。从那里,您可以导航到网络选项卡并检查与网页相关的…...
基础MySQL的语法练习
基础MySQL的语法练习 create table DEPT(DEPTNO int(2) not null,DNAME VARCHAR(14),LOC VARCHAR(13) );alter table DEPTadd constraint PK_DEPT primary key (DEPTNO);create table EMP (EMPNO int(4) primary key,ENAME VARCHAR(10),JOB VARCHAR(9),MGR …...
RAID和LVM配置指南:创建、扩容和管理RAID设备和逻辑卷的方法
文章目录 1. 简介1.1 什么是RAID和LVM1.2 RAID和LVM的作用和优势 2. RAID配置命令:mdadm2.1 安装mdadm2.2 创建RAID设备2.2.1 RAID 02.2.2 RAID 12.2.3 RAID 52.2.4 RAID 10 2.3 添加磁盘到RAID设备2.4 删除磁盘从RAID设备2.5 查看和管理RAID设备2.6 故障处理与恢复…...
MapStruct使用方法
一、用途 1.1 优势 与动态映射框架相比,MapStruct 具有以下优势: (1)通过使用普通方法getter、setter调用,而不是反射来快速执行,效率很高。 (2)编译时类型安全:只能映…...
【LeetCode】50. Pow(x, n)
1 问题 实现 pow(x, n) ,即计算 x 的整数 n 次幂函数(即, x n x^n xn )。 示例 1: 输入:x 2.00000, n 10 输出:1024.00000 示例 2: 输入:x 2.10000, n 3 输出&a…...
vue2技能树(2)-模板语法、vue的工具链、渐进式框架
目录 Vue2技能树Vue 2 简单的模板语法详解插值绑定属性指令v-if 和 v-elsev-forv-on 计算属性过滤器插槽 Vue 2 生态系统详解1. Vue Router2. Vuex3. Vue CLI4. Axios5. Vue Devtools6. Element UI、Vuetify、Quasar等UI框架7. Nuxt.js8. Vue Apollo、Vue Router、Vue Fire等插…...
【Git系列教程-目录大纲】
《Git系列教程-目录大纲》 完完全全从零开始深入学习Git,教程配图200张,其中包括包括Git基本命令、命令原理、Git底层命令、分支、分支的原理、Git代码冲突原理/解决、tag标签、Git存储状态、分支合并原理、典型合并、快进合并、同轴开发、非同轴开发、…...
【高等数学】导数与微分
文章目录 1、导数的概念1.1、引例1.1.1、变速直线运动瞬时速度1.1.2、曲线的切线 1.2、导数的定义1.3、证明常用导数1.4、导数的几何意义1.5、可导与连续的关系 2、函数的求导法则2.1、函数的和、差、积、商的求导法则2.2、反函数的求导法则2.3、复合函数的求导法则2.4、基本初…...
springboot之quartz动态可控定时任务
Quartz Quartz是一个开源的任务调度框架,可以用来实现定时任务的调度,如定时发送邮件、定时备份数据等。Quartz具有很高的可靠性和灵活性,支持集群部署和分布式调度,并且提供了丰富的API和插件,可以轻松实现复杂的调度…...
什么是CSS的外边距重叠?
区块的上下外边距有时会合并(折叠)为单个边距,其大小为两个边距中的最大值(或如果它们相等,则仅为其中一个),这种行为称为外边距折叠。注意:有设定浮动和绝对定位的元素不会发生外边…...
设计模式之抽象工厂模式
前言 工厂模式一般指的是简单工厂模式、工厂方法模式、抽象工厂模式,这是三种工厂模式的最后一篇,其他两种的文章链接如下: 设计模式之简单工厂模式-CSDN博客 设计模式之工厂方法模式-CSDN博客 建议三种模式放在一起对比学习,…...
Compose预处理组件大比拼:性能、应用场景和可视化对比总结
在机器学习的世界里,预处理组件就像是厨师的烹饪工具。选择合适的工具不仅可以让整个烹饪过程更加顺畅,还能确保最终的菜肴更加美味。 本文将深入探讨四种“烹饪工具”:TransformedTargetRegressor、make_column_transformer、make_column_selector和ColumnTransformer。通…...
【小米】Linux 实习生
下午不准备去图书馆自习来着,中午就狠狠地多睡了一个小时,三点起床靠在椅子上剥柚子,太爽了,这秋天的下午。“邮件:小米公司邀请你预约面试时间”.......... 我擦,投了一个月了,认真准备的时候…...
python一点通:coroutine (协程)是什么和重要知识点?
协程已经成为Python用于编写并发和异步代码的重要工具之一。在这篇博客文章中,我们将深入探讨协程是什么,它们的优点,以及它们与传统的线程和进程有何不同。 什么是协程? 协程是用于合作式多任务处理的子程序(或函数…...
QCC51XX-QCC30XX系列开发教程(实战篇) 之 12.1-空间音频相关模块的概述
查看全部教程开发请点击:全网最全-QCC51xx-QCC30xx(TWS)系列从入门到精通开发教程汇总(持续更新中) ==================================================================== 版权归作者所有,未经允许,请勿转载。 ==========================================...
Servlet的生命周期
2023.10.18 WEB容器创建的Servlet对象,这些Servlet对象都会被放到一个集合当中(HashMap),这个集合当中存储了Servlet对象和请求路径之间的关系 。只有放到这个HashMap集合中的Servlet才能够被WEB容器管理,自己new的Ser…...
2.4 如何在FlinkSQL使用DataGen(数据生成器)
1、DataGen SQL 连接器 FLinkSQL中可以使用内置的DataGen SQL 连接器来生成测试数据 官网链接:DataGen SQL 连接器 2、随机数数据生成器 随机数数据生成器支持随机生成 char、varchar、binary、varbinary、string 类型的数据 它是一个无界流的数据生成器 -- TO…...
Gin + Ant Design Pro JWT认证
文章目录 一:介绍二:Gin JWT 后台1. Claims 定义2. 创建和解析Token3. Gin中间件编写4. 辅助函数 三:Ant Design Pro JWT认证四:Gin中间件和使用示范 一:介绍 JWT现在比较流行的认证方式,微服务中使用特别…...
canvas实现图片标注,绘制区域
使用canvas绘制通过多边形标注区域 AI视频项目中需要分析图片,需要前台绘制区域,后端获取坐标然后识别图像,通过canvas 获取点然后连线绘图 HEML代码段 <div class"areaDrawing"><img src"/assets/images/snapPhotos…...
SELECT COUNT(*) 会造成全表扫描吗?
前言 SELECT COUNT(*)会不会导致全表扫描引起慢查询呢? SELECT COUNT(*) FROM SomeTable 网上有一种说法,针对无 where_clause 的 COUNT(*),MySQL 是有优化的,优化器会选择成本最小的辅助索引查询计数,其实反而性能…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
YSYX学习记录(八)
C语言,练习0: 先创建一个文件夹,我用的是物理机: 安装build-essential 练习1: 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件,随机修改或删除一部分,之后…...
华为OD机试-食堂供餐-二分法
import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
MySQL的pymysql操作
本章是MySQL的最后一章,MySQL到此完结,下一站Hadoop!!! 这章很简单,完整代码在最后,详细讲解之前python课程里面也有,感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...
webpack面试题
面试题:webpack介绍和简单使用 一、webpack(模块化打包工具)1. webpack是把项目当作一个整体,通过给定的一个主文件,webpack将从这个主文件开始找到你项目当中的所有依赖文件,使用loaders来处理它们&#x…...
LUA+Reids实现库存秒杀预扣减 记录流水 以及自己的思考
目录 lua脚本 记录流水 记录流水的作用 流水什么时候删除 我们在做库存扣减的时候,显示基于Lua脚本和Redis实现的预扣减 这样可以在秒杀扣减的时候保证操作的原子性和高效性 lua脚本 // ... 已有代码 ...Overridepublic InventoryResponse decrease(Inventor…...
C++11 constexpr和字面类型:从入门到精通
文章目录 引言一、constexpr的基本概念与使用1.1 constexpr的定义与作用1.2 constexpr变量1.3 constexpr函数1.4 constexpr在类构造函数中的应用1.5 constexpr的优势 二、字面类型的基本概念与使用2.1 字面类型的定义与作用2.2 字面类型的应用场景2.2.1 常量定义2.2.2 模板参数…...

