当前位置: 首页 > news >正文

android抓包踩坑记录

​ 由于需要公司业务需求,需要抓取APP中摄像机插件的网络包,踩了两天坑,这里做个总结吧。

事先准备

  • android-studio

    • emulate
    • sdk

    需要android模拟器和adb调试工具。如果已经有其他模拟器的话,可以只安装adb调试工具即可

  • mitmproxy

    一款代理抓包工具,本来是使用charles的,但是不知为何,我的ubuntu机器安装charles之后每个点击操作都要延迟三秒就换mitmproxy了

遇到的坑

网上寻找了大量的教程和视频,将下载代理工具的CA证书安装到Android之后,均无法抓取https的网络包。

之所以这样是因为在Android7.0及以上的系统中,应用只会任性系统预装的CA证书或应用指定的CA证书,而照网上教程安装的CA证书一般情况都会安装成用户证书,因此导致安装的CA证书,对于这些APP无法生效。

抓包原理

原先的网络请求是客户端向服务端发送网络请求,服务端返回的逻辑,如果需要抓取网络包的话,则需要在客户端与服务端中间代理一层,让客户端先给代理服务器发送网络请求,随后代理服务器可以将网络请求数据给记录下来之后再转发给服务器,同理服务端返回的数据也将有代理服务器记录下来,再转发给客户端。

而对于更加安全的https请求,使用这种中间人的方式则会困难许多 ,因为客户端只会信任一些权威机构认证过的CA证书(就是系统证书),因此如果想要抓取https的网络请求包,则需要将代理服务器伪造的CA证书,加入到客户端中(直接使用手机操作安装的证书是安装到用户信任证书中)而在Android7.0以及之后版本,再想抓取APP的https请求则需要将证书加入到系统证书

实操部分

由于安装系统证书需要具备root权限,因此安装使用的镜像不能带play,带play的正式版,正式版是不允许获得root权限的

博主采用的模拟器配置如下
在这里插入图片描述

开启mitmproxy代理服务器

进入官网根据自己的系统去下载对应的包

https://mitmproxy.org/

解压出来是如下的三个可执行文件

在这里插入图片描述

在当前路径下执行命令:

./mitmweb -p 8888 --set web_port=9000
  • 其中-p后面的8888是指代理服务器用来代理客户端的端口,需要客户端连接这个端口
  • web_port是指可在这个web服务器端口下查看抓取的数据包信息,数据包列表展示如下

在这里插入图片描述

配置客户端代理

客户端需要和代理服务器在同一网络下:

客户端的配置点击网络,WiFi

在这里插入图片描述

进入到wifi的高级选项下,设置代理,手动
在这里插入图片描述
其中代理主机名就是启动mitmproxy所在机器的ip,代理端口则为先前设置的8888

配置完成之后重连网络,此时应该可以抓取http请求了。

安装系统证书

连接上代理之后,需要使用连接代理的机器去访问,https://mitm.it/

博主这里使用手机去访问这个url,无法下载证书。后来切换至电脑端代理去访问这个url才下载成功的。

在这里插入图片描述

这边需要根据自身系统的不同下载不同的证书,此处需要抓android的包,所以下载的Android。

将下载后的文件mitmproxy-ca-cert.cer重命名成它的hash值.0,随后就可以加入到系统证书路径中了

使用如下命令计算出hash值

openssl x509 -inform PEM -subject_hash_old -in mitmproxy-ca-cert.cer

输出如下:

在这里插入图片描述

将文件重命名

mv mitmproxy-ca-cert.cer c8750f0d.0

至此证书已经处理完成,需要将其加入到系统证书路径下,即可抓取https请求。

将CA证书加入至系统证书路径下

首先获取root权限

adb root

对模拟器启用写入权限

# 查看当前模拟器下有多少设备
emulator -avd -list-avds

在这里插入图片描述

# 以系统可写的形式启动名为米家的模拟器(执行命令,需要模拟器此时是关闭状态的)
emulator -avd "mijia" -writable-system

模拟器重启完成之后需要adb获取root权限

# 获取root权限
adb root
# 重新挂载
adb remount
# 重启模拟器
adb reboot
# 再次进入root
adb root
adb remount# 将证书上传至system中的系统证书目录下。上述所有操作都是为了让这一步可以写成功
adb push c8750f0d.0 /system/etc/security/cacerts/ 

随后可以进入到设置中,查看系统证书目录下是否存在刚才上传的CA证书。

至此再操作APP即可抓取到https的网络包,可以在代理服务器的网页端查看。

在这里插入图片描述

http://www.xdnf.cn/news/430489.html

相关文章:

  • linux系统如何将采集的串口数据存储到txt
  • TCP首部格式及三次握手四次挥手
  • 操作系统导论——第29章 基于锁的并发数据结构
  • 【25软考网工】第六章(5)应用层安全协议
  • 讯联云库项目开发日志(一)
  • 记录算法笔记(2025.5.13)二叉树的最大深度
  • 基于STM32、HAL库的ADAU1701JSTZ-RL音频接口芯片驱动程序设计
  • flink的TaskManager 内存模型
  • 奇怪的公式
  • 代码随想录三十七天 完全背包二维 完全背包一维 518. 零钱兑换 II 377. 组合总和 Ⅳ
  • 视频编解码学习十一之视频原始数据
  • 思维链实现 方式解析
  • Python----神经网络(《Inverted Residuals and Linear Bottlenecks》论文概括和MobileNetV2网络)
  • 简单介绍Qt的属性子系统
  • Python爬虫(26)Python爬虫高阶:Scrapy+Selenium分布式动态爬虫架构实践
  • MLA (Multi-head Attention Layer) 详细说明
  • 报告研读:125页2024年大模型轻量化技术研究报告——技术详细讲解【附全文阅读】
  • 9、Activiti-任务(Task)的相关操作
  • 深入浅出MySQL 8.0:新特性与最佳实践
  • java基础-方法的重写、super关键字
  • NVMe学习资料汇总
  • 浅析AI大模型为何需要向量数据库?从记忆存储到认知进化
  • AI Agent开发第65课-DIFY和企业现有系统结合实现高可配置的智能零售AI Agent(下)
  • 2025年,大模型LLM还有哪些可研究的方向?
  • Mac上安装Mysql的详细步骤及配置
  • Python核心数据类型全解析:字符串、列表、元组、字典与集合
  • 在C#中使用YOLO的几种方式
  • 代码仓提交分支规范
  • docker安装mysql8, 字符集,SQL大小写规范,sql_mode
  • G1JVM内存分配机制详解