背景
- 安卓新版(android 7.0 以上)应用里面,https 的抓包,需要突破 ssl 限制。
- 要突破 ssl 限制又需要 hook ,hook 常用 xposed , xposed 插件有 justtrustme 。(在 低版本 android 7.0 以下的安卓系统上 抓 https 包的话,就不用往下看啦 )
- 要装 xposed , 需要 root (费事费手机)或者 用安卓模拟器(部分应用不支持模拟器架构) 或者用类似 visualxposed 的环境(很多应用不能启动)。
- 要 root 就要折腾手机,我的一个手机已变砖了(就是多装了一个被列会黑名单的 xposed 插件,手贱。。)。
抓包成本有点大。
发现有一个在安卓系统之上的 虚拟安卓系统 VMOS 。非常的简单好用,可以避免以上麻烦,可以一劳永逸。
下面以 vmos + charles 抓 https 包为案例,简单说下方法。(有很多没试通的方法,我直接跳过不介绍,只讲能走通的。)
vmos 安装
访问 http://www.vmos.cn/
xposed 安装
启动 vmos , 桌面查找 “必备应用” ,选择 xposed install , 即可完成安装
justtrustme 安装
桌面查找 “必备应用” ,选择 xposed install - 下载 - 搜索 justtrustme ,安装之。
装完之后需要重启 vmos 。在主界面点击浮动按钮,关闭 vmos。
然后再打开 vmos 程序。
charles 安装
百度自己操作系统的安装 charles 方式。
启动 charles ,必须设置代理 支持 ssl 。 具体看网络教程。
adb 连接到 vmos
这里的目的是用 adb 命令启动 vmos 的网络设置界面,然后设置 http 代理。
adb 不知道是啥东西?请百度 “adb 的安装”
这里假设你已安装好 adb 。
vmos 只支持网络 adb 连接。不能通过宿主手机的 usb 连接到 vmos。
- 找到 vmos 主屏右下角的设置 — 其他设置 — 网络 adb (记录 ip+端口)
- 在和手机同个局域网下,电脑上使用命令 adb connect ip+端口
比如
adb connect 192.168.1.101:5666
- 连接成功之后,输入 adb device ,查看是否有检测到设备。
charles 证书安装到 vmos
- 设置手机的http代理。 在 vmos 打开并 adb 已连接的状态下,电脑终端输入
adb shell am start -a android.intent.action.MAIN -n com.android.settings/.wifi.WifiSettings
- 在手机上的 vmos 可以看到 wifi 选项,长按 wifi ,修改网络,高级设置,然后把电脑的 ip 和代理端口输入进去 (在 charles 设置里面查看 代理端口,一般默认是 8888 )
- 点 charles 的帮助
然后在 vmos 的浏览器里面 (就是 vmos 主界面底部菜单正中央的应用),输入 http://charlesproxy/getssl
- 访问时就会开始下载。如果下载并安装成功,那就跳过后面的第5步描述。我这里会提示下载失败,但是在 charles 里面该请求的截包已截到,在该请求的 response 里面可以看到证书内容。
- 把 charles 抓包看到的证书 response 内容复制下来,编辑成电脑上的本地文件保存文件名为 a.crv ,并用本地的 http 服务,得到本地下载路径。再到 vmos 的浏览器里面,访问该本地路径。这个时候就可以下载成功啦。
- 按照安装提示完成安装。
- 不出意外,现在就可以截到 https 包啦。