🛫 系列文章导航
- 【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 - 22H2 | 22621.2715 |
node -v | v20.10.0 | |
npm -v | 10.2.3 | |
夜神模拟器 | 7.0.5.8 | |
Android | 9 | |
python | 3.9.9 | |
frida | 16.2.1 | |
frida-tools | 12.3.0 | |
objection | 1.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位置长按鼠标左键,会出现一个弹窗,选择修改网络。
- 选择"显示高级选项",代理选择“手动”,填写代理服务器主机名及端口,点击保存。
这里,我们将其设置为计算机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: 文章中内容仅用于技术交流,请勿用于违规违法行为。