Android HTTPS MITM抓包教程(需Root)
本教程的前提是有一台Root过的Android设备,需要安装Magisk和LSPosed,目的是抓取应用或游戏的HTTPS数据,手段是MITM(中间人攻击)。 没Root的话可以使用模拟器或者WSA,不过部分游戏会带有模拟器检测,也有一定风险。千万不要尝试去修改任何应用或者游戏的apk,不少应用会检查apk签名的,签名不一致有极大的封号风险。
本文不针对任何特定应用或游戏。本着授人以渔的原则,还会介绍一下每一步为什么要这样做。Android系统的操作以原生Android系统为例,其他第三方UI可以自己摸索一下。
抓包原理
HTTPS通信数据是加密的,会通过不对等加密进行握手后使用对等加密后续的通信,无法简单使用Wireshark、tcpdump之类的工具查看通信内容。 因此,在使用代理服务器捕获通信内容的同学,还需要一个软件对HTTPS的数据包进行解密。
与此同时,抓包者并不知道服务器的原始密钥,无法直接解密通信包,支持HTTPS抓包的软件一般会通过MITM(中间人攻击)进行流量解密。 具体而言,软件会生成一个自签名证书,使用这一证书与客户端进行通信、使用原始证书与服务器进行通信,这样就可以解密出通信内容。
进一步说,客户端会通过证书链来验证一个证书是否由已经信任的根证书签发,软件自行生成的自签名证书并不会被客户端信任。 因此,抓包软件会同时提供一个根证书,后续需要通过一些办法让应用信任这个根证书,这样才能正常抓包。
隐藏Root
部分应用或游戏会检测设备Root情况,如果无需隐藏Root可以跳过这一步。
如果使用Magisk,可以使用Shamiko模块隐藏Root。
如果使用Magisk Delta,可以在设置里的Magisk Hide中选定需要隐藏Root的应用。
部分应用或游戏在启用Shamiko或Magisk Hide时会无法正常抓包,还请自行取舍。
也有部分应用会通过检测其它应用包名的方式来检测Root,还可以额外通过安装隐藏应用列表应用来避免这一问题。
选择抓包软件
有以下免费HTTPS抓包软件可以使用:
- mitmproxy:开源免费强烈推荐,需要一台macOS、Windows或Linux的电脑
- Fiddler Classic:需要一台Windows的电脑
- Packet Capture:可以直接在Android设备上抓包,最后更新于2019年12月26日,可能有一些功能和兼容性问题
- HttpCanary:也可以直接在Android设备上抓包,应用已不再维护,Google Play、GitHub均删除了相关内容
下文会以mitmproxy为例,其他软件大差不差。
版本参考
作为参考,笔者使用的软件版本如下:
- Android:13
- mitmproxy:9.0.1
- Magisk Delta:25210
- TrustUserCerts:0.4.1
- LSPosed:1.8.6(6712)
- TrustMeAlready:1.11
安装抓包软件
- 打开mitmproxy官网
- 如果是Windows,请下载安装器(Installer)并完成安装
- 如果是macOS,建议直接使用Homebrew命令
brew install mitmproxy
完成安装 - 如果是Linux,下载压缩包,解压并加入PATH(软链接也可以,请自行发挥)
启动抓包软件
- 如果是Windows,在开始菜单或应用中找到mitmweb,点击图标来启动
- 如果是macOS或Linux,直接在命令后中执行
mitmweb
来启动 - 启动之后一般会自动打开mitmweb的网页,一般是
http://127.0.0.1:8081/
- 网页中会显示mitmproxy代理服务器的端口,一般是
8080
设置系统代理
需要设置系统代理,才能让Android系统的通信经过代理服务器。 如果是Android内部的抓包软件,可以通过设备内VPN实现。
- 请确保Android设备连接到了WiFi,并且和电脑处于同一个局域网,如果没有WiFi可以开启手机热点或电脑热点
- 获取当前电脑的内网IP,Windows可以通过
设置
-网络和Internet
-状态
-属性
-IPv4地址
获取、macOS和Linux可以直接通过命令ifconfig | grep "inet "
获取,一般为192.168.x.x
- 打开Android设备中的
设置
-网络与互联网
-互联网
、点击已连接WiFi后面的设置按钮、点击右上角设置按钮、高级选项
-代理
,选择手动
,并在代理主机名
位置输入电脑内网IP、代理端口
位置输入代理服务器端口,完成后点击保存
添加系统凭据
绝大多数Android应用都不会信任用户根证书,因此需要先将根证书加入系统凭据。
- 通过浏览器访问
http://mitm.it
,下载Android使用的证书 - 打开
设置
-安全
-更多安全设置
-加密与凭据
-安装证书
-CA证书
、点击仍然安装
、验证PIN码后选择下载的证书,这一步会安装到用户根证书 - 在Magisk中安装TrustUserCerts模块
- 重启设备,重启完后会将证书加入系统根证书
强制应用信任
有些应用不会信任系统凭据,还需要LSPosed模块来强制信任。
- 在Android系统中安装TrustMeAlready应用或JustTrustMe应用
- 在LSPosed中启用上述模块,并在作用域中选定需要抓包的应用或游戏
抓包
启动需要抓包的应用或游戏后,不出意外的话,可以在mitmweb中看到解密的数据包。
参考文献
发布平台
本文还发布至:
留下评论