美文网首页
Android7.0之后不能抓包--终极解决方案

Android7.0之后不能抓包--终极解决方案

作者: laomao_老毛 | 来源:发表于2020-01-17 15:17 被阅读0次

当升级targetSdkVersion 到 28 后发现在 Android 7.0 以上机型不能抓包了。上网搜了一下有很多解决方案,但都有弊端,最后参考墙外的一篇文章找到了一个最优解决方案

方案一:

1.添加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>

2.在AndroidManifest.xml中加入上面的配置


<application

    android:networkSecurityConfig="@xml/network_security_config"

    >

</application>

这样就可以抓包了,但是,这种方案和之前一样,所有人都可以抓取你家App的数据

方案二:

1.和方案1一样,添加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="@raw/charles"/>

    </base-config>

</network-security-config>

2.<certificates src="@raw/charles"/>是添加到raw文件夹下的charles或fiddler证书

获取方式:

charles:help--SSL Proxying--Save Charles Root Certificate

这种方案可以实现指定的证书能抓自家的app,但是也有缺陷。假如很多人要抓包,需要他们提供charles证书,而且要将证书打包到App中。更严重的是,假如电脑重新装系统了或换电脑了,那么就没有办法抓已经上线的App了

方案三:

1.和方案1、2一样,添加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时才生效。缺点很明显,包上线了之后就不能再被抓包了

终极方案:

1.和方案二一样,但是证书我们自己生成,这里使用openssl来生成,上命令:


$ openssl req -x509 -newkey rsa:1024 -keyout charles.key -out charles.crt -days 3650 -nodes

之后会让你输入一下国家、地区、邮箱等,自己能记住就行。最后会生成2个文件:

charles.crt和charles.key

2.但是,Charles软件需要的是PKCS12文件,我们需要将上面2个文件绑到一起,上命令:


$ openssl pkcs12 -export -out charles.pfx -inkey charles.key -in charles.crt

Enter Export Password: <YOUR KEY>

Verifying - Enter Export Password: <YOUR KEY>

上面输入的密码必须记住,之后给Charles替换我们自己的根证书的时候需要。

之后会生成一个文件:charles.pfx

3.用charles.pfx文件替换Charles软件的根证书

路径:Pxoxy--SSL Proxying Settings--Root Certificate--Choose

之后选择charles.pfx文件作为根证书,需要输入密码,就是上面我们创建时候填的密码。记得勾选记住密码,要不每次都得输。

4.最后,将charles.crt放到Android项目的raw文件夹下,并在network_security_config.xml中进行指定,和方案二一样

现在我们就可以愉快的抓包了,谁需要抓包,把charles.pfx和密码给他就行

具体如何自己生成证书,我是参考这篇文章,需要科学上网,有需要的自己去看:

http://codeblog.shape.dk/blog/2014/01/06/custom-ssl-certificate-with-charles-web-proxy/

希望能帮到你

相关文章

网友评论

      本文标题:Android7.0之后不能抓包--终极解决方案

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