python原生如何实现抓包_Python 爬虫时,高版本 App 如何进行抓包?

我们都知道 iphone 和低版本 Android 抓包,只需要设置代理和配置证书就可以顺利抓包

但是升级了 targetSdkVersion 到 28 后发现,在 Android 7.0 以上机型 Charles 抓取 https 包时显示找不到证书,但是 Android 6.0 机型还是可以正常抓包。

这其中的原因是,从 Android 7.0 开始,默认的网络安全性配置修改了

解决方法如下:

现象:android7.0 以上的手机 https 抓包失败(安装了 https 证书也不行)

原因:android7.0+ 的版本新增了证书验证(系统证书),具体如下:

1、Android 6.0(API 23)及更低版本应用的默认网络安全性配置如下:

2、而在 Android 7.0(API 24)到 Android 8.1(API 27)的默认网络安全性配置如下:

3、而在 Android 9.0(API 28)及更高版本的默认网络安全性配置如下:

对比很容易发现,在 Android 7.0(API 24)到 Android 8.1(API 27),默认不再信任用户添加的 CA 证书,所以也就不再信任 Charles 和 Fiddler 抓包工具的证书,所以抓取 HTTPS 包时才会失败

而且在 Android 9.0(API 28)及更高版本上,不仅默认只系统预装的 CA 证书,还默认禁止所有明文通信(不允许 http 请求)

解决办法:

前提:在手机端和电脑端都必须安装 https 的安全证书配置:打测试包时,项目设置默认信任所有证书(系统 + 用户,Charles 和 Fiddler)1、在项目工程 res-xml 目录中创建一个名为 network_security_config.xml 的文件,文件内容如下:

2、在 AndroidManifest 里的

标签中,添加如下代码,在清单文件中指向该文件:

<?xml version="1.0" encoding="utf-8"?>...

重新打包项目,然后抓包,即可成功

Webview 抓包失败

上面可以解决 Android 原生抓包问题,但在 Android7.0 以上的手机,开着网络代理访问不了Webview

若要抓包webview,需要在 Webview 的 WebViewClient 中,将一行代码给注释掉:

super.onReceivedSslError(view, handler, error)

这样是为了忽略掉 SSL 证书错误

因为开启代理后网络会变得不安全,证书会报错误,Webview 检测到证书错误之后就不请求任何数据。注释是为了忽略掉父类的处理,默认执行下去。

警告

这样的配置操作是敏感且危险的,只能用于测试环境方便抓包,线上包一定注意要恢复配置,不然 APP 会面临被他人抓包的风险。

如何只在调试模式下允许抓包呢?

使用即可实现:只在android:debuggable为true时才生效的配置

网上有些解决方式是将 Charles 和 Fiddler 的证书添加到raw文件夹下的方式也可以,但是繁琐了点

在 Android 9.0(API 28)以上允许部分 http 请求

最佳的解决方式肯定是全部使用 https 请求,安全性更高,如果有些请求或测试环境下还是需要使用 http 请求,需要在网络安全性配置添加白名单:

<?xml version="1.0" encoding="utf-8"?>sample.domain

后记通过查找资料,还有一个方法,通过重载 WebViewClient 的 onReceivedSslError() 函数并在其中执行 handler.proceed(),即可忽略 SSL 证书错误,继续加载页面

代码如下:

WebView webview = (WebView) findViewById(R.id.webview);webview.setWebViewClient(new WebViewClient() {@Overridepublic void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error){// 不要调用super.onReceivedSslError,因为其包含了一条 handler.cancel(),第一次访问时无法加载,第二次以后可以加载// super.onReceivedSslError(view, handler, error);// 忽略SSL证书错误,继续加载页面handler.proceed();}}

推荐阅读

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值