接口测试 接口测试之抓包实战解决 Android 高版本无法抓取 https

欲野法师 · 2020年08月27日 · 最后由 mojin 回复于 2022年03月18日 · 8150 次阅读

场景介绍

相信这个问题很多人都遇到过 Android7.0 以上系统无法抓包的问题,由于在测试过程中对分析定位问题很不方便,所以就想找了解决的办法让公司的开发童鞋改了改(毕竟我不能改开发代码,要是可以的话我就......),成功之后,就让开发写了一篇总结文章出来😁,结果开发也说搞不定,于是自己百度,自己解决,所谓前人种树后人乘凉嘛~~以下就是解决办法。

问题来源与本身

遇到的问题:Android6.0 及以下系统可以抓包,而 Android7.0 及以上系统不能再抓包?
产生原因:Android7.0+ 的版本新增了证书验证,所以 app 内不再像原来一样默认信任用户的证书

解决思路

当时我立即采取了,如下解决措施
1.先百度
2.问开发
3.问同行
百度结果
看来看了网上大部分的博客得到如下解决方案
方案一实现如下:
a.在 Android 工程目录的 res 底下创建一个 xml 文件夹,然后在内部创建一个名为 “network_security_config.xml” 的文件

<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" overridePins="true" />
            <certificates src="user" overridePins="true" />
        </trust-anchors>
    </base-config>
</network-security-config>

b.在 AndroidManifest 里的标签中,添加代码:

android:networkSecurityConfig="@xml/network_security_config"

然后从新编译打包即可抓包,很是方便,对应开发童鞋来说,也是很方便,但是,测试的是企业微信小程序,想让企业微信的开发人员帮我这么干,简直是白日做梦,还不说安全的问题等。。。。。

方案二实现如下:

a.找一个低于 6.0 或者等于 6.0 版本的 Android 设备或者模拟器,即可解决,但是考虑到:治标不治本,公司本身就没有这样的设备,再加上找了几个模拟器,都是 Android7.0 版本的,所以此方案,直接选择放弃。
问开发结果

开发去研究了半天,结果过来告诉我,我的 ios 是可以抓包的啊,Android 的我就不知道了,这是,我顿时想掀桌子。。。。。
问同行结果

同行提供了如下方案
1.使用方案 1
2.换个工具抓,例如 fidder,或者 BurpSuite 等,但是自己使用了,还是不行
3.直接去 ng 哪儿拦截,但是我需要抓取的有一部分是第三方的接口,前方已经高能,此路不通
最后还是不死心,还是自己继续百度,要不上 github 找一下看看,终于黄天不负有心人,终于找到了满足的条件的解决方法

最终解决方案如下

charles + VirtualXposed + JustTrustMe

实现步骤

进入 github 下载如下两个 pages
VirtualXposed:https://github.com/android-hacker/VirtualXposed
JustTrustMe:https://github.com/Fuzion24/JustTrustMe

第一步

使用如下 adb 命令分别安装两个 pages

adb -s R3J6R19B20004228 inatall VirtualXposed
adb -s R3J6R19B20004228 install JustTrustMe

第二部

安装完成进入 VirtualXposed apk 应用,点击 6 个小点进入设置页面

第三步

进入设置页面,点击模块管理,勾选 JustTrustMe(当然我并没有找到它,可能是我这个版本不需要在手动选择了,安装之后自动识别到了)重启之后我们重新进去设置页面,添加我们需要抓包的应用即可,我这里选择的企业微信做案例

第四步

点击添加应用,选择需要抓包的软件安装

配置 charles 抓包

设置 charles 代理,此处不再说明,相信设置代理大家能自己解决,手机设置 wifi 里面代理改成手动。输入 ip,端口:默认 8888,注意手机和电脑在一个 wifi 下就 ok,

第六步

回到 VirtualXposed 上滑解锁,打开我们之前安装的企业微信,则发现 charles 已经成功抓取到企业微信的 HTTPS 的数据包

总结

有时候,遇到问题很慌,不知所措,但是,作为一个合格的测试人员,遇到事情,应该泰山崩于前而色不变 麋鹿兴于左而目不瞬,就比如本次经验来说,开发都放弃了,但是经过一波几折,最终还是通过自己的努力解决了,技术的道路没有捷径,需要我们一步一个脚印的走下去。就好比这件事情,研发都说搞不定了,我搞定了,研发看我的眼光都不一样了,以后提 bug 也更加有说服力了😄。

结束语

最后还是那句话,技术菜,可以被鄙视,文章写得烂可以被喷,但是,学习的心不能被质疑

共收到 22 条回复 时间 点赞

第一步安装的是 zip 还是啥?R3J6R19B20004228 这个又是啥?

需要 root 权限吗

这个有时候也不好使😂

sharpdeep 回复

不需要

married577 回复

设备名字

如果可以 root 的话直接把证书导入到系统证书即可

欲野法师 回复

第一步安装的是 zip 还是啥?坐等结果开始动手

确定不需要 root 权限吗?不需要的话可以尝试一下

少女 回复

不需要☺

欲野法师 回复

真心求教,第一步安装的是 zip 还是啥

已经测试,可以,不过有的 app 还是不行,比如微博,比如抖音。

第一步安装的是 zip 还是啥

married577 回复

一个 apk

devzhong 回复

有的 app 是有自己的证书加密的,可能需要,自己项目的证书

我用的数据线 + 谷歌浏览器的:chrome://inspect

欲野法师 回复

请问这种是不是除了拿到证书外没办法了?

devzhong 回复

把手机 root,或者使用模拟器都可以,有些特殊的软件,只能使用模拟器了😼

18楼 已删除

推荐 太极 Xposed+JustTrustMe,完美抓包~

欲野法师 fiddler 抓安卓 10 失败了 中提及了此贴 09月28日 14:13

使用 virtualxposed 偶尔出现某个接口抓不到,实际是调用了的😅

仅楼主可见

MuMu 模拟器安卓版本是在 7.0 之下的,时间不够可以暂时用这个办法解决。
如果使用了 vitrualbox 时,还没法抓包,可以更改下设置:“HTTPS-->Decryptpt HTTPS traffic ” 选择为 “from all processes”,之前也是各项配置都正常,怎么也抓不到,偶尔更改了这个设置之后;就抓包正常了。

married577 回复

adb devices 获取的手机序列码

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册