美文网首页Android开发经验谈Android开发
Android 7 后如何免 ROOT 抓取 HTTPS 数据包

Android 7 后如何免 ROOT 抓取 HTTPS 数据包

作者: Android进阶小麦 | 来源:发表于2020-06-02 20:29 被阅读0次

    Android 7.0 之后增加了对第三方证书的限制,也就是说 Android 6.0 及更低版本的系统上,默认是信任用户证书的,但 Android 6.0 以上的系统,则改成了不信任用户证书,而抓包工具(charles、fiddler等)提供的证书默认是安装在用户证书上的,所以证书都无法通过校验,也就无法抓取HTTPS请求了。

    但是等等,有些小伙伴可能发现安卓系统是高于 6.0 的,有时也能抓取某些 APP 的HTTPS请求,这是为什么呢?

    这是因为开发者在 APP 中做了如下配置:

    第一种方案:

    <!-- res/xml/network_security_config.xml -->
    <?xml version="1.0" encoding="utf-8"?>
    
    <network-security-config>
        <base-config cleartextTrafficPermitted="true">
                <certificates src="system"/>
                <certificates src="user"/>
        </base-config>
    </network-security-config>
    
    
    <!-- AndroidManifest.xml -->
    <application
        android:networkSecurityConfig="@xml/network_security_config"
        >
    </application>
    
    

    老版本的微信(6.x)就是这样配置了信任用户证书的,所以在 Android 7.0 也可以抓公众号 HTTPS 的数据包

    第二种方案:

    <!-- res/xml/network_security_config.xml -->
    <?xml version="1.0" encoding="utf-8"?>
    
    <network-security-config>
        <debug-overrides>
            <trust-anchors>
                <certificatessrc="system"/>
                <certificatessrc="user"/>
            </trust-anchors>
        </debug-overrides>
    </network-security-config>
    
    

    这种方式只有在android:debuggable为true时才生效, 缺点很明显,包上线了之后就不能再被抓包了

    上面方案都是需要开发人员配合打包的,一般在测试环境可以用,但到了生产环境我们还想抓包怎么办呢?

    其他方案:

    • 将设备root,将证书安装到system分区
    • 将设备root,利用Xposed框架,利用 JustTrustmeSSL-killer 等模块绕过客户端的 SSL Pinning 校验 (科普文章)

    更优雅的方案

    上面介绍的方案要么是需要开发配合的,要么是需要 root 手机的,有没有更优雅便捷的方案呢?答案是肯定的

    virtualXposed 了解下

    image

    VirtualXposed 是基于VirtualApp 和 epic 在非ROOT环境下运行Xposed模块的实现(支持5.0~10.0),
    也就是说它提供了一个虚拟环境,类似虚拟机,这个环境下是默认信任用户证书的,所以安装在这个环境的 APP 基本上都能抓包,
    另外也能使用 Xposed 安装一些模块,实现更强大的功能。

    这里我以抓取最新版微信 7.0.15 中小程序的数据包为例

    设备: 华为 Honor 8X
    Android 版本:10
    微信版本:7.0.15

    1. 下载 VirtualXposed

    image

    2. 打开后类似一个 Android 桌面启动程序, 我们可以看到已经有 Xposed 框架安装在上面了,并且也是激活的,当然这里我们不需管它

    3. 长按虚拟桌面会出现添加应用选项,然后我们可以从系统已安装的 APP 中克隆一个或者从内部存储中直接安装 APK 包

    image

    这里需要注意下,因为微信有分 64位的版本和32位的版本,经过测试,目前 VirtualXposed 只支持安装 32 位的, 64位的打开会闪退,如果你遇到其他
    APP 也出现打开闪退的情况可能就是这个原因,另外也可以尝试重启手机,看是否解决

    微信 APP 32未版本可以直接到官网下载

    image

    4. 安装完微信,然后按照正常的抓包流程: 打开 fiddler——安装证书到手机端——开始抓取 VirtualXposed 中 APP 的数据包

    还有更多的玩法,赶紧试试吧

    作者:mocobk
    链接:https://www.jianshu.com/p/554cc3133dad

    相关文章

      网友评论

        本文标题:Android 7 后如何免 ROOT 抓取 HTTPS 数据包

        本文链接:https://www.haomeiwen.com/subject/vfpuzhtx.html