【Frida】【Android】06_夜神模拟器中间人抓包

🛫 系列文章导航

  • 【Frida】【Android】01_手把手教你环境搭建 https://blog.csdn.net/kinghzking/article/details/136986950
  • 【Frida】【Android】02_JAVA层HOOK https://blog.csdn.net/kinghzking/article/details/137008446
  • 【Frida】【Android】03_RPC https://blog.csdn.net/kinghzking/article/details/137050967
  • 【Frida】【Android】04_Objection安装和使用 https://blog.csdn.net/kinghzking/article/details/137071768
  • 【Frida】【Android】05_Objection实战 https://blog.csdn.net/kinghzking/article/details/137071826

▒ 目录 ▒

    • 🛫 系列文章导航
    • 🛫 导读
      • 开发环境
    • 1️⃣ 理论知识
      • 中间人攻击
      • HTTPS原理
      • HTTPS的中间人攻击
    • 2️⃣ Android配置
      • 配置网络环境
      • 手机设置代理(系统自带wifi设置)
    • 3️⃣ PC上的抓包工具配置
      • 抓HTTP
      • 抓HTTPS
    • 🛬 文章小结
    • 📖 参考资料

🛫 导读

开发环境

版本号描述
文章日期2024-03-30
操作系统Win11 - 22H222621.2715
node -vv20.10.0
npm -v10.2.3
夜神模拟器7.0.5.8
Android9
python3.9.9
frida16.2.1
frida-tools12.3.0
objection1.11.0

1️⃣ 理论知识

中间人攻击

中间人攻击(Man-in-the-Middle Attack,简称MITM攻击)是一种网络攻击手法,攻击者秘密地插入到两个通信实体之间的通信会话中,扮演“中间人”的角色。在这样的攻击中,攻击者能够读取、监听、修改或者伪造经过他手中的所有通信数据,而正常的通信双方却对此毫不知情,以为他们仍在进行直接、安全的通信。
参照《图解HTTP》中的插图,让我们更容易理解中间人攻击:
在这里插入图片描述

ps: 远在HTTP的年代,中间人攻击就已经存在了,而且成本极低,针对该情况,HTTPS应用而生(当然,还有很多其它原因)。

HTTPS原理

在HTTP时代,整个应用层通信过程都处于明文状态并且通信的双方也不对传输过程加以验证,在安全上十分不可靠。
为了解决HTTP安全问题,衍生出了HTTPS(HTTP Secure),也就是添加了加密及认证机制的HTTP。

HTTPS协议的整个通信过程主要分成发起请求、验证身份、协商密钥、加密通信阶段,如图所示:
在这里插入图片描述

上述流程总结如下:

  • 客户端首先向服务器发送访问请求,当服务器接收到请求后,它会向客户端传送自身持有的由权威第三方信任机构签发的数字证书,该证书包含了服务器的公钥信息。

  • 客户端收到公钥后,依据本地存储的受信任根证书列表及证书链验证服务器证书的有效性和真实性。

    • 若服务器证书无法通过验证,则客户端会显示类似“您的连接不是私密连接”的警告,表明公钥不可信赖。
    • 反之,若验证通过,客户端则利用服务器提供的公钥加密自身的随机生成的客户端公钥,并将其回传至服务器。
  • 服务器接收到加密的客户端公钥后,运用与之配对的私钥进行解密,从而获取客户端的公钥。接着,服务器基于双方共享的信息生成一个临时的session key,并使用客户端公钥加密这个会话密钥,再传递给客户端,完成了密钥协商过程。

  • 自此以后,客户端与服务器间的所有通信内容都将采用先前协商好的session key进行对称加密,以确保数据的机密性和完整性。

总之,HTTPS协议通过对HTTP协议添加加密机制、身份认证和完整性保护措施,有效地解决了HTTP在数据传输过程中的安全隐患问题,可以形象地理解为“HTTP加上加密、认证和完整性保护机制即构成了HTTPS”。

HTTPS的中间人攻击

