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

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

方案一:

1.添加res/xml/network_security_config.xml






    

            

            

    



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






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

方案二:

1.和方案1一样,添加res/xml/network_security_config.xml,但是里面的配置不一样






    

            

            

    



2.是添加到raw文件夹下的charles或fiddler证书

获取方式:

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

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

方案三:

1.和方案1、2一样,添加res/xml/network_security_config.xml,但是里面的配置不一样






    

        

            

            

        

    



这种方式只有在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: 

Verifying - Enter Export Password: 

上面输入的密码必须记住,之后给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之后不能抓包--终极解决方案)