前言
在我们简化Android应用时,有时候不得不调用官方API(比如登录验证等)
在撰写此文章之前,我尝试的许多方案与抓包软件,它们都可以正常抓取HTTP/DNS请求,但如果想要抓取并解密HTTPS/TLS,通常都无法成功————一是大多数A只信任系统级CA证书,不信任用户级CA证书 二是SSLPinning(证书锁定)
这篇文章主要解决第一个问题
本文将使用KernelSU管理器 + PCAPdroidv2.4 + MitmProxy12.2.3bin演示
后面将会把MitmProxy称为Mitm
准备工作
你需要确保以下环境
- 一台电脑
- 设备已Root
- 手机已安装PCAPdroid
- 手机已刷入TrustAnyCert-reviewed2模块(密码608d)
- 电脑已安装MitmProxy
这里重点讲一下TrustAnyCert-reviewed2模块
此模块改自https://github.com/gorkemgun/TrustAnyCert
感谢原项目作者提供的模块和源码
修改后的模块主要添加了目标App注入
保证:无混淆、无加密、无后门
担心的话可以自行使用AI审计zip压缩包内的文件
对于KernelSU类管理器,需要安装元模块来实现system挂载功能,我这里用的是Hybrid Mount
应先刷入Hybrid Mount,再刷入TrustAnyCert-reviewed2
环境搭建
现在开始配置环境
确保手机和电脑在同一局域网
电脑
先搭建电脑Mitm环境
先看当前局域网ip
ipconfig我这里的是192.168.88.101
现在启动mitmweb SOCKS5
mitmweb --mode socks5 --listen-host 192.168.88.101 --listen-port 8050 --web-host 127.0.0.1 --web-port 8081下面是选项及作用
| 项目 | 作用 |
|---|---|
| --mode socks5 | mitm将作为SOCKS5服务端运行 |
| --listen-host 192.168.88.101 | 填入手机端PCAPdroid的SOCKS5主机(就是当前局域网的IPv4地址) |
| --listen-port 8050 | 填入手机端PCAPdroid的SOCKS5端口 |
| --web-host 127.0.0.1 | 在本机(127.0.0.1)启动mitmweb服务端 |
| --web-port 8081 | 指定启动mitmweb的端口 |
将会打开浏览器显示mitmweb主界面并在当前文件夹下创建CA证书
现在需要将CA导入到手机用来解密HTTPS/TLS流量
CA证书在运行mitmweb命令的文件夹下:.mitmproxy\mitmproxy-ca-cert.cer(注意是mitmproxy-ca-cert.cer)
将此证书文件传输到手机内,这里我使用adb
adb push C:\Users\ChariTY\.mitmproxy\mitmproxy-ca-cert.cer /sdcard/ #/sdcard即/storage/emulated/0/至此电脑端环境准备完成
Android
来到Android
先打开TrustAnyCertWebUI
点击Tap to select a certificate file
选择之前传输到Android的CA证书(mitmproxy-ca-cert.cer)
往下翻,直接输入目标应用包名 或者 点击Select Installed Apps(仅显示包名)并勾选需要解密HTTPS/TLS流量的App
点击Save Target Apps
往下翻,点击Re-inject into APEX
做好后往上翻,三个状态应为绿色
退出WebUI
打开PCAPdroid 找到右上角设置 下拉 找到并关闭TLS解密 拦截QUIC改为始终
然后在下方找到启用SOCKS5代理并进入
在显示的界面中打开SOCKS5重定向 代理主机填入你电脑Mitm设置的host,我这里是192.168.88.101
下方端口填入Mith设置的端口,我这里是8050
填入完成后返回
至此Android环境准备完成
开始抓包
打开PCAPdroid
在主界面点击并选择目标应用,勾选你要抓包的App后返回,点击就绪按钮/右上角开始按钮来开始抓包
PCAProid将创建VPN来进行流量捕获,所以需要同意VPN创建请求
打开目标App,进行网络相关操作,然后观察电脑上的mitmweb是否已有记录(转到Flow选项卡)
如果HTTPS/TLS解密成功,那么它最右边的“列”应该显示为绿色:
此时点击任意已解密的HTTPS/TLS流量就可以看到明文:
当然响应也是