fiddler抓取移动端https数据获取不到的问题

380 阅读2分钟

在经过fiddler代理配置后和手机代理配置后,如果还不行,并且你的手机是安卓机的话.那就得注意下面说到的原因了:

安卓端由于系统版本的原因,在Android 6.0 (API level 23)及以前,APP默认信任系统自带的CA证书以及用于导入的CA证书,Android 6.0 (API level 23)以后,APP默认只信任系统自带的CA证书,对于用户导入的不予理会

关于 [network-security-config],在Android 6.0 (API level 23)及以前默认是这样的:

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

而到了7.0及以后则是

<base-config cleartextTrafficPermitted="true">
    <trust-anchors>
        <certificates src="system" />
    </trust-anchors>
</base-config>

现在安卓手机一般都是7/8/9甚至更高,所以下面有几种方案供君选择

① 重新打包目标APK,修改AndroidManifest.xml

我们可以使用Apktool等工具对目标APK进行解包,添加 [net_security_config.xml] 并修改 [AndroidManifest.xml] 然后重新打包。但是现在很多应用都做了防打包处理,要么利用Apktool弱点,制造错误让Apktool抛异常,要么重新打包后程序校验自身证书,校验失败无法启动,罢工。

② Root手机,安装Xposed框架,使用JustTrustMe模块

③使用Android5.1 Android6.0等安卓版本较低的手机来抓包分析

④终极大法,购入Google亲儿子手机,比如Nexus Pixel,下载Android AOSP代码,直接修改Android系统源代码,强行验证所有SSL证书为真,编译,刷机,愉快工作。

⑤如果是自己的app,则可以在编译APK之前,在你的Android项目的res文件夹下创建xml文件 [net_security_config.xml] 内容为:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config xmlns:android="http://schemas.android.com/apk/res/android">
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" overridePins="true" />
            <certificates src="user" overridePins="true" />
        </trust-anchors>
    </base-config>
</network-security-config>

然后在AndroidManifest.xml中的application标签下添加

android:networkSecurityConfig="@xml/net_security_config.xml"

就可以解决了