HTTPS上的应用层抓包原理主要“攻破”的是HTTPS传输过程中验证身份的步骤,我们在配置抓包环境时是将Charles证书加入到系统本身信任的证书中,当应用进行通信时,如果没有进一步的安全保护措施,那么客户端接收到的服务器证书即使是Charles证书也会继续通信,整个过程可以简单地理解为如下图所示:
在这里插入图片描述

为了应对上述通过手动给系统安装证书从而导致中间人攻击继续生效的风险,App也对这类攻击推出了对抗手段,主要有以下两种方式:

  • SSL Pinning,又称证书绑定,可以说是客户端校验服务器的进阶版:该种方式不仅校验服务器证书是否是系统中的可信凭证,在通信过程中甚至连系统内置的证书都不信任而只信任App指定的证书。一旦发现服务器证书为非指定证书即停止通信,最终导致即使将Charles证书安装到系统信任凭据中也无法生效。
  • 服务器校验。这种方式发生在HTTPS验证身份阶段,服务器在接收到客户端的公钥后,在发送session key之前先对客户端的公钥进行验证,如果不是信任的证书公钥,服务器就中止和客户端的通信。

2️⃣ Android配置

配置网络环境

为了达到抓包的目的,首先要将计算机和手机连接在同一个局域网中并且要确保手机和计算机能够互相访问。

点击右上方“设置”→选择“手机”→安装网络桥接驱动
在这里插入图片描述

桥接驱动安装完成后,点击开启网络桥接模式,进入桥接设置中DHCP和静态IP的设置
在这里插入图片描述

  • 查看主机ip
    ipconfig
    192.168.76.103
    在这里插入图片描述

重启模拟器,adb连接模拟器,查看ip地址,并ping主机地址,确保正常运行
在这里插入图片描述

手机设置代理(系统自带wifi设置)

  • 打开模拟器内的设置
    打开模拟器内的设置
  • 点击wifi进入列表后,点击wifi位置长按鼠标左键,会出现一个弹窗,选择修改网络。
    http://bignoxhk-player.oss-cn-hongkong.aliyuncs.com/help-center/2022/04/15/5b8b2bb82fe24c45a24a84c044f994ee.gif
  • 选择"显示高级选项",代理选择“手动”,填写代理服务器主机名及端口,点击保存。
    ===
    这里,我们将其设置为计算机ip:192.168.76.103;端口设置为8080

3️⃣ PC上的抓包工具配置

这里咱们使用Charles进行抓包

抓HTTP

打开Charles,点击菜单Proxy,然后点击菜单Proxy Settings...,打开代理设置界面:
在这里插入图片描述

在打开代理设置界面,设置端口为8080:
在这里插入图片描述

模拟器中,我们打开浏览器,访问百度,会弹出下面对话框,我们点击Allow按钮,从而允许抓取192.168.76.104访问的请求。
在这里插入图片描述

最终,我们将抓取到如下封包内容,表示抓到请求,但是内容有问题。
在这里插入图片描述
这是因为Charles默认开启了SSL Proxying模式,取消下面按钮即可。
在这里插入图片描述

关闭SSL Proxying模式,再次访问http://bing.com,就可以抓到内容了
在这里插入图片描述

抓HTTPS

在这一节中,仍然以Charles抓包工具为例。为了能够成功抓取HTTPS的数据,首先需要通过Ctrl+L快捷键开启Charles的SSLProxying模式。

在Android模拟器中,打开网站chls.pro/ssl,稍等片刻,即可下载证书,在通知栏中点击下载的证书,将打开为证书命名的窗口。
在这里插入图片描述

随便设置证书名称,点击确定,提示启用安全锁屏功能:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
随便设置一种即可,这里小编选择PIN码,密码简单点1234
最后会提示已安装yemao的字样。

进入“设置”应用,依次单击“安全性和位置信息”→“加密与凭据”→“信任的凭据”→“用户”,即可在用户凭据中查看到刚才安装的证书文件,如图所示。
在这里插入图片描述

仅仅是将证书安装为用户信任的证书还不够,还需要通过shell将Charles的证书变成系统自带的证书以适用于更加通用的抓包,具体命令与过程如下:
在这里插入图片描述

