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

🛫 系列文章导航

🛫 导读

开发环境

版本号描述
文章日期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等)进行代理设置。

📖 参考资料

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

  • 15
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜猫逐梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值