当前位置: 首页 > 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的网络包,可以在代理服务器的网页端查看。

在这里插入图片描述

相关文章:

  • SpringSecurity当中的CSRF防范详解
  • 香橙派zero3 安卓TV12,更换桌面launcher,开机自启动kodi
  • 资产管理平台—chemex
  • C#进阶(1) ArrayList
  • TypeScript 知识框架
  • CSP认证准备第三天-差分及第36次CCF认证(BFS)
  • ExoPlayer 如何实现音画同步
  • CSS3 选择器完全指南:从基础到高级的元素定位技术
  • 2025年项目管理软件革命:AI与空间计算如何重塑企业协作格局
  • 国产化Word处理控件Spire.Doc教程:如何使用 C# 从 Word 中提取图片
  • 鸿蒙5.0项目开发——鸿蒙天气项目的实现(介绍)
  • 机器学习之AutoML:机器学习的自动化革命及其应用场景分析
  • CSS结构性伪类、UI伪类与动态伪类全解析:从文档结构到交互状态的精准选择
  • ssl 中 key 和pem 和crt是什么关系
  • 轻量级高性能推理引擎MNN 学习笔记 02.MNN主要API
  • 服务器相关
  • Linux之初见进程
  • LS-NET-012-TCP的交互过程详解
  • Qt应用程序启动时的一些思路:从单实例到性能优化的处理方案
  • 前端开发避坑指南:React 代理配置常见问题与解决方案
  • 种植耐旱作物、启动备用水源,甘肃各地多举措应对旱情
  • 国内规模最大女子赛艇官方赛事在沪启航,中外41支队伍逐浪
  • 荣盛发展:新增未支付债务11.05亿元
  • 一周文化讲座|“我的生命不过是温柔的疯狂”
  • 秦洪看盘|缩量回踩,积蓄叩关能量
  • 外交部:国际社会广泛理解和支持中方不同意台参加世卫大会的决定