adb shell
su

cd /data/misc/user/0/cacerts-added/
mount -o remount,rw /system
cp * /etc/security/cacerts/
chmod 777 /etc/security/cacerts/*
mount -o remount,ro /system
reboot

手机会开始重启。在重启完成后,重新进入“设置”应用的“信任的凭据”页面,如图7-24所示。翻查系统信任的凭据,如果发现Charles证书就表明Charles证书已成功放置于系统证书中被系统信任。
在这里插入图片描述

这时,再打开 https://www.baidu.com就可以正常抓取了。
在这里插入图片描述

🛬 文章小结

  • VPN冲突
    为了避免冲突,如果遇到无法抓包的情况,检查计算机和模拟器中,是否开启了其它VPN软件。
    如果开启过其它VPN软件,可能导致环境问题,有可能需要重启才能解决。
  • 手机设置代理有很多方案,上面直接修改系统设置,操作简单,但是会被api检查到,我们可以使用其它代理软件(Postern、V2ray等)进行代理设置。

📖 参考资料

  • 网络桥接功能使用说明 https://support.yeshen.com/zh-CN/qt/wlqj

ps: 文章中内容仅用于技术交流,请勿用于违规违法行为。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/501592.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何更新STEAM税务信息

回复邮件 Here are three attachments:. Figure 1: My personal tax information file in the government system, including my TIN, permanent address and mailing address Figure 2. My tax payment certificate in China in 2002 was issued by the tax bureau, Figure 3:…

npm ERR! errno CERT_HAS_EXPIRED

1 问题描述 使用npm命令安装相关依赖报错:npm ERR! code CERT_HAS_EXPIRED npm ERR! errno CERT_HAS_EXPIRED npm ERR! request to https://registry.npm.taobao.org/vue%2fcli failed, reason: certificate has expired报错示例图如下所示: 2原因分析…

C语言循环结构的程序设计

在C语言中,循环结构是一种重要的控制结构,用于重复执行特定的代码块,直到满足特定的条件为止。循环结构使得程序可以更加灵活和高效地处理重复性的任务,从而提高了程序的可读性和可维护性。本文将深入介绍C语言中循环结构的程序设…

小型分布式文件存储系统GoFastDfs应用简介

前言 最近稍微留意了一下各个文件存储系统的协议,发现minio是LGPLV3, 而fastdfs 是GPL3,这些协议其实对于商业应用是一个大坑。故而寻找一些代替品。 go-fastdfs就是其中之一,官网在: go-fastdfs 具体应用 其实可以直接查看官网教程的。 下…

Jenkins详细安装配置部署

目录 简介一、安装jdk二、安装jenkins这里如果熟悉 Jenkins ,可以【选择插件来安装】,如果不熟悉,还是按照推荐来吧。注意: 三、插件安装如果上面插件安装,选择的不是【安装推荐的插件】,而是【选择插件来安…

学习Fast-LIO系列代码中相关概念理解

目录 一、流形和流形空间(姿态) 1.1 定义 1.2 为什么要有流形? 1.3 流形要满足什么性质? (1) 拓扑同胚 (2) 可微结构 1.4 欧式空间和流形空间的区别和联系? (1) 区别: (2) 联系: 1.5 将姿态定义在流形上比…

基于java+springboot+vue实现的二手闲置物品置换系统(文末源码+Lw+ppt)23-375

摘 要 大学生二手闲置物品置换交易管理系统设计的目的是为用户提供免费物品、积分物品等功能。 与其它应用程序相比,大学生二手闲置物品置换交易的设计主要面向于学校,旨在为管理员和卖家、用户提供一个大学生二手闲置物品置换交易管理系统。用户可以…

Java项目:80 springboot师生健康信息管理系统

作者主页:源码空间codegym 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 系统的角色:管理员、宿管、学生 管理员管理宿管员,管理学生,修改密码,维护个人信息。 宿管员…

LLM推理入门指南②:深入解析KV缓存

在本系列文章《LLM推理入门指南①:文本生成的初始化与解码阶段》中,作者对Transformer解码器的文本生成算法进行了高层次概述,着重介绍了两个阶段:单步初始化阶段,即提示的处理阶段,和逐个生成补全词元的多…

数组类模板(类模拟实现静态数组)

目录 介绍: 案例描述: 思路: 对要求分别分析实现: 创建对应的类: 1.定义一个数组类 2.类中属性有:数组, 容量, 大小 3.数组函数有: 构造函数(容量&am…

Oracle EBS AR接口和OM销售订单单价为空数据修复

最近,用户使用客制化Web ADI 批量导入销售订单行功能,把销售订单行的单价更新成空值,直到发运确认以后,财务与客户对帐才发现大量销售订单的单价空,同时我们检查AR接口发现销售订单的单价和金额均为空。 前提条件 采用PAC成本方式具体问题症状 销售订单行的单价为空 Path:…

车载以太网AVB交换机 gPTP透明时钟 6口 百兆车载以太网交换机

SW100TE百兆车载以太网交换机 一、产品简要分析 6端口百兆车载以太网交换机,其中包含5通道100BASE-T1泰科MATEnet接口和1个通道100BASE-TX标准以太网(RJ45接口),可以实现车载以太网多通道交换,车载以太网数据采集和模拟,Bypass数…

Discourse 最多允许有几个分类级别

和 DISCUZ 不同,DISCUZ 可以允许分类下面还有分类,再继续分类这种嵌套式分类。 Discourse 最多只允许有 2 个分类。 如果你在已有的分类下再继续分类的话,系统会提示错误: 意思就是子分类不能再分子分类。 Discourse 尽量采取了…

Chapter 1 - 6. Introduction to Congestion in Storage Networks

NVMe/TCP NVMe/TCP carries NVMe commands over TCP transport (Figure 1-8) for accessing remote block storage via a lossy or sometimes lossless network. It is an OSI layer 5 (sessions layer) protocol. NVMe/TCP 通过 TCP 传输(图 1-8)传输 NVMe 命令,以便通过有…

pnpm、monorepo分包管理、多包管理、npm、vite、前端工程化、保姆级教程

浅尝pnpm monorepo 多包管理方案 💡tips: 创建pnpm monorope多包管理框架流程 初始化 mkdir taurus & cd taurus pnpm init创建基础文件 创建文件pnpm-workspace.yaml packages:- packages/**创建文件夹packages/ -packages/ -package.json -pnpm-workspace…

一周学会Django5 Python Web开发-Django5模型分页查询

锋哥原创的Python Web开发 Django5视频教程: 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计43条视频,包括:2024版 Django5 Python we…

初步了解C++

目录 一:什么是C? 二.C发展史 三:C关键字 四:命名空间 4.1命名空间的介绍 4.2命名空间的使用 4.3命名空间的使用 4.3.1使用作用域限定符 4.3.2 使用using将命名空间的某个成员引入 4.3.3使用using把整个命名空间展开 4.4命名空…

软件测试计划

1测试目的 2测试范围 3资源要求 3.1人力资源 3.2指派干系人 3.3测试环境 3.4测试工具 4测试类型 5测试安排 5.1测试进度 5.2测试策略 5.2.1测试需求 5.2.2测试类型 6测试停止标准 7测试风险 8缺陷管理 8.1缺陷属性 8.2缺陷类型 8.3缺陷严重程度 8.4缺陷优先…

(十一)图像的罗伯特梯度锐化

环境:Windows10专业版 IDEA2021.2.3 jdk11.0.1 OpenCV-460.jar 系列文章: (一)PythonGDAL实现BSQ,BIP,BIL格式的相互转换 (二)BSQ,BIL,BIP存储格式的相互转换算法 (三…

windows无法使用hadoop报错:系统找不到路径

在windows下安装hadoop-3.1.4,进行环境变量配置后,打开window命令行窗口测试hadoop命令,报错,如图所示: 方案:由于JAVA_HOME路径有空格导致,可修改hadoop下\etc\hadoop\hadoop_env.cmd文档中set JAVA_HOME